基於heartbeat v2 crm實現基於nfs的mysql高可用集羣

前言

因heartbeat v1內置的資源管理器haresource功能比較簡單,且不支持圖形化管理,所以heartbeat v2不再支持haresource,轉而使用更加強大的資源管理器crm進行集羣管理。本文將講解如何基於heartbeat v2 crm實現基於nfs的mysql高可用集羣。

高可用實現

實驗拓撲

wKioL1V1L_aDqkZNAADsDHkrZ1c800.jpg

實驗環境

node1:172.16.10.123 mariadb-5.5.36 CentOS6.6

node2:172.16.10.124 mariadb-5.5.36 CentOS6.6

NFS:172.16.10.125 CentOS6.6

Windows環境需安裝Xmanager Enterprise 5

配置過程

NFS服務器配置

wKiom1V1O-WADF1NAAFAEZxNxcA723.jpg

[root@scholar ~]# vim /etc/exports

/mydata         172.16.0.0/16(rw,no_root_squash)

[root@scholar ~]# service nfs start

安裝mysql

#在node1和node2上分別進行如下操作

wKioL1V1kKWiN2E2AAHs31J5aCo256.jpg

[root@node1 mysql]# vim /etc/mysql/my.cnf 

datadir = /mydata/data

log-bin=/mydata/binlogs/master-bin

wKiom1V1SHnyR6k0AAB_wYSMdOE833.jpg

[root@node1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/

#注意:初始化操作只在一個節點執行即可

啓動服務測試一下

wKiom1V1Sw-TBsOGAAJzEUSDFo0522.jpg

同樣node2上執行以上操作後也啓動測試

wKiom1V1TnLAC5YYAAIuOGN_QCs515.jpg

測試完成即可卸載共享目錄

[root@node1 mysql]# umount /mydata/

#在兩個節點分別執行

安全起見,此時可將nfs的no_root_squash選項去掉

[root@scholar ~]# vim /etc/exports 

/mydata         172.16.0.0/16(rw)

[root@scholar ~]# exportfs -arv
exporting 172.16.0.0/16:/mydata

heartbeat配置

時間同步

ntpdate

節點解析通信

[root@node1 ~]# vim /etc/hosts
 
172.16.10.123   node1.scholar.com node1
172.16.10.124   node2.scholar.com node2
 
[root@node1 ~]# vim /etc/sysconfig/network
HOSTNAME=node1.scholar.com
 
[root@node1 ~]# uname -n
node1.scholar.com
 
#兩個節點都需如上操作

ssh密鑰配置

[root@node1 ~]# ssh-keygen -t rsa -P ''
[root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2
[root@node2 ~]# ssh-keygen -t rsa -P ''
[root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1
[root@node1 ~]# date; ssh node2 'date' #測試
Mon Jun  8 16:33:36 CST 2015
Mon Jun  8 16:33:36 CST 2015

安裝所需軟件包

#解決依賴關係
[root@node1 ~]# yum install perl-TimeDate net-snmp-libs libnet PyXML -y #需epel源支持
[root@node1 ~]# cd heartbeat2/
[root@node1 heartbeat2]# ls
heartbeat-2.1.4-12.el6.x86_64.rpm             heartbeat-pils-2.1.4-12.el6.x86_64.rpm
heartbeat-gui-2.1.4-12.el6.x86_64.rpm         heartbeat-stonith-2.1.4-12.el6.x86_64.rpm
heartbeat-ldirectord-2.1.4-12.el6.x86_64.rpm
[root@node1 heartbeat2]# rpm -ivh heartbeat-2.1.4-12.el6.x86_64.rpm heartbeat-pils-2.1.4-
12.el6.x86_64.rpm heartbeat-stonith-2.1.4-12.el6.x86_64.rpm heartbeat-gui-2.1.4-12.el6.x8
6_64.rpm

#兩個節點都執行以上操作

準備配置文件

[root@node1 ~]# cp /usr/share/doc/heartbeat-2.1.4/{ha.cf,authkeys} /etc/ha.d
[root@node1 ~]# chmod 600 /etc/ha.d/authkeys

配置算法密鑰

[root@node1 ~]# openssl rand -hex 8
4d8fd6cb49d2047b
[root@node1 ~]# vim /etc/ha.d/authkeys
 
auth 2
2 sha1 4d8fd6cb49d2047b

配置主配置文件

#配置文件如下
[root@node1 ~]# grep -v "#" /etc/ha.d/ha.cf |grep -v "^$"
logfile /var/log/ha-log  #日誌存放位置
keepalive 2              #指定心跳使用間隔時間
deadtime 30              #指定備用節點接管主節點服務資源超時時間
warntime 10              #指定心跳延遲的時間
initdead 120             #解決網絡啓動延時
udpport 694              #設置廣播通信端口
mcast eth0 225.0.25.1 694 1 0 #定義廣播地址
auto_failback on              #定義當主節點恢復後,是否將服務自動切回
node    node1.scholar.com     #主節點
node    node2.scholar.com     #備用節點
ping 172.16.0.1               #仲裁設備
crm on                        #啓用crm

將配置文件傳給備用節點

wKiom1V1WKXh1UIUAABne1Pes18513.jpg

啓用crm圖形界面時需要登錄密碼,在安裝heartbeat-gui時會自動創建一個名爲hacluster的用戶,在任一節點上設置hacluster的密碼即可

wKiom1V1Wy6yCnVnAACzQFNneBE231.jpg

啓動heartbeat

wKioL1V1XYGAScK4AADSFatJORI560.jpg

查看集羣狀態

[root@node1 ~]# crm_mon

wKiom1V1XX-TdVo8AAENMShdmFE355.jpg

啓動gui界面

[root@node1 ~]# hb_gui &

wKiom1V1Y4WwUKvpAAFOHERTixw350.jpg

wKioL1V1ZVSQaDMvAAIIwD7GZS4411.jpg

Node:節點列表
Resources:資源列表
Constraints:限制約束
Locations:位置約束,資源對某節點運行的傾向性
Orders:順序約束,屬於同一服務的多個資源運行在同一節點時,其啓動及關閉的次序約束
Colocations:排列約束,定義資源彼此間的傾向性(是否在一起)
資源類型:
primitive, native: 主資源,其僅能運行某一節點
group: 組資源,可用於實現限制多個資源運行於同一節點及對此些資源統一進行管理
clone: 克隆資源,一個資源可以運行於多個節點
       應該指定:最大克隆的份數,每個節點最多可以運行的克隆
master/slave: 主從資源,特殊的克隆資源

mysql的高可用需要3個資源:ip,mysqld,nfs,這3個資源都要運行在一個節點上,而且mysqld要在nfs啓動之後出能啓動,ip地址和mysqld服務之間沒有先後關係,服務準備好後再啓動ip也是可以的。高可用的httpd服務需要先啓動ip,因爲服務啓動的時候明確需要ip地址的資源,這兩類高可用資源之間是不同的。

添加資源

首先定義一個組


wKiom1V1bZujCUueAAGynvtboic646.jpg

wKioL1V1b1ODPpjDAAHQ1Mjb6DE848.jpg

添加第一個資源

wKioL1V1b3bQY5cMAALtLFh29cc492.jpg

添加第二個資源

wKioL1V1b-zANmPVAAI2z7u3rqE035.jpg

wKiom1V1hOHBdGa5AAJ4vpIzdeQ237.jpg

添加第三個資源

wKiom1V1b_qglm2sAAJyIU53JcM615.jpg

添加資源約束

nfs要和mysqld在一個節點

wKioL1V1eH6AjPnBAAHb-nC_lm8444.jpg

wKiom1V1du6BVmS8AAKnGvqL2qg923.jpg

ip要和mysqld在一個節點

wKioL1V1eTCQN1n0AALAN6sHi-8250.jpg

定義排列約束後這3個資源會同時運行在同一個節點上,需要注意的是mysqld服務要在nfs掛載之後啓動,所以需要定義資源順序約束

wKiom1V1eNSxvC19AAG8Lib86Kg447.jpg

wKioL1V1mDizk1lZAALFp-lc3F8043.jpg

定義好順序約束之後還可定義位置約束,可定義更傾向運行在哪個節點

wKioL1V1fH6A8ZioAAG62V9wHFc905.jpg

wKiom1V1e__yS98VAAHKmG9o-4w968.jpg

添加表達式及對該節點的傾向性

wKioL1V1mi3T4uYNAALdBN1LYUA380.jpg

啓動所有資源

wKiom1V1luCxmUgxAAJl4tjwL9M547.jpg

wKiom1V1tL3itmzlAALGi3K0kmo211.jpg

因爲傾向於node1,所以資源運行於node1上,我們在node1授權一個用戶測試

wKiom1V1tsWwvfmrAAHCZBGGn9k585.jpg

在其他客戶端測試

wKioL1V1uf6Ce9ffAAJNt6C9nGU586.jpg

此時模擬node1掛掉了,將node1設置爲standby模式

wKiom1V1uQLBIxTNAAJyzE20EG4392.jpg

再次連接數據庫測試

wKioL1V1v6mD_ipsAAIT-huyU1Y598.jpg

數據沒有受到絲毫影響,再次將node1上線,資源會再次回到node1,這裏就不再演示了,至此,基於heartbeat v2 crm實現基於nfs的mysql高可用集羣完成

The end

本次實驗就進行到這裏了,實驗過程出現問題可以留言交流,後文將會提供另一種高可用方案:mysql + drbd + corosync,有興趣可以繼續關注。以上僅爲個人學習整理,如有錯漏,大神勿噴~~~

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