corosync+pacemaker實現高可用集羣

 corosync+pacemaker實現高可用集羣mysql服務共享存儲

說明:VIP地址爲:172.16.22.1

一共有三臺服務器:

MySQL1 node1.lihuan.com   172.16.22.10   node1

MySQL2 node2.lihuan.com   172.16.22.11   node2

NFS Server:172.16.22.2   nfs

如圖:

備註:配置成高可用集羣,服務是絕對不能開機啓動,也不能啓動此服務的,而是由高可用集羣控制服務的啓動與關閉的

 

一、創建邏輯卷以及安裝mysql

創建邏輯卷用來做mysql數據共享存儲的,並掛載邏輯卷,開機自動掛載

1.nfs上:

# vim /etc/sysconfig/network-scripts/ifcfg-eth0  #更改nfsIP地址

更改IPADDRNETMASK:

IPADDR=172.16.22.2

NETMASK=255.255.0.0

# service network restart

# setenforce 0

  1. # fdisk /dev/sda 
  2.   
  3.  
  4.   
  5. +20G 
  6. 8e 
  7. # partprobe /dev/sda 
  8. # pvcreate /dev/sda5 
  9. # vgcreate myvg /dev/sda5 
  10. # lvcreate -L 10G -n mydata myvg 
  11. # mke2fs -j -L MYDATA /dev/myvg/mydata 
  12. # mkdir /mydata 
  13. # vim /etc/fstab  #在最後加上下面一行 
  14. LABEL=MYDATA       /mydata           ext3 defaults   0 0 
  15. # mount -a 
  16. # mount 
  17. # groupadd -g 306 -r mysql 
  18. # useradd -g mysql -r -u 306 -s /sbin/nologin mysql 
  19. # id mysql 
  20. # chown -R mysql:mysql /mydata/ 
  21. # vim /etc/exports   #寫上下面一行 
  22. /mydata            172.16.0.0/16(rw,no_root_squash) 
  23. # service nfs start 
  24. # rpcinfo -p localhost 
  25. # chkconfig nfs on 
  26. # showmount -e 172.16.22.2 
  27.  
  28.   

2.準備mysql服務

node1上:

  1. # groupadd -g 306 -r mysql 
  2. # useradd -g mysql -r -u 306  mysql 
  3. # mkdir /mydata 
  4. # mount -t nfs 172.16.22.2:/mydata /mydata/ 
  5. # ls /mydata/ 
  6. # cd /mydata 
  7. # touch 1.txt 
  8. # tar xvf mysql-5.5.22-linux2.6-i686.tar.gz -C /usr/local 
  9. # cd /usr/local/ 
  10. # ln -sv mysql-5.5.22-linux2.6-i686  mysql   
  11. # cd mysql 
  12. # chown -R mysql:mysql  . 
  13. # scripts/mysql_install_db --user=mysql --datadir=/mydata/data   #初始化mysql 
  14. # chown -R root  . 

mysql提供主配置文件:

# cd /usr/local/mysql

# cp support-files/my-large.cnf  /etc/my.cnf

# vim /etc/my.cnf

修改thread_concurrency = 8爲:

thread_concurrency = 2

並增加如下一行:

datadir = /mydata/data

mysql提供sysv服務腳本:

# cd /usr/local/mysql

# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld

備註:提供此腳本的好處就是可以使用諸如service mysqld start的命令了。

  1. # chkconfig --add mysqld 
  2. # service mysqld start 
  3. # /usr/local/mysql/bin/mysql 
  4. # service mysqld stop 
  5. # chkconfig mysqld off 
  6. # chkconfig --list mysqld 

node2上:(由於node1上已經初始化過mysql,並且通過掛在NFS/mydata作爲mysql數據庫存儲路徑了)

  1. # groupadd -g 306 -r mysql 
  2. # useradd -g mysql -r -u 306  mysql 
  3. # mkdir /mydata 
  4. # mount -t nfs 172.16.22.2:/mydata /mydata/ 
  5. # tar xvf mysql-5.5.22-linux2.6-i686.tar.gz -C /usr/local 
  6. # cd /usr/local/ 
  7. # ln -sv mysql-5.5.22-linux2.6-i686  mysql  創建鏈接 
  8. # cd mysql 
  9. # chown -R root:mysql  .  
  10. # cd /usr/local/mysql 

# cp support-files/my-large.cnf  /etc/my.cnf  mysql提供主配置文件:

修改thread_concurrency = 8爲:

thread_concurrency = 2

並增加如下一行:

datadir = /mydata/data

mysql提供sysv服務腳本:

# cd /usr/local/mysql

# cp support-files/mysql.server  /etc/rc.d/init.d/mysqld

備註:提供此腳本的好處就是可以使用諸如service mysqld start的命令了。

  1. # chkconfig --add mysqld 
  2. # chkconfig mysqld off 
  3. # chkconfig --list mysqld 
  4. # service mysqld start 
  5. # /usr/local/mysql/bin/mysql 

mysql> create database ad;  node1查看是否也有數據庫?

# service mysqld stop

 

二、安裝集羣軟件

1.前提條件:

(1).node1上:

更改系統時間(保證node1node2的時間都正確,並保持二者時間一致)

# date

# hwclock -s

# hostname node1.lihuan.com

# vim /etc/sysconfig/network  #把主機名改爲node1.lihuan.com

HOSTNAME=node1.lihuan.com

# vim /etc/sysconfig/network-scripts/ifcfg-eth0  #更改網卡地址爲

 

172.16.22.10,子網掩碼爲255.255.0.0

IPADDR=172.16.22.10

NETMASK=255.255.0.0

# service network restart

# vim /etc/hosts  #增加如下兩項:

172.16.22.10   node1.lihuan.com node1

172.16.22.11   node2.lihuan.com node2

 

(2).node2上:

更改系統時間(保證node1node2的時間都正確,並保持二者時間一致)

# date

# hwclock -s

# hostname node2.lihuan.com

# vim /etc/sysconfig/network  #把主機名改爲node2.lihuan.com

HOSTNAME=node2.lihuan.com

# vim /etc/sysconfig/network-scripts/ifcfg-eth0  #更改網卡地址爲

 

172.16.22.11,子網掩碼爲255.255.0.0

IPADDR=172.16.22.11

NETMASK=255.255.0.0

# service network restart

# vim /etc/hosts  #增加如下兩項:

172.16.22.10   node1.lihuan.com node1

172.16.22.11   node2.lihuan.com node2

(3).實現雙機互信:

node1上:

  1. # ssh-keygen -t rsa 
  2. # ssh-copy-id -i ~/.ssh/id_rsa.pub   [email protected] 

node2上:

  1. # ssh-keygen -t rsa 
  2. # ssh-copy-id -i ~/.ssh/id_rsa.pub   [email protected] 

2.安裝所需軟件:

所需軟件如下:

cluster-glue-1.0.6-1.6.el5.i386.rpm

cluster-glue-libs-1.0.6-1.6.el5.i386.rpm

corosync-1.2.7-1.1.el5.i386.rpm    

corosynclib-1.2.7-1.1.el5.i386.rpm

heartbeat-3.0.3-2.3.el5.i386.rpm  

heartbeat-libs-3.0.3-2.3.el5.i386.rpm   

libesmtp-1.0.4-5.el5.i386.rpm

pacemaker-1.1.5-1.1.el5.i386.rpm

pacemaker-cts-1.1.5-1.1.el5.i386.rpm

pacemaker-libs-1.1.5-1.1.el5.i386.rpm

perl-TimeDate-1.16-5.el5.noarch.rpm   

resource-agents-1.0.4-1.1.el5.i386.rpm

軟件包放在/root(node1node2都需要下載)

(1).node1上:

  1. # yum --nogpgcheck localinstall *.rpm -y 
  2. # cd /etc/corosync 
  3. # cp corosync.conf.example corosync.conf 
  4. # vim corosync   #添加如下內容: 
  5. service { 
  6.         ver:  0 
  7.          name: pacemaker 
  8.          use_mgmtd: yes 
  9.          } 
  10.   
  11. aisexec { 
  12.          user:      root 
  13.          group:     root 

並設定此配置文件中 bindnetaddr後面的IP地址爲你的網卡所在網絡的網絡地址,我們這裏的兩個節點在172.16.0.0網絡,因此這裏將其設定爲172.16.0.0;如下:

bindnetaddr: 192.168.0.0

生成節點間通信時用到的認證密鑰文件:

# corosync-keygen

corosyncauthkey複製至node2:

  1. # scp -p corosync.conf authkey  node2:/etc/corosync/ 
  2. # cd 
  3. # mkdir /var/log/cluster 
  4. # ssh node2 ‘# mkdir /var/log/cluster’ 
  5. # service corosync start 
  6. # ssh node2 '/etc/init.d/corosync start' 
  7. # crm_mon 

配置stonishquorum以及stickiness

  1. # crm 
  2. crm(live)#configure 
  3. crm(live)configure# property stonith-enabled=false 
  4. crm(live)configure# verify 
  5. crm(live)configure# commit 
  6. crm(live)configure# property  no-quorum-policy=ignore 
  7. crm(live)configure# verify 
  8. crm(live)configure# commit 
  9. crm(live)configure# rsc_defaults resource-stickiness=100   #(粘性值只要大於0,表示更樂意留在當前節點) 
  10. crm(live)configure# verify 
  11. crm(live)configure# commit 
  12. crm(live)configure# show 
  13. crm(live)configure# primitive myip ocf:heartbeat:IPaddr params ip='172.16.22.1' 
  14. crm(live)configure# commit 
  15. crm(live)configure# exit 
  16. # ifconfig 

(2).node2上:

# umount /mydata

# yum --nogpgcheck localinstall *.rpm -y

(3).node1上:

# umount /mydata

配置資源:mynfs(文件系統)

  1. # crm 
  2. crm(live)# ra 
  3. crm(live)ra# list ocf heartbeat 
  4. crm(live)ra# meta ocf:heartbeat:Filesystem 
  5. crm(live)ra# cd 
  6. crm(live)# configure 
  7. crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem params 
  8. device="172.16.22.2:/mydata" directory="/mydata" fstype="nfs" op 
  9. start timeout=60s op stop timeout=60s 
  10. crm(live)configure# commit 

配置資源:mysqldmysqld一定要跟mynfs在一起,mynfs要先於mysqld啓動)

  1. crm(live)configure# primitive mysqld lsb:mysqld 
  2. crm(live)configure#  show 

配置綁定關係(擺列約束)

crm(live)configure# colocation mysqld_and_mynfs inf: mysqld mynfs

crm(live)configure# show

說明:inf表明mysqld mynfs永遠在一起

再定義次序(order

  1. crm(live)configure# order mysqld_after_mynfs mandatory: mynfs mysqld:start 
  2. crm(live)configure# show 
  3. crm(live)configure# order mysqld_after_myip mandatory: myip mysqld:start 
  4. crm(live)configure# commit 
  5. crm(live)configure# show 
  6. node node1.lihuan.com \ 
  7.          attributes standby="on" 
  8. node node2.lihuan.com \ 
  9.          attributes standby="off" 
  10. primitive myip ocf:heartbeat:IPaddr \ 
  11.          params ip="172.16.22.1" 
  12. primitive mynfs ocf:heartbeat:Filesystem \ 
  13.          params device="172.16.22.2:/mydata" directory="/mydata" fstype="nfs" \ 
  14.          op start interval="0" timeout="60s" \ 
  15.          op stop interval="0" timeout="60s" 
  16. primitive mysqld lsb:mysqld 
  17. colocation mysqld_and_mynfs inf: mysqld mynfs myip 
  18. order mysqld_after_myip inf: myip mysqld:start 
  19. order mysqld_after_mynfs inf: mynfs mysqld:start 
  20. property $id="cib-bootstrap-options" \ 
  21.          dc-version="1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f" \ 
  22.          cluster-infrastructure="openais" \ 
  23.          expected-quorum-votes="2" \ 
  24.          stonith-enabled="false" \ 
  25.          no-quorum-policy="ignore" 
  26. rsc_defaults $id="rsc-options" \ 
  27.          resource-stickiness="100" 
  28. crm(live)configure# exit 
  29. # ls /mydata/data 
  30. # /usr/local/mysql/bin/mysql 
  31. mysql> SHOW DATABASES; 
  32. mysql> GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '123456'; 
  33. mysql> flush privileges; 
  34. # crm status 
  35. # ls /mydata 
  36. # ls /mydata/data 
  37. # crm node standby 

說明:mandatory爲強制性的

(4).node2

# crm node online

# crm status

(5).windows上連接:mysql -uroot -h172.16.22.1 -p123456

mysql> create database a;

mysql> show databases;

如下圖:

此時可以正常操作mysql

node2故障,在node2上:

# crm node standby

# crm status

node1上:

# crm node online

windows上連接:mysql -uroot -h172.16.22.1 -p123456

mysql> show databases;

如下圖:

此時可以看到mysql數據庫中有database a,說明數據庫一切正常,這就是高可用集羣所實現的功能。

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