前提:
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
準備工做:
一、修改本地的Hosts文件,使兩節點可以互相解析:
[root@HA1 ~]# vim /etc/hostsnode
[root@HA1 ~]# scp /etc/hosts HA2:/etc/
二、創建雙機互信,爲後面的高可用集羣兩節點傳遞信息時所用
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
驗證雙機互信是否配置成功:mysql
1、安裝drbd
drbd共有兩部分組成:內核模塊和用戶空間的管理工具。其中drbd內核模塊代碼已經整合進Linux內核2.6.33之後的版本中,所以,若是內核版本高於此版本的話,你只須要安裝管理工具便可;不然,
須要同時安裝內核模塊和管理工具兩個軟件包,而且此二者的版本號必定要保持對應。這裏筆者內核版本爲2.6.18-164.el5,所以須要下載內核模塊和用戶空間的管理工具下載地址:http://mirrors.sohu.com/centos/5.6/extras/i386/RPMS/
一、安裝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
二、配置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.conflinux
三、爲drbd準備一塊大小相同的分區,不要建立文件系統(不要格式化)
具體步驟不在贅述,筆者這裏,在HA1上準備的是一塊5G大小的分區,編號爲/dev/sdb1,在HA2上準備的也是一塊5G大小的分區,編號爲/dev/sdb1
四、定義一個資源,內容以下:
[root@HA2 ha]# vim /etc/drbd.d/mysql.ressql
五、同步兩節點的配置文件以及資源文件
[root@HA1 tmp]# scp -r /etc/drbd.* HA2:/etc/
六、初始化資源,在兩節點上分別執行:
[root@HA1 ~]# drbdadm create-md mysqlvim
七、啓動服務,在兩節點上分別執行:
[root@HA1 ~]# service drbd start
[root@HA2 ~]# service drbd start
八、查看啓動狀態:centos
九、將其中一個節點設置爲Primary,在要設置爲Primary的節點上執行以下命令:
[root@HA1 ~]# drbdadm -- --overwrite-data-of-peer primary mysql
觀察同步過程:
[root@HA1 ~]# watch -n 1 'drbd-overview'服務器
Ps:若是分區較大,同步的過程會須要較長一段時間。
十、在/dev/drbd0上建立文件系統
[root@HA1 ~]# mke2fs -j /dev/drbd0
[root@HA1 ~]# mkdir /mysql
[root@HA1 ~]# ssh HA2 mkdir /mysql
[root@HA1 ~]# mount /dev/drbd0 /mysql/
十一、切換Primary和Secondary節點,確保drbd配置成功
[root@HA1 ~]# umount /mysql/
[root@HA1 ~]# drbdadm secondary mysql
[root@HA2 ~]# drbdadm primary mysql
[root@HA1 ~]# drbd-overview架構
[root@HA2 ~]# drbd-overviewssh
2、安裝Mysql
爲簡化實驗的的複雜性,這裏使用mysql解壓安裝版本
一、添加mysql的運行用戶
[root@HA1 ~]# groupadd -r mysql
[root@HA1 ~]# useradd -g mysql -r -s /sbin/nologin mysql
HA2上執行一樣的操做
二、將Primary和Secondary節點從新切換回來
[root@HA2 ~]# drbdadm secondary mysql
[root@HA1 ~]# drbdadm primary mysql
Ps:這一步不是必要的,只是習慣性喜歡將HA1設爲Primary
三、建立mysql的數據目錄
[root@HA1 ~]# mount /dev/drbd0 /mysql/
[root@HA1 ~]# mkdir /mysql/data
[root@HA1 ~]# chown -R mysql.mysql /mysql/data/
四、安裝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.cnfide
[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;切勿兩節點都進行初始化操做;
五、分別在兩節點上啓動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
3、安裝corosync+pacemaker
安裝corosync+pacemaker須要安裝如下軟件包:
cluster-glue、cluster-glue-libs、heartbeat、resource-agents、corosync、heartbeat-libs、pacemaker、corosynclib、libesmtp、pacemaker-libs
下載地址:http://clusterlabs.org/rpm/下載符合本身平臺架構的軟件包
一、安裝這些軟件包:
Ps:我將全部的軟件包下載至ha目錄中
[root@HA1 ha]# yum localinstall -y --nogpgcheck ./*.rpm
[root@HA2 ha]# yum localinstall -y --nogpgcheck ./*.rpm
二、配置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
三、啓動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
#查看集羣節點的啓動狀況
4、定義集羣服務:
一、設置集羣的工做屬性
[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
二、定義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
三、定義文件系統資源
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
四、定義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上啓動天然啓動不起來
五、設置資源約束,規定啓動順序
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
六、測試資源流轉
[root@HA1 corosync]# crm node standby
[root@HA2 ha]# crm status
到此Corosync+pacemaker基於drbd分散式存儲的mysql高可用集羣已經實現,以上內容在您實現過程當中出現了任何問題,歡迎在此交流;並請各位大蝦們予以批評指正,謝謝!