基於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服務
- 一、安裝與配置NFS服務
- 1、創建邏輯卷
- #fdisk /dev/sda
- #partprobe /dev/sda
- #fdisk -l
- #pvcreate /dev/sda4
- #vgcreate myvg /dev/sda4
- #lvcreate -L 10G -n lvmy myvg
- #mke2fs -j -L MYDATA /dev/myvg/lvmy
- 2、建立目錄/mydata,設置開機自動掛載
- #mkdir /mydata
- #vim /etc/fstab
- 添加以下內容
- LABEL=MYDATA /mydata ext3 defaults 0 0
- #mount -a
- #mount
- 3、添加mysql賬號,讓mysql有讀寫權限
- #groupadd -r -g 306 mysql
- #useradd -g mysql -r -u 306 mysql
- #chown -R mysql.mysql /mydata
- 4、配置nfs
- #vim /etc/exports
- 添加以下內容
- /mydata 172.16.0.22(rw,no_root_squash) 172.16.0.23(rw,no_root_squash)
- #/etc/init.d/nfs start
- #chkconfig --add nfs
- #chkconfig nfs on
二、安裝mysql
- 新建用戶
- #groupadd -r -g 306 mysql
- #useradd -g mysql -r -u 306 mysql
- 解壓mysql並創建軟鏈接
- tar xf mysql-5.5.24-linux2.6-i686.tar.gz -C /usr/local
- cd /usr/local
- ln -sv mysql-5.5.24-linux2.6-i686 mysql
- 修改屬主和組並初始化mysql-5.5.24
- cd /usr/local/mysql
- chown -R mysql:mysql .
- /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/mydata/data
- chown -R root .
- 爲mysql提供主配置文件:
- cd /usr/local/mysql
- cp support-files/my-large.cnf /etc/my.cnf
- 並修改此文件中thread_concurrency的值爲你的CPU個數乘以2,比如這裏使用如下行:
- thread_concurrency = 2
- 並添加數據存放路徑
- datadir = /mydata/data
- 爲mysql提供sysv服務腳本:
- cd /usr/local/mysql
- cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- #chkconfig mysqld off
- #service mysqld stop
三、配置node1和node2的關係
- 1、修改主機名
- #vim /etc/sysconfig/network
- HOSTNAME=node1
- #hostname node1
- 注意:確保與uname -n結果一樣
- 2、修改/etc/hosts文件,使node1和node2能解析成不同IP
- #vim /etc/hosts
- 172.16.0.22 node1
- 172.16.0.23 node2
- 3、配置雙方的ssh信任
- #ssh-keygen -t rsa
- #ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected] #把公鑰複製到遠程主機上去
- 提示:node2操作也是一樣,最後配置完成進行測試一下:
- 在node1上測試:
- #ssh node1 'ifconfig' #命令可以執行並返回結果,表示配置成功
- 4、調整雙方主機的時間
- #date 0807132912
- #hwclock -w
四、安裝與配置Corosync
- 列出所需要的軟件包
- 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
- 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
- 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
- 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
- #cd /etc/corosync/
- #mv corosync.conf.example corosync.conf
- vim corosync.conf
- 添加和修改以下內容
- compatibility: whitetank #打開兼容corosync-0.8之前的版本
- totem { #定義節點之間心跳信息如何傳遞
- version: 2 #協議版本
- secauth: on #是否開啓節點之間安全認證
- threads: 0 #啓動的線程,與CPU個數相等,0爲自動管理
- interface { #定義傳遞心跳的接口信息
- ringnumber: 0 #如果有多個接口,ringunmber不能相同
- bindnetaddr: 172.16.0.0 #指定接口所在的網絡或者接口的IP地址
- mcastaddr: 226.94.1.1 #指定多播地址
- mcastport: 5405 #多播的端口
- }
- }
- logging { #定義日誌相關信息
- fileline: off
- to_stderr: no #是否把錯誤信息發送到標準輸出
- to_logfile: yes #是否存儲到logfile中指定的日誌文件
- to_syslog: no #是否存儲到系統日誌文件也就是messages
- logfile: /var/log/cluster/corosync.log #日誌文件存放路徑
- debug: off #是否開啓調試
- timestamp: on #日誌信息是否記錄時間戳
- logger_subsys { #定義日誌子系統
- subsys: AMF
- debug: off
- }
- }
- amf { #定義amf相關信息,如果要啓用需安裝openais和openais-lib
- mode: disabled
- }
- service { #自定義的服務
- ver: 0 #版本
- name: pacemaker #整合pacemaker,當corosync啓動時也啓動pacemaker
- }
- service {
- ver: 0
- name: pacemaker #定義pacemaker資源管理器
- # use_mgmtd: yes #使用mgmtd進程
- }
- aisexec { #定義執行者的身份
- user: root
- group: root
- }
- # corosync-keygen #生成節點間通信時用到的認證密鑰文件
- #mkdir -pv /var/log/cluster #建立日誌目錄
- #/etc/init.d/corosync start #啓動服務
- #netstat -unlp | grep 5404 #查看是否有corosync進程監聽udp的5404端口
五、進入命令行模式,添加集羣資源
- [root@localhost corosync]# crm #使用crm命令進入命令行模式
- crm(live)# configure #使用configure進入configure模式
- crm(live)configure# property stonith-enabled=false #禁用stonith
- crm(live)configure# property no-quorum-policy=ignore #關閉票數策略
- crm(live)configure# verify #使用verify驗證是否有語法錯誤
- crm(live)configure# commit #提交前面的操作,使用其生效
- crm(live)configure# primitive myvip ocf:heartbeat:IPaddr params ip=172.16.0.100 #定義vip資源
- crm(live)configure# primitive mynfs ocf:heartbeat:Filesystem \ #定義nfs資源高可用,使用其自動掛載
- > params device="172.16.0.23:/mydata" directory="/mydata" \
- > fstype="nfs" op start timeout=60s op stop timeout=60s
- crm(live)configure# primitive mysql lsb:mysqld #定義mysql服務資源
- crm(live)configure# colocation mysql_and_mynfs_myvip inf: mysql mynfs myvip #定義排列約束,使用mysql,mynfs,myvip三個在一起
- crm(live)configure# order mysql_after_mynfs mandatory: mynfs mysql:start #定義順序,先啓動mynfs再啓動mysql
- crm(live)configure# order mysql_after_myvip mandatory: myvip mysql:start #定義順序,先啓動vip再啓動mysql
- crm(live)configure# verify
- crm(live)configure# commit
- crm(live)configure# show #使用show命令查看定義的資源
- crm(live)configure# cd #回到上一級
- crm(live)# status #查看狀態
- ============
- Last updated: Tue Aug 7 16:27:11 2012
- Stack: openais
- Current DC: node1 - partition with quorum
- Version: 1.1.5-1.1.el5-01e86afaaa6d4a8c4836f68df80ababd6ca3902f
- 2 Nodes configured, 2 expected votes
- 3 Resources configured.
- ============
- Online: [ node1 node2 ]
- myvip (ocf::heartbeat:IPaddr): Started node2
- mynfs (ocf::heartbeat:Filesystem): Started node2
- mysql (lsb:mysqld): Started node2
- 測試:此時可以停止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服務停止