基於corosync/openais+NFS實現MYSQL的高可用

實驗準備:

MYSQL軟件包:mysql-5.5.24-linux2.6-i686.tar.gz
corosync軟件包:corosync-1.2.7-1.1.el5.i386.rpm和corosynclib-1.2.7-1.1.el5.i386.rpm
pacemaker軟件包: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
資源代理包: resource-agents-1.0.4-1.1.el5.i386.rpm
其他依賴包有:cluster-glue-1.0.6-1.6.el5.i386.rpm,cluster-glue-libs-1.0.6-1.6.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

實驗環境:

本實驗是基於虛擬機操作的。相關信息如下拓撲圖:

實驗步驟:

在NFS服務器上 
 
1、首先創建邏輯卷並掛載共享目錄

  1. 創建兩個分區並調整其類型爲8e  
  2. #pvcreate /dev/sda{5,6}  
  3. vgcreate myvg /dev/sda{5,6}  
  4. #lvcreate -n mylv -L 20G /dev/myvg  
  5. #mke2fs -j /dev/myvg/mylv    //格式化分區  
  6. #mkdir  /sharedata  
  7. #mount /dev/myvg/mylv  /sharedata  
  8.  
  9. 使其能夠開機自動掛載  
  10. 編輯/etc/fstab文件,添加如下行後保存退出  
  11. /dev/myvg/mylv  /sharedata ext3 defaults    0 0  
  12. #chown -R mysql.mysql /sharedata   
  13. //此目錄只有是mysql組的用戶才能訪問 

2、啓動NFS服務

(1)#service nfs start
(2)編輯/etc/exports文件,添加如下行後保存退出
   /sharedata   192.168.0.11(rw,no_root_squash) 192.168.0.66(rw,no_root_squash)
(3)#exportfs -ra //導出共享目錄
(4)使用showmount -e 192.168.0.100 查看共享是否成功

在集羣節點上
 
1、首先集羣節點要做好高可用的事前工作

(1)同步時間
(2)主機名解析。主機名要與執行uname -n命令得到結果保持一致。
  在/etc/hosts文件中添加兩節點的解析條目。
  192.168.0.11  node1
  192.168.0.66  node2
(3)建立雙發互信
  使用ssh-keygen -t rsa 此時在當前目錄下生成.ssh隱藏目錄,生成私鑰
  使用ssh-copy-id -i ./ssh/id_rsa.pub root@node2 將私鑰發送給兩外一個節點。
  ssh node2 'ifconfig'  如果此時不用輸入密碼等信息就可直接得到node2的IP值,則說明互信配置成功
  在node1上也做相應的操作。

2、安裝MYSQL

(1)配置node1

  1. #mkdir -pv /data/sqldata
  2. #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //掛載共享數據
  3.  
  4. #groupadd -r mysql  
  5. #useradd -g mysql -r mysql  
  6. #tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local  
  7. #cd /usr/local  
  8. #ln -sv mysql-5.5.24-linux2.6-i686.tar.gz mysql  
  9. #cd mysql  
  10. #chown -R  mysql:mysql  .  
  11. #cp support-files/my-large.cnf  /etc/my.cnf        
  12. #scripts/mysql_install_db --user=mysql --datadir=/data/sqldata 
  13. //初始化    
  14. #chown -R root .
  15.  
  16. 編輯配置文件  
  17. thread_concurrency = 2 
  18. datadir = /data/sqldata //指定mysql數據存放位置  
  19. #cp support-files/mysql.server /etc/rc.d/init.d/mysqld    
  20.  //sysV腳本  
  21. #chmod +x /etc/rc.d/init.d/mysqld  
  22.  
  23. 啓動服務  
  24. #service mysqld start  
  25. #/usr/local/mysql/bin/mysql //進入mysql
  26. create database testdb; //創建測試數據庫



node1與node2的數據文件是保持一致的,所以在此直接將node1的配置文件遠程發送到node2上即可。

  1. #scp /etc/my.cnf node2:/etc     
  2. #service mysqld stop  
  3. #chkconfig mysqld off 

 (2)配置node2。

  1. #mkdir -pv /data/sqldata  
  2. #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //掛載共享數據  
  3. #groupadd -r mysql    
  4. #useradd -g mysql -r mysql    
  5. #tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local 
  6. #cd /usr/local    
  7. #ln -sv mysql-5.5.24-linux2.6-i686.tar.gz mysql    
  8. #cd mysql    
  9. #chown -R  mysql:mysql  .    
  10. #cp support-files/my-large.cnf  /etc/my.cnf        
  11. #chown -R root .  

    啓動服務  

    #service mysqld start  

注:在node2上已經初始化了數據庫,所以在node2上不用再次初始化數據庫。

進入命令行查看node1創建的數據庫是否存在。此時可能出錯,因爲root用戶沒有對數據操作的權限。切換至mysql用戶即可。



此時查看。



如圖所示,testdb可以順利訪問。

3、安裝corosync
 

  1. 使用yum安裝‘實驗準備’中的rpm包  
  2. #yum -y --nogpgcheck localinstall *.rpm 

(1)編輯配置文件corosync.conf

  1. #cd /etc/corosync  
  2. #cp corosync.conf.example corosync.conf  
  3.  
  4. 編輯corosync.conf文件  
  5.  bindnetaddr:192.168.0.0 //IP地址爲網卡所在網絡的網絡地址  
  6.  to_syslog: no  
  7. 添加如下內容:  
  8. service {  
  9.      ver:  0  
  10.      name: pacemaker  //啓用pacemaker  
  11.    }  
  12. aisexec {  
  13.     user: root  
  14.     group: root  
  15.    } 

(2)生成節點間通信時用到的認證密鑰文件並分別爲兩個節點創建corosync生成的日誌所在的目錄。

  1. #scp -p corosync authkey  node2:/etc/corosync/  
  2. #mkdir /var/log/cluster  
  3. #ssh node2  'mkdir /var/log/cluster'  
  4.  
  5. 啓動服務  
  6. #service corosync start 

(3)啓動服務後檢查日誌文件中的有關配置信息

  1. 查看corosync引擎是否正常啓動:  
  2. # grep -e "Corosync Cluster Engine" -e "configuration file" 
  3. /var/log/cluster/corosync.log
  4.  
  5. 查看初始化成員節點通知是否正常發出:  
  6. # grep  TOTEM  /var/log/cluster/corosync.log  
  7.  
  8. 檢查啓動過程中是否有錯誤產生:  
  9. # grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
  10.  
  11. 查看pacemaker是否正常啓動:  
  12. # grep pcmk_startup /var/log/cluster/corosync.log 

(4)如果上面命令執行均沒有問題,接着可以執行如下命令啓動node2上的corosync

# ssh node2  '/etc/init.d/corosync start'

注:啓動node2需要在node1上使用如上命令進行,不要在node2節點上直接啓動

(5)查看集羣節點的啓動狀態



由上述信息可知,兩節點以正常啓動。

4、爲集羣添加集羣資源。(本實驗在node1上設置)

(1)配置集羣屬性

  1. #crm configure property stonith-enabled=fals   
  2.  //禁用stonith  
  3. #crm configure property no-quorum-policy=ignore 
  4.  //當投票數不足時設置忽略策略  
  5. #crm configure rsc_defaults resource-stickiness=100 
  6.  //設置資源粘性 

查看配置:



(2)添加資源

  1. 將VIP定義爲高可用資源  
  2. #crm configure primitive vip ocf:heartbeat:IPaddr params ip=172.16.19.1  
  3.  
  4. 將NFS定義爲高可用資源  
  5. #crm configure primitive mynfs ocf:heartbeat:Filesystem params 
  6. device='192.168.0.100:/sharedata' directory='/data/sqldata' 
  7. fstype="nfs"  op start timeout=60   op stop timeout=60 
  8. //這裏的兩個op選項必須設置  
  9.  
  10. 定義mysqld服務  
  11. #crm configure primitive mysqld lsb:mysqld 

(3)定義約束

  1. #crm configure colocation mysql_with_mynfs inf: mynfs mysqld vip 
  2.  
  3. 定義次序  
  4. #crm configure order mynfs_befrore_mysql madatory: mynfs mysqld:start  
  5. #crm configure order myip_befrore_mysql madatory: vip mysqld:start 

此時資源已經添加成功,而且都被定義在了node1上。

5、測試

(1)集羣是否自動掛載數據

查看集羣信息發現,此時可知共享資源定義在了node1上,那麼查看掛載數據目錄是否有數據。

之前創建的數據庫testdb依然存在。集羣掛載數據成功。

(2)測試遠程用戶

  1. 進入mysql命令,授權用戶  
  2. grant all to *.* on root@‘%’ identified by '123456';  
  3. flush privileges; 

此時便可以使用遠程的root用戶訪問數據庫。

到此,基於corosync/openais的MYSQL的高可用便配置完成。

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