實驗準備:
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、首先創建邏輯卷並掛載共享目錄
- 創建兩個分區並調整其類型爲8e
- #pvcreate /dev/sda{5,6}
- vgcreate myvg /dev/sda{5,6}
- #lvcreate -n mylv -L 20G /dev/myvg
- #mke2fs -j /dev/myvg/mylv //格式化分區
- #mkdir /sharedata
- #mount /dev/myvg/mylv /sharedata
- 使其能夠開機自動掛載
- 編輯/etc/fstab文件,添加如下行後保存退出
- /dev/myvg/mylv /sharedata ext3 defaults 0 0
- #chown -R mysql.mysql /sharedata
- //此目錄只有是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
- #mkdir -pv /data/sqldata
- #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //掛載共享數據
- #groupadd -r mysql
- #useradd -g mysql -r 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.tar.gz mysql
- #cd mysql
- #chown -R mysql:mysql .
- #cp support-files/my-large.cnf /etc/my.cnf
- #scripts/mysql_install_db --user=mysql --datadir=/data/sqldata
- //初始化
- #chown -R root .
- 編輯配置文件
- thread_concurrency = 2
- datadir = /data/sqldata //指定mysql數據存放位置
- #cp support-files/mysql.server /etc/rc.d/init.d/mysqld
- //sysV腳本
- #chmod +x /etc/rc.d/init.d/mysqld
- 啓動服務
- #service mysqld start
- #/usr/local/mysql/bin/mysql //進入mysql
- create database testdb; //創建測試數據庫
node1與node2的數據文件是保持一致的,所以在此直接將node1的配置文件遠程發送到node2上即可。
- #scp /etc/my.cnf node2:/etc
- #service mysqld stop
- #chkconfig mysqld off
(2)配置node2。
- #mkdir -pv /data/sqldata
- #mount -t nfs 192.168.0.100:/sharedata /data/sqldata //掛載共享數據
- #groupadd -r mysql
- #useradd -g mysql -r 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.tar.gz mysql
- #cd mysql
- #chown -R mysql:mysql .
- #cp support-files/my-large.cnf /etc/my.cnf
- #chown -R root .
啓動服務
#service mysqld start
注:在node2上已經初始化了數據庫,所以在node2上不用再次初始化數據庫。
進入命令行查看node1創建的數據庫是否存在。此時可能出錯,因爲root用戶沒有對數據操作的權限。切換至mysql用戶即可。
此時查看。
如圖所示,testdb可以順利訪問。
3、安裝corosync
- 使用yum安裝‘實驗準備’中的rpm包
- #yum -y --nogpgcheck localinstall *.rpm
(1)編輯配置文件corosync.conf
- #cd /etc/corosync
- #cp corosync.conf.example corosync.conf
- 編輯corosync.conf文件
- bindnetaddr:192.168.0.0 //IP地址爲網卡所在網絡的網絡地址
- to_syslog: no
- 添加如下內容:
- service {
- ver: 0
- name: pacemaker //啓用pacemaker
- }
- aisexec {
- user: root
- group: root
- }
(2)生成節點間通信時用到的認證密鑰文件並分別爲兩個節點創建corosync生成的日誌所在的目錄。
- #scp -p corosync authkey node2:/etc/corosync/
- #mkdir /var/log/cluster
- #ssh node2 'mkdir /var/log/cluster'
- 啓動服務
- #service corosync start
(3)啓動服務後檢查日誌文件中的有關配置信息
- 查看corosync引擎是否正常啓動:
- # grep -e "Corosync Cluster Engine" -e "configuration file"
- /var/log/cluster/corosync.log
- 查看初始化成員節點通知是否正常發出:
- # grep TOTEM /var/log/cluster/corosync.log
- 檢查啓動過程中是否有錯誤產生:
- # grep ERROR: /var/log/cluster/corosync.log | grep -v unpack_resources
- 查看pacemaker是否正常啓動:
- # 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)配置集羣屬性
- #crm configure property stonith-enabled=fals
- //禁用stonith
- #crm configure property no-quorum-policy=ignore
- //當投票數不足時設置忽略策略
- #crm configure rsc_defaults resource-stickiness=100
- //設置資源粘性
- 將VIP定義爲高可用資源
- #crm configure primitive vip ocf:heartbeat:IPaddr params ip=172.16.19.1
- 將NFS定義爲高可用資源
- #crm configure primitive mynfs ocf:heartbeat:Filesystem params
- device='192.168.0.100:/sharedata' directory='/data/sqldata'
- fstype="nfs" op start timeout=60 op stop timeout=60
- //這裏的兩個op選項必須設置
- 定義mysqld服務
- #crm configure primitive mysqld lsb:mysqld
(3)定義約束
- #crm configure colocation mysql_with_mynfs inf: mynfs mysqld vip
- 定義次序
- #crm configure order mynfs_befrore_mysql madatory: mynfs mysqld:start
- #crm configure order myip_befrore_mysql madatory: vip mysqld:start
此時資源已經添加成功,而且都被定義在了node1上。
5、測試
(1)集羣是否自動掛載數據
查看集羣信息發現,此時可知共享資源定義在了node1上,那麼查看掛載數據目錄是否有數據。
之前創建的數據庫testdb依然存在。集羣掛載數據成功。
(2)測試遠程用戶
- 進入mysql命令,授權用戶
- grant all to *.* on root@‘%’ identified by '123456';
- flush privileges;
此時便可以使用遠程的root用戶訪問數據庫。
到此,基於corosync/openais的MYSQL的高可用便配置完成。