Corosync+pacemaker實現基於drbd分散式存儲的mysql高可用集羣

前提:
1.兩臺服務器HA1.coolinuz.com別名爲HA1,HA2.coolinuz.com別名HA2
2.IP地址HA1:192.168.0.73,HA2:192.168.0.76
3.系統平臺爲:RHEL5.4 x86
準備工作:
1、修改本地的Hosts文件,使兩節點能夠互相解析:
[root@HA1 ~]# vim /etc/hosts


[root@HA1 ~]# scp /etc/hosts HA2:/etc/

2、建立雙機互信,爲後面的高可用集羣兩節點傳遞信息時所用
HA1:
[root@HA1 ~]# ssh-keygen -t rsa
[root@HA1 ~]# ssh-copy-id -i .ssh/id_rsa.pub HA2

在HA2上執行相同操作:
[root@HA2 ~]# ssh-keygen -t rsa
[root@HA2 ~]# ssh-copy-id -i .ssh/id_rsa.pub HA1

驗證雙機互信是否配置成功:

一、安裝drbd
drbd共有兩部分組成:內核模塊和用戶空間的管理工具。其中drbd內核模塊代碼已經整合進Linux內核2.6.33以後的版本中,因此,如果內核版本高於此版本的話,你只需要安裝管理工具即可;否則,
需要同時安裝內核模塊和管理工具兩個軟件包,並且此兩者的版本號一定要保持對應。這裏筆者內核版本爲2.6.18-164.el5,因此需要下載內核模塊和用戶空間的管理工具下載地址:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/
1、安裝drbd
Ps:所有的安裝包我都存放在家目錄下的tmp目錄中:
[root@HA1 tmp]# yum localinstall -y --nogpgcheck drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm
2、配置drbd
複製樣例配置文件到/etc下
[root@HA1 tmp]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/
配置drbd全局配置參數
[root@HA2 ha]# vim /etc/drbd.d/global_common.conf

3、爲drbd準備一塊大小相同的分區,不要創建文件系統(不要格式化)
具體步驟不在贅述,筆者這裏,在HA1上準備的是一塊5G大小的分區,編號爲/dev/sdb1,在HA2上準備的也是一塊5G大小的分區,編號爲/dev/sdb1
4、定義一個資源,內容如下:
[root@HA2 ha]# vim /etc/drbd.d/mysql.res

5、同步兩節點的配置文件以及資源文件
[root@HA1 tmp]# scp -r /etc/drbd.* HA2:/etc/
6、初始化資源,在兩節點上分別執行:
[root@HA1 ~]# drbdadm create-md mysql


7、啓動服務,在兩節點上分別執行:
[root@HA1 ~]# service drbd start
[root@HA2 ~]# service drbd start

8、查看啓動狀態:

9、將其中一個節點設置爲Primary,在要設置爲Primary的節點上執行如下命令:
[root@HA1 ~]# drbdadm -- --overwrite-data-of-peer primary mysql
觀察同步過程:
[root@HA1 ~]# watch -n 1 'drbd-overview'


Ps:如果分區較大,同步的過程會需要較長一段時間。
10、在/dev/drbd0上創建文件系統
[root@HA1 ~]# mke2fs -j /dev/drbd0
[root@HA1 ~]# mkdir /mysql
[root@HA1 ~]# ssh HA2 mkdir /mysql
[root@HA1 ~]# mount /dev/drbd0 /mysql/

11、切換Primary和Secondary節點,確保drbd配置成功
[root@HA1 ~]# umount /mysql/
[root@HA1 ~]# drbdadm secondary mysql
[root@HA2 ~]# drbdadm primary mysql
[root@HA1 ~]# drbd-overview


[root@HA2 ~]# drbd-overview

二、安裝Mysql
爲簡化實驗的的複雜性,這裏使用mysql解壓安裝版本
1、添加mysql的運行用戶
[root@HA1 ~]# groupadd -r mysql
[root@HA1 ~]# useradd -g mysql -r -s /sbin/nologin mysql

HA2上執行同樣的操作
2、將Primary和Secondary節點重新切換回來
[root@HA2 ~]# drbdadm secondary mysql
[root@HA1 ~]# drbdadm primary mysql

Ps:這一步不是必要的,只是習慣性喜歡將HA1設爲Primary
3、創建mysql的數據目錄
[root@HA1 ~]# mount /dev/drbd0 /mysql/
[root@HA1 ~]# mkdir /mysql/data
[root@HA1 ~]# chown -R mysql.mysql /mysql/data/

4、安裝mysql
[root@HA1 tmp]# tar xvf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local/
[root@HA1 tmp]# cd /usr/local/
[root@HA1 local]# ln -sv mysql-5.5.24-linux2.6-i686 mysql
[root@HA1 local]# cd mysql
[root@HA1 mysql]# cp support-files/my-large.cnf /etc/my.cnf
[root@HA1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@HA1 mysql]# chkconfig --add mysqld

Ps:在節點HA2上執行同樣的上述操作;
節點HA1:
[root@HA1 mysql]# chown -R mysql.mysql .
[root@HA1 mysql]# vim /etc/my.cnf


[root@HA1 mysql]# scp /etc/my.cnf HA2:/etc/
[root@HA1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mysql/data/

節點HA2:
[root@HA1 mysql]# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
[root@HA1 mysql]# chkconfig --add mysqld
[root@HA2 mysql]# chown -R root.mysql .

Ps:由於只有能在drbd的Primary節點上才能掛載,因此只在掛載了drbd的節點上進行初始化mysql;切勿兩節點都進行初始化操作;
5、分別在兩節點上啓動Mysql,驗證基於drbd的mysql是否均能啓動
節點HA1:
[root@HA1 mysql]# service mysqld start


[root@HA1 mysql]# service mysqld stop
[root@HA1 mysql]# umount /mysql/
[root@HA1 mysql]# drbdadm secondary mysql

節點HA2:
[root@HA2 mysql]# drbdadm primary mysql
[root@HA2 mysql]# mount /dev/drbd0 /mysql/
[root@HA2 mysql]# service mysqld start


由此可見基於的drbd的mysql在兩節點上啓動均正常
取消drbd和Mysql的開啓啓動,將其定義爲高可用集羣的資源,並且停止其服務
# service mysqld stop
# umount /mysql
# service drbd stop
# chkconfig mysqld off
# chkconfig drbd off

三、安裝corosync+pacemaker
安裝corosync+pacemaker需要安裝以下軟件包:
cluster-glue、cluster-glue-libs、heartbeat、resource-agents、corosync、heartbeat-libs、pacemaker、corosynclib、libesmtp、pacemaker-libs
下載地址:http://clusterlabs.org/rpm/下載符合自己平臺架構的軟件包
1、安裝這些軟件包:
Ps:我將所有的軟件包下載至ha目錄中
[root@HA1 ha]# yum localinstall -y --nogpgcheck ./*.rpm
[root@HA2 ha]# yum localinstall -y --nogpgcheck ./*.rpm

2、配置corosync:
[root@HA1 ha]# cd /etc/corosync/
[root@HA1 corosync]# cp corosync.conf.example corosync.conf
[root@HA1 corosync]# vim /etc/corosync.conf


[root@HA1 corosync]# corosync-keygen         #生成集羣節點之間認證的密鑰
[root@HA1 corosync]# scp -p corosync.conf authkey HA2:/etc/corosync/           
#爲HA2節點提供相同的配置文件和密鑰文件
[root@HA1 corosync]# mkdir /var/log/cluster
[root@HA1 corosync]# ssh HA2 mkdir /var/log/cluster

3、啓動corosync
[root@HA1 corosync]# service corosync start
[root@HA1 corosync]# ssh HA2 service corosync start
[root@HA1 corosync]# grep -e "Corosync Cluster Engine" -e "configuration file"
/var/log/cluster/corosync.log
#查看服務是否正常啓動


[root@HA1 corosync]# grep TOTEM /var/log/cluster/corosync.log
#查看初始化成員節點通知是否正常發出


[root@HA1 corosync]# grep pcmk_startup /var/log/cluster/corosync.log
#查看pacemaker是否正常啓動

節點HA1啓動正常,同樣方法檢測節點HA2啓動是否正常

[root@HA1 corosync]# crm status

#查看集羣節點的啓動情況

四、定義集羣服務:
1、設置集羣的工作屬性
[root@HA1 corosync]# crm
crm(live)configure# property stonith-enabled=false
#關閉stonith設備檢測,如果具有stonith設備不必執行該項
crm(live)configure# property no-quorum-policy=ignore
#關閉法定投票人數策略,如果是多節點集羣則不必關閉法定投票人數策略
crm(live)configure# rsc_defaults resource-stickiness=100
#定義全局資源粘性值
crm(live)configure# show

2、定義drbd資源,接受corosync的調度
crm(live)configure# primitive drbd0 ocf:linbit:drbd params drbd_resource=mysql op monitor role=Master interval=50s timeout=30s op monitor role=Slave interval=60s timeout=30s op start timeout=240s op stop timeout=100s
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# ms MS-drbd drbd0 meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"crm(live)configure# verify
crm(live)configure# commit
crm(live)# status

3、定義文件系統資源
crm(live)configure# primitive FS ocf:heartbeat:Filesystem params device=/dev/drbd0 directory=/mysql fstype=ext3 op start timeout=60s op stop timeout=60s
crm(live)configure# verify
crm(live)configure# commit
crm(live)# status

4、定義mysql爲一個資源,接受corosync的調度
crm(live)configure# primitive Mysql-server lsb:mysqld
crm(live)configure# verify
crm(live)configure# commit
crm(live)# status


Mysql啓動失敗,因爲drbd的Primary節點在HA1上掛載,mysql在節點HA2上啓動自然啓動不起來
5、設置資源約束,規定啓動順序
crm(live)configure# colocation drbd-fs-mysql INFINITY: MS-drbd FS Mysql-server
#定義資源約束,將所有資源捆綁在一起,使其只能處於一個節點上,此處也可以講這三個資源定義爲一個group,同樣可以實現colocation的效果
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# order drbd-fs-mysql-after mandatory: MS-drbd FS Mysql-server
#定義啓動順序:DRBD資源,文件系統資源,Mysql服務資源
crm(live)configure# verify
crm(live)configure# commit
crm(live)configure# show


crm(live)configure# status

6、測試資源流轉
[root@HA1 corosync]# crm node standby
[root@HA2 ha]# crm status

到此Corosync+pacemaker基於drbd分散式存儲的mysql高可用集羣已經實現,以上內容在您實現過程中出現了任何問題,歡迎在此交流;並請各位大蝦們予以批評指正,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章