前言
因heartbeat v1內置的資源管理器haresource功能比較簡單,且不支持圖形化管理,所以heartbeat v2不再支持haresource,轉而使用更加強大的資源管理器crm進行集群管理。本文將講解如何基于heartbeat v2 crm實現基于nfs的mysql高可用集群。
高可用實現
實驗拓撲
實驗環境
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服務器配置
[root@scholar ~]# vim /etc/exports /mydata 172.16.0.0/16(rw,no_root_squash) [root@scholar ~]# service nfs start
安裝mysql
#在node1和node2上分別進行如下操作
[root@node1 mysql]# vim /etc/mysql/my.cnf datadir = /mydata/data log-bin=/mydata/binlogs/master-bin
[root@node1 mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data/ #注意:初始化操作只在一個節點執行即可
啟動服務測試一下
同樣node2上執行以上操作后也啟動測試
測試完成即可卸載共享目錄
[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
將配置文件傳給備用節點
啟用crm圖形界面時需要登錄密碼,在安裝heartbeat-gui時會自動創建一個名為hacluster的用戶,在任一節點上設置hacluster的密碼即可
啟動heartbeat
查看集群狀態
[root@node1 ~]# crm_mon
啟動gui界面
[root@node1 ~]# hb_gui &
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地址的資源,這兩類高可用資源之間是不同的。
添加資源
首先定義一個組
添加第一個資源
添加第二個資源
添加第三個資源
添加資源約束
nfs要和mysqld在一個節點
ip要和mysqld在一個節點
定義排列約束后這3個資源會同時運行在同一個節點上,需要注意的是mysqld服務要在nfs掛載之后啟動,所以需要定義資源順序約束
定義好順序約束之后還可定義位置約束,可定義更傾向運行在哪個節點
添加表達式及對該節點的傾向性
啟動所有資源
因為傾向于node1,所以資源運行于node1上,我們在node1授權一個用戶測試
在其他客戶端測試
此時模擬node1掛掉了,將node1設置為standby模式
再次連接數據庫測試
數據沒有受到絲毫影響,再次將node1上線,資源會再次回到node1,這里就不再演示了,至此,基于heartbeat v2 crm實現基于nfs的mysql高可用集群完成
The end
本次實驗就進行到這里了,實驗過程出現問題可以留言交流,后文將會提供另一種高可用方案:mysql + drbd + corosync,有興趣可以繼續關注。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/5171
root@node1 ~]# hb_gui &
[1] 1690
[root@node1 ~]# Traceback (most recent call last):
File “/usr/bin/hb_gui”, line 41, in
import gtk, gtk.glade, gobject
File “/usr/lib64/python2.6/site-packages/gtk-2.0/gtk/__init__.py”, line 64, in
_init()
File “/usr/lib64/python2.6/site-packages/gtk-2.0/gtk/__init__.py”, line 52, in _init
_gtk.init_check()
RuntimeError: could not open display
[1]+ Exit 1 hb_gui
@sqeues:試試這個 http://www.linuxidc.com/Linux/2013-08/89167p3.htm
centos6.4最小化安裝,Xmanager Enterprise 5執行hb_gui一直報錯