linux corosync+pacemaker+drbd+mysql配置安裝詳解_Linux

來源:互聯網
上載者:User

一, 基本環境介紹及基本環境配置

節點1: node1.hulala.com      192.168.1.35     centos6.5_64    添加8G新硬碟
節點2: node1.hulala.com      192.168.1.36     centos6.5_64    添加8G新硬碟
vip   192.168.1.39  

節點1與節點2均需配置

修改主機名稱:

vim /etc/sysconfig/network
HOSTNAME=node1.hulala.com

配置hosts解析:

vim /etc/hosts
192.168.1.35    node1.hulala.com node1
192.168.1.36    node2.hulala.com node1     
同步系統時間:
ntpdate cn.pool.ntp.org
關閉防火牆與SELINUX

service iptables stop
chkconfig iptables off
cat /etc/sysconfig/selinux
SELINUX=disabled

以上配置在兩個節點都需要配置,配置完成之後重啟兩個節點

二:配置ssh互信

[root@node1~]#ssh-keygen -t rsa -b 1024
[root@node1~]#ssh-copy-id root@192.168.1.36
[root@node2~]#ssh-keygen -t rsa -b 1024
[root@node2~]#ssh-copy-id root@192.168.1.35

三:DRBD的安裝與配置(node1和node2執行相同操作)

[root@node1~]#wget -c http://elrepo.org/linux/elrepo/el6/x86_64/RPMS/drbd84-utils-8.4.2-1.el6.elrepo.x86_64.rpm
[root@node1~]#wget -c http://elrepo.org/linux/elrepo/el6/x86_64/RPMS/kmod-drbd84-8.4.2-1.el6_3.elrepo.x86_64.rpm
[root@node1~]#rpm -ivh *.rpm

擷取一個sha1值做為shared-secret

[root@node1~]#sha1sum /etc/drbd.conf
8a6c5f3c21b84c66049456d34b4c4980468bcfb3  /etc/drbd.conf

建立並編輯資源設定檔:/etc/drbd.d/dbcluster.res

複製代碼 代碼如下:

[root@node1~]# vim /etc/drbd.d/dbcluster.res
resource dbcluster {
    protocol C;
    net {
        cram-hmac-alg sha1;
        shared-secret "8a6c5f3c21b84c66049456d34b4c4980468bcfb3";
        after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
        after-sb-2pri disconnect;
        rr-conflict disconnect;
    }
    device    /dev/drbd0;
    disk      /dev/sdb1;
meta-disk internal;
    on node1.hulala.com {
        address   192.168.1.35:7789;
    }
    on node2.hulala.com {
        address   192.168.1.36:7789;
    }
}

以上配置所用參數說明:

RESOURCE: 資源名稱
PROTOCOL: 使用協議”C”表示”同步的”,即收到遠端寫入確認之後,則認為寫入完成.
NET: 兩個節點的SHA1 key是一樣的
after-sb-0pri : “Split Brain”發生時且沒有資料變更,兩節點之間正常串連
after-sb-1pri : 如果有資料變更,則放棄輔裝置資料,並且從主裝置同步
rr-conflict: 假如前面的設定不能應用,並且drbd系統有角色衝突的話,系統自動斷開節點間串連
META-DISK: Meta data儲存在同一個磁碟(sdb1)
ON <NODE>: 組成叢集的節點
將DRBD配置拷貝到node機器:

[root@node1~]#scp /etc/drbd.d/dbcluster.res root@192.168.1.36:/etc/drbd.d/

建立資源及檔案系統:

建立分區(未格式化過)
在node1和node2上建立LVM分區:
[root@node1~]#fdisk /dev/sdb
在node1和node2上給資源(dbcluster)建立meta data:
[root@node1~drbd]#drbdadm create-md dbcluster
啟用資源(node1和node2都得查看)
– 首先確保drbd module已經載入
查看是否載入:
# lsmod | grep drbd
若未載入,則需載入:
# modprobe drbd
# lsmod | grep drbd
drbd                  317261  0
libcrc32c               1246  1 drbd
– 啟動drbd後台進程:
[root@node1 drbd]# drbdadm up dbcluster
[root@node2 drbd]# drbdadm up dbcluster
查看(node1和node2)drbd狀態:
[root@node2 drbd]# /etc/init.d/drbd status
GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
m:res        cs         ro                   ds                         p  mounted  fstype
0:dbcluster  Connected  Secondary/Secondary  Inconsistent/Inconsistent  C
從上面的資訊可以看到,DRBD服務已經在兩台機器上運行,但任何一台機器都不是主機器(“primary” host),因此無法訪問到資源(block device).
開始同步:
僅在主節點操作(這裡為node1)
[root@node1 drbd]# drbdadm — –overwrite-data-of-peer primary dbcluster
查看同步狀態:
[root@node1 drbd.d]# cat /proc/drbd
version: 8.4.2 (api:1/proto:86-101)
GIT-hash: 7ad5f850d711223713d6dcadc3dd48860321070c build by dag@Build64R6, 2012-09-06 08:16:10
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r—–
 ns:8297248 nr:0 dw:0 dr:8297912 al:0 bm:507 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
上面的輸出結果的一些說明:
cs (connection state): 網路連接狀態
ro (roles): 節點的角色(本節點的角色首先顯示)
ds (disk states):硬碟的狀態
複製協議: A, B or C(本配置是C)
看到drbd狀態為”cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate”即表示同步結束.
也可以這樣查看drbd狀態:
[root@centos193 drbd]# drbd-overview
  0:dbcluster/0  Connected Secondary/Primary UpToDate/UpToDate C r—–
建立檔案系統:
在主節點(Node1)建立檔案系統:
[root@node1 drbd]# mkfs -t ext4 /dev/drbd0
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
…….
180 days, whichever comes first.  Use tune2fs -c or -i to override.
注:沒必要在輔節點(Node2)做同樣的操作,因為DRBD會處理原始磁碟資料的同步.
另外,我們也不需要將這個DRBD系統掛載到任何一台機器(當然安裝MySQL的時候需要臨時掛載來安裝MySQL),因為叢集管理軟體會處理.還有要確保複製的檔案系統僅僅掛載在Active的主伺服器上.

三:mysql的安裝

1,在node1和node2節點安裝mysql:
yum install mysql* -y
2.node1和node2都操作停止mysql服務
[root@node1~]# service mysql stop
Shutting down MySQL.        [  OK  ]
3.node1和node2都操作建立資料庫目錄並將該目錄許可權屬主修改為mysql
[root@host1 /]# mkdir -p /mysql/data
[root@host1 /]# chown -R mysql:mysql /mysql
4,關閉mysql臨時掛載DRBD檔案系統到主節點(Node1):
[root@node1 ~]# mount /dev/drbd0  /mysql/
5.node1和node2都操作修改my.cnf檔案修改
在[mysqld]下添加新的資料存放路徑
datadir=/mysql/data
7.將預設的資料路徑下的所有檔案和目錄cp到新的目錄下(node2不用操作)
[root@host1 mysql]#cd /var/lib/mysql
[root@host1 mysql]#cp -R * /mysql/data/
node1和node2都操作這裡注意copy過去的目錄許可權屬主需要修改為mysql,這裡直接修改mysql目錄即可.
[root@host1 mysql]# chown -R mysql:mysql /mysql
8.啟動node1上的mysql進行登陸測試
[root@host1 mysql]# mysql
9.在節點Node1卸載DRBD檔案系統
[root@node1 ~]# umount /var/lib/mysql_drbd
[root@node1 ~]# drbdadm secondary dbcluster
將DRBD檔案系統掛載節點Node2
[root@node2 ~]# drbdadm primary dbcluster
[root@node2 ~]# mount /dev/drbd0 /mysql/
節點Node2上配置MySQL並測試
[root@node1 ~]# scp node2:/etc/my.cnf /etc/my.cnf
[root@node2 ~]# chown mysql /etc/my.cnf
[root@node2 ~]# chmod 644 /etc/my.cnf
10. node2上做mysql登陸測試
[root@node2 ~]# mysql
11.在Node2上卸載DRBD檔案系統,交由叢集管理軟體Pacemaker來管理
[root@node2~]# umount /var/lib/mysql_drbd
[root@node2~]# drbdadm secondary dbcluster
[root@node2~]# drbd-overview
  0:dbcluster/0  Connected Secondary/Secondary UpToDate/UpToDate C r—–
[root@node2~]#

四:Corosync和Pacemaker的安裝配置(node1和node2都需安裝)

安裝Pacemaker必須依賴:
[root@node1~]#yum -y install automake autoconf libtool-ltdl-devel pkgconfig python glib2-devel libxml2-devel libxslt-devel python-devel gcc-c++ bzip2-devel gnutls-devel pam-devel libqb-devel
安裝Cluster Stack依賴:
[root@node1~]yum -y install clusterlib-devel corosynclib-devel
安裝Pacemaker可選依賴:
[root@node1~]yum -y install ncurses-devel openssl-devel cluster-glue-libs-devel docbook-style-xsl

Pacemaker安裝:

[root@node1~]yum -y install pacemaker

crmsh安裝:

[root@node1~]wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-6/network:ha-clustering:Stable.repo
[root@node1~]yum -y install crmsh

1,配置corosync
Corosync Key
– 產生節點間安全通訊的key:
[root@node1~]# corosync-keygen
– 將authkey拷貝到node2節點(保持authkey的許可權為400):
[root@node~]# scp /etc/corosync/authkey node2:/etc/corosync/
2,[root@node1~]# cp /etc/corosync/corosync.conf.example /etc/corosync/corosync.conf
編輯/etc/corosync/corosync.conf:

複製代碼 代碼如下:

# Please read the corosync.conf.5 manual page
compatibility: whitetank
aisexec {
        user: root
        group: root
}
totem {
        version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.1.0
mcastaddr: 226.94.1.1
mcastport: 4000
ttl: 1
}
}
logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}
amf {
mode: disabled
}

– 建立並編輯/etc/corosync/service.d/pcmk,添加”pacemaker”服務
[root@node1~]# cat /etc/corosync/service.d/pcmk
service {
# Load the Pacemaker Cluster Resource Manager
name: pacemaker
ver: 1
}
將上面兩個設定檔拷貝到另一節點
[root@node1]# scp /etc/corosync/corosync.conf node2:/etc/corosync/corosync.conf
[root@node1]# scp /etc/corosync/service.d/pcmk node2:/etc/corosync/service.d/pcmk
3,啟動corosync和Pacemaker
 分別在兩個節點上啟動corosync並檢查.
[root@node1]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
[root@node1~]# corosync-cfgtool -s
Printing ring status.
Local node ID -1123964736
RING ID 0
id = 192.168.1.189
status = ring 0 active with no faults
[root@node2]# /etc/init.d/corosync start
Starting Corosync Cluster Engine (corosync):               [  OK  ]
– 在兩節點上分別啟動Pacemaker:
[root@node1~]# /etc/init.d/pacemaker start
Starting Pacemaker Cluster Manager:                        [  OK  ]
[root@node2~]# /etc/init.d/pacemaker start
Starting Pacemaker Cluster Manager: 

資源配置

配置資源及約束                 
配置預設屬性
查看已存在的配置:
[root@node1 ~]# crm configure show
node node1.hulala.com
node node2.hulala.com
property $id="cib-bootstrap-options" dc-version="1.1.8-7.el6-394e906" cluster-infrastructure="classic openais (with plugin)" expected-quorum-votes="2"
禁止STONITH錯誤:
[root@node1 ~]# crm configure property stonith-enabled=false
[root@node1 ~]# crm_verify -L
讓叢集忽略Quorum:
[root@node1~]# crm configure property no-quorum-policy=ignore
防止資源在恢複之後移動:
[root@node1~]# crm configure rsc_defaults resource-stickiness=100
設定作業的預設逾時:
[root@node1~]# crm configure property default-action-timeout="180s"
設定預設的啟動失敗是否為致命的:
[root@node1~]# crm configure property start-failure-is-fatal="false"
配置DRBD資源
– 配置之前先停止DRBD:
[root@node1~]# /etc/init.d/drbd stop
[root@node1~]# /etc/init.d/drbd stop
– 配置DRBD資源:
[root@node1~]# crm configure
crm(live)configure# primitive p_drbd_mysql ocf:linbit:drbd params drbd_resource="dbcluster" op monitor interval="15s" op start timeout="240s" op stop timeout="100s"
– 配置DRBD資源主從關係(定義只有一個Master節點):
crm(live)configure# ms ms_drbd_mysql p_drbd_mysql meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
– 設定檔系統資源,定義掛載點(mount point):
crm(live)configure# primitive p_fs_mysql ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/lib/mysql_drbd/" fstype="ext4"
配置VIP資源
crm(live)configure# primitive p_ip_mysql ocf:heartbeat:IPaddr2 params ip="192.168.1.39" cidr_netmask="24" op monitor interval="30s"
配置MySQL資源
crm(live)configure# primitive p_mysql lsb:mysql op monitor interval="20s" timeout="30s" op start interval="0" timeout="180s" op stop interval="0" timeout="240s"
組資源和約束
通過”組”確保DRBD,MySQL和VIP是在同一個節點(Master)並且確定資源的啟動/停止順序.
啟動: p_fs_mysql–>p_ip_mysql->p_mysql
停止: p_mysql–>p_ip_mysql–>p_fs_mysql
crm(live)configure# group g_mysql p_fs_mysql p_ip_mysql p_mysql
組group_mysql永遠只在Master節點:
crm(live)configure# colocation c_mysql_on_drbd inf: g_mysql ms_drbd_mysql:Master
MySQL的啟動永遠是在DRBD Master之後:
crm(live)configure# order o_drbd_before_mysql inf: ms_drbd_mysql:promote g_mysql:start

配置檢查和提交

crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# quit

查看叢集狀態和failover測試

狀態查看:
[root@node1 mysql]# crm_mon -1r
Failover測試:
將Node1設定為Standby狀態
[root@node1 ~]# crm node standby
過幾分鐘查看叢集狀態(若切換成功,則看到如下狀態):
[root@node1 ~]# crm status
將Node1恢複online狀態:
[root@node1 mysql]# crm node online
[root@node1 mysql]# crm status

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.