基於Corosync/openais和NFS服務器實現MySQL的高可用

基於Corosync/openais和NFS服務器實現MySQL的高可用
1、操作系統redhat5.8
2、實驗準備三臺服務器:
node1:172.16.0.22 (Corosync+mysql)---->/mydata
node2:172.16.0.23 (Corosync+mysql)---->/mydata
NFS:172.16.0.24 (nfs)---->/mydata

實驗拓撲圖如下:
 

 目錄:
一、安裝與配置NFS服務
二、安裝與配置mysql
三、安裝與配置node1和node2關係
四、安裝與配置Corosync/openais
五、進入命令行模式,添加集羣資源
六、測試

 


一、安裝與配置NFS服務
 

  1. 一、安裝與配置NFS服務  
  2. 1、創建邏輯卷  
  3. #fdisk /dev/sda   
  4. #partprobe /dev/sda  
  5. #fdisk -l   
  6. #pvcreate /dev/sda4  
  7. #vgcreate myvg /dev/sda4  
  8. #lvcreate -L 10G -n lvmy  myvg  
  9. #mke2fs -j -L MYDATA /dev/myvg/lvmy   
  10.  
  11. 2、建立目錄/mydata,設置開機自動掛載  
  12. #mkdir /mydata  
  13. #vim /etc/fstab  
  14. 添加以下內容  
  15. LABEL=MYDATA            /mydata                 ext3    defaults        0 0   
  16. #mount -a  
  17. #mount   
  18.  
  19. 3、添加mysql賬號,讓mysql有讀寫權限  
  20. #groupadd -r -g 306 mysql  
  21. #useradd  -g mysql -r -u 306  mysql  
  22. #chown -R mysql.mysql /mydata  
  23.  
  24. 4、配置nfs  
  25. #vim /etc/exports  
  26. 添加以下內容  
  27. /mydata     172.16.0.22(rw,no_root_squash)  172.16.0.23(rw,no_root_squash)  
  28. #/etc/init.d/nfs start  
  29. #chkconfig --add nfs  
  30. #chkconfig nfs on 

二、安裝mysql
 

  1. 新建用戶  
  2. #groupadd -r -g 306 mysql  
  3. #useradd  -g mysql -r -u 306  mysql  
  4.  
  5. 解壓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  mysql  
  9.  
  10. 修改屬主和組並初始化mysql-5.5.24  
  11. cd /usr/local/mysql  
  12. chown -R mysql:mysql  .  
  13. /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data  
  14. chown -R root .   
  15.  
  16. 爲mysql提供主配置文件:  
  17. cd /usr/local/mysql  
  18. cp support-files/my-large.cnf  /etc/my.cnf  
  19.  
  20. 並修改此文件中thread_concurrency的值爲你的CPU個數乘以2,比如這裏使用如下行:  
  21. thread_concurrency = 2 
  22.  
  23. 並添加數據存放路徑  
  24. datadir = /mydata/data  
  25.  
  26. 爲mysql提供sysv服務腳本:  
  27. cd /usr/local/mysql  
  28. cp support-files/mysql.server  /etc/rc.d/init.d/mysqld  
  29.  
  30. #chkconfig mysqld off  
  31. #service mysqld stop 

三、配置node1和node2的關係

  1. 1、修改主機名  
  2. #vim /etc/sysconfig/network  
  3. HOSTNAME=node1 
  4.  
  5. #hostname node1  
  6. 注意:確保與uname -n結果一樣  
  7.  
  8. 2、修改/etc/hosts文件,使node1和node2能解析成不同IP  
  9. #vim /etc/hosts  
  10. 172.16.0.22     node1  
  11. 172.16.0.23     node2   
  12.  
  13. 3、配置雙方的ssh信任  
  14. #ssh-keygen -t rsa    
  15. #ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]      #把公鑰複製到遠程主機上去  
  16.  
  17. 提示:node2操作也是一樣,最後配置完成進行測試一下:  
  18. 在node1上測試:  
  19. #ssh node1 'ifconfig' #命令可以執行並返回結果,表示配置成功    
  20.  
  21. 4、調整雙方主機的時間  
  22. #date 0807132912  
  23. #hwclock -w 

四、安裝與配置Corosync

  1. 列出所需要的軟件包  
  2. cluster-glue-1.0.6-1.6.el5.i386.rpm       heartbeat-3.0.3-2.3.el5.i386.rpm       pacemaker-cts-1.1.5-1.1.el5.i386.rpm  
  3. cluster-glue-libs-1.0.6-1.6.el5.i386.rpm  heartbeat-libs-3.0.3-2.3.el5.i386.rpm  pacemaker-libs-1.1.5-1.1.el5.i386.rpm  
  4. corosync-1.2.7-1.1.el5.i386.rpm           libesmtp-1.0.4-5.el5.i386.rpm          perl-TimeDate-1.16-5.el5.noarch.rpm  
  5. corosynclib-1.2.7-1.1.el5.i386.rpm        pacemaker-1.1.5-1.1.el5.i386.rpm       resource-agents-1.0.4-1.1.el5.i386.rpm  
  6.  
  7. #cd /etc/corosync/  
  8. #mv corosync.conf.example corosync.conf  
  9. vim corosync.conf  
  10. 添加和修改以下內容  
  11. compatibility: whitetank    #打開兼容corosync-0.8之前的版本  
  12. totem {                     #定義節點之間心跳信息如何傳遞  
  13.         version: 2          #協議版本  
  14.         secauth: on         #是否開啓節點之間安全認證  
  15.         threads: 0          #啓動的線程,與CPU個數相等,0爲自動管理  
  16.         interface {         #定義傳遞心跳的接口信息  
  17.                 ringnumber: 0               #如果有多個接口,ringunmber不能相同  
  18.                 bindnetaddr: 172.16.0.0   #指定接口所在的網絡或者接口的IP地址  
  19.                 mcastaddr: 226.94.1.1       #指定多播地址  
  20.                 mcastport: 5405             #多播的端口  
  21.         }  
  22. }  
  23. logging {       #定義日誌相關信息  
  24.         fileline: off  
  25.         to_stderr: no       #是否把錯誤信息發送到標準輸出  
  26.         to_logfile: yes     #是否存儲到logfile中指定的日誌文件  
  27.         to_syslog: no       #是否存儲到系統日誌文件也就是messages  
  28.         logfile: /var/log/cluster/corosync.log      #日誌文件存放路徑  
  29.         debug: off          #是否開啓調試  
  30.         timestamp: on       #日誌信息是否記錄時間戳  
  31.         logger_subsys {     #定義日誌子系統  
  32.                 subsys: AMF  
  33.                 debug: off  
  34.         }  
  35. }  
  36. amf {                       #定義amf相關信息,如果要啓用需安裝openais和openais-lib  
  37.         mode: disabled  
  38. }  
  39. service {                   #自定義的服務  
  40.         ver: 0              #版本  
  41.         name: pacemaker     #整合pacemaker,當corosync啓動時也啓動pacemaker  
  42. }  
  43.  
  44. service {  
  45.         ver:  0  
  46.         name: pacemaker     #定義pacemaker資源管理器  
  47.         # use_mgmtd: yes    #使用mgmtd進程  
  48. }  
  49.  
  50. aisexec {                   #定義執行者的身份  
  51.         user:   root  
  52.         group:  root  
  53. }  
  54.  
  55.  
  56. # corosync-keygen               #生成節點間通信時用到的認證密鑰文件  
  57. #mkdir -pv /var/log/cluster     #建立日誌目錄  
  58. #/etc/init.d/corosync start     #啓動服務  
  59. #netstat -unlp | grep 5404      #查看是否有corosync進程監聽udp的5404端口 

五、進入命令行模式,添加集羣資源

  1. [root@localhost corosync]# crm  #使用crm命令進入命令行模式  
  2. crm(live)# configure            #使用configure進入configure模式  
  3. crm(live)configure# property stonith-enabled=false   #禁用stonith  
  4. crm(live)configure# property no-quorum-policy=ignore #關閉票數策略    
  5. crm(live)configure# verify                           #使用verify驗證是否有語法錯誤   
  6. crm(live)configure# commit                           #提交前面的操作,使用其生效   
  7. crm(live)configure# primitive myvip ocf:heartbeat:IPaddr params ip=172.16.0.100 #定義vip資源  
  8. crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem \                  #定義nfs資源高可用,使用其自動掛載  
  9. > params device="172.16.0.23:/mydata"  directory="/mydata" \  
  10. > fstype="nfs" op start timeout=60s op stop timeout=60s   
  11. crm(live)configure# primitive mysql lsb:mysqld                                  #定義mysql服務資源  
  12. crm(live)configure# colocation mysql_and_mynfs_myvip inf: mysql mynfs myvip     #定義排列約束,使用mysql,mynfs,myvip三個在一起  
  13. crm(live)configure# order mysql_after_mynfs mandatory: mynfs mysql:start        #定義順序,先啓動mynfs再啓動mysql  
  14. crm(live)configure# order mysql_after_myvip mandatory: myvip mysql:start        #定義順序,先啓動vip再啓動mysql  
  15. crm(live)configure# verify   
  16. crm(live)configure# commit   
  17. crm(live)configure# show    #使用show命令查看定義的資源              
  18. crm(live)configure# cd      #回到上一級  
  19. crm(live)# status           #查看狀態  
  20. ============  
  21. Last updated: Tue Aug  7 16:27:11 2012  
  22. Stack: openais  
  23. Current DC: node1 - partition with quorum  
  24. Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f  
  25. 2 Nodes configured, 2 expected votes  
  26. 3 Resources configured. 
  27. ============  
  28.  
  29. Online: [ node1 node2 ]  
  30.  
  31.  myvip  (ocf::heartbeat:IPaddr):    Started node2  
  32.  mynfs  (ocf::heartbeat:Filesystem):    Started node2  
  33.  mysql  (lsb:mysqld):   Started node2  
  34.    
  35. 測試:此時可以停止node2節點,然後查看是否能切換到node1節點上,並查看vip,mysql和nfs是否正常 

六、測試
建立一個賬號
mysql> grant all on *.* to root@'%' identified by '123456';
 

測試成功

提示:此時可以crm node standby node2命令,使用node2節點停止,測試是否切換,並連接數據庫,寫入數據,然後使用crm node online node2讓node2重新上線,再次查看測試。

 

總結:

1、mysql初始化以後,安裝第二臺服務器請不要初始化了,不然數據會覆蓋,會有錯誤

2、安裝好mysql以後,只能有一臺mysql服務器能啓動,如果啓動兩個會報錯誤

3、裝好兩臺mysql服務後,建立/mydata目錄, 不要忘記改屬主和屬組了,不然定義nfs資源的時候,無法自動掛載

4、安裝好mysql服務後,不要開機啓動,把mysqld服務停止

 

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