一、HA叢集的開源實作方案
1.Message層
1、hearbeat:主要有3個版本,v1和v2這2個版本和CRM內建在一起,v3版中CRM從heartbeat中獨立出去,叫做pacemaker
2、corosync:OpenAIS為了展示一個叢集應該具有什麼樣的功能而研發的實驗性質的項目,但随着發展受到更多的青睐,最後從OpenAIS中獨立出來
3、cman:RedHat研發,屬于早期在corosync誕生之前RedHat在自己的企業版Linux系統上提供的解決方案
4、keepalived:上述三者實作方法是基于OpenAIS架構标準,而keepalived自己是基于VRRP協定實作心跳功能,專用于LVS叢集
2.CRM層
1、haresources:heartbeat v1自帶
配置方式:配置檔案,檔案名為haresources
2、crm:heartbeat v2自帶,在各節點運作一個crmd守護程序,監聽在TCP 5560端口
配置方式:指令行:crmsh指令;或者GUI接口:hb_gui
3、rgmanager:RedHat研發,早期和cman配合使用
配置方式:配置檔案,cluster.conf(xml);指令行:clustat、cman_tool等;GUI接口:conga(luci+ricci)、system-config-cluster
4、pacemaker:在heartbeat v3版後作為獨立項目,可以單獨運作或者以插件運作
配置方式,指令行:crmsh(Suse研發)、pcs(RedHat研發),CentOS 6.4後預設隻提供pcs;GUI接口:hawk(Suse研發)LCMC、pacemaker-gui;pacemaker功能比rgmanager強大
3.RA:reosurce agent
1、heartbeat legacy:heartbeat早期的傳統型RA,通常位于/etc/ha.d/haresources.d/目錄下
2、LSB:Linux Standard Base,位于/etc/init.d/下的腳本,至少接受4個參數,{start|stop|restart|status}
3、OCF:Open Cluster Framework,這是一個開放架構,有很多不同的腳本提供者
4、systemd:通過systemctl指令實作資源管理
5、STONITH:專用于實作調用STONITH裝置功能的資源,通常為clone類型
4.組合方式
heartbeat v1+haresources
heartbeat v2+crm(如果你是喜歡老古董,戀舊,可以用v1和v2)
hearbeat v3+pacemaker
cman+rgmanager
corosync+pacemaker(目前最常用)
在RedHat系統中,紅帽官方整合形成自己的一套叢集管理方案RHCS:Red Hat Cluster Suite紅帽叢集套件
RHEL5/6:組合方式為cman+rgmanager+conga(luci+ricci)
RHEL6還提供corosync v1+pacemaker,該場景下pacemaker是作為插件運作;而corosync v1版沒有投票系統,是以有人就把cman拿來作為corosync的插件來使用,即corosync v1+cman+pacemaker,這種方式過于複雜
RHEL7:corosync v2+pacemaker,corosync在v2版中增加了投票系統,功能也更強大,是以cman從此退出江湖
二、配置高可用叢集
以2節點web叢集為例,叢集資源有浮動IP、httpd服務、頁面檔案;這裡為了示範友善就不使用頁面檔案,使用網關192.168.0.1作為仲裁
系統環境:CentOS 6.9 核心版本2.6.32
IP位址(主機名):192.168.0.106(node1.centos6.com)、192.168.0.107(node2.centos6.com)
浮動IP:192.168.0.108
1.配置叢集的前提條件
1、各節點時間必須同步,使用crontab配置時間同步
*/3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com &> /dev/null
2、節點之間需要通過主機名互相通信,必須實作主機名解析,hosts檔案中配置的主機名必須和hostname指令顯示的保持一
編輯/etc/hosts檔案,添加主機名解析
3、考慮是否會用到仲裁裝置
4、建議各節點的root使用者可以通過基于秘鑰認證
注意:叢集服務中的資源,一定不能開機自啟動,因為它們将由CRM管理
2.使用heartbeat v1版示範高可用叢集
安裝包下載下傳連結:https://pan.baidu.com/s/1C6v5lk78F8QDOkWtGCvZ4g
2.1.安裝依賴包
yum -y install net-snmp-libs libnet PyXML libtool-ltdl
2.2.安裝heartbeat程式
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
安裝後,将配置檔案拷貝到對應目錄下
cp /usr/share/doc/heartbeat-2.1.4/{authkeys,ha.cf,haresources} /etc/ha.d/
2.3.修改配置檔案
heartbeat的配置檔案在/etc/ha.d/目錄下,要使用到3個檔案:
(1)ha.cf,主配置檔案,定義各節點上的heartbeat和HA叢集的基本屬性
配置檔案内容
debugfile /var/log/ha-debug #debug級别日志檔案
logfile /var/log/ha-log #普通日志檔案
keepalive 1 #每隔1秒發送一次心跳
deadtime 20 #20秒探測不到心跳,就認為節點故障
warntime 10 #10秒探測不到心跳,警告節點出現故障
initdead 120 # 從第一個節點啟動到最後一個節點啟動的時間期限,不要設定太小,否則還沒等最後一個節點啟動,叢集收不到該節點的心跳進而認為最後一個節點故障
udpport 694 #heartbeat啟動後監聽在694端口
mcast eth0 225.23.190.1 694 1 0 #使用多點傳播傳輸,通過eth0網卡向225.23.190.1這個位址,694端口發送心跳資訊,1和0代表多點傳播封包的TTL和LOOP值。高可用場景下多點傳播封包不允許傳遞到一個節點後再傳輸到其他主機,也不允許循環傳遞,是以TTL設定為1,LOOP設定為0
auto_failback on #開啟故障轉回,即故障節點修複之後将資源重新移動回該節點運作
node node1.centos6.com
node node2.centos6.com #以上2個node配置指定叢集中有2個節點,node1.centos6.com和node2.centos6.com兩個主機
ping 192.168.0.1 #指定仲裁網關節點
compression bz2 #指定心跳封包的壓縮算法
compression_threshold 2 #指定心跳封包達到2KB才進行壓縮
(2)authkeys,叢集内節點之間傳遞消息時使用的加密算法和密鑰,這個檔案權限必須設定為600
chmod 600 /etc/ha.d/authkeys
配置檔案内容
auth 2 #表示啟用2号加密算法
#1 crc
2 sha1 hello #使用sha1加密算法,密鑰為hello,實際中要增加複雜度,不建議用hello這麼簡單的密鑰
#3 md5 Hello!
(3)haresources,為heartbeat v1版提供的配置接口,v1版專用的配置檔案
配置檔案内容
node1.centos6.com 192.168.0.108/24/eth0/192.168.0.255 httpd #表示node1.centos6.com為叢集主節點,叢集資源有浮動ip位址192.168.0.108和httpd服務,其中192.168.0.108将配置在eth0網卡上,24位掩碼,廣播位址為192.168.0.255。并且資源的左右順序決定了資源的排列限制,是以ip位址啟動在先
2.4.補充配置
對于網卡,使用ifconfig指令,如果輸出中有MULTICAST字段,則表示開啟多點傳播。如果沒有開啟多點傳播,使用指令
ip link set eth0 multicast on
開啟多點傳播,off會關閉
在2個節點上安裝httpd,并在/var/www/html下編輯index.html檔案,兩個節點的檔案内容不同以示差別。httpd不要啟動并且關閉開機自啟動。
為避免防火牆和selinux的幹擾,建議關閉。
2.5.啟動heartbeat
在兩個節點都啟動heartbeat,/etc/init.d/heartbeat start
浮動ip位址192.168.0.108配置在node1上,并且在node1上啟動httpd服務監聽在80端口

檢視node1節點的ha-log日志,可以看到啟動多點傳播位址和ping節點,配置浮動IP和啟動httpd等叢集資源的全過程
在浏覽器通路浮動ip位址192.168.0.108
模拟node1節點出現故障,停止heartbeat,叢集資源轉移到node2節點
繼續通路192.168.0.108,說明node1故障後,node2接管了服務
在node2節點檢視/var/log/ha-log日志,可以看到叢集資源轉移到node2節點并啟動,同時宣布node1節點dead
恢複node1節點,啟動heartbeat,由于配置了failback,是以叢集資源又回到node1節點