Heartbeat作用:提供故障轉移及高可用服務,與keepalived有很多相同之處,也有區別
Hearbeat和keepalived區別:
Keepalived使用的vrrp協議方式,虛擬路由冗餘協議 (Virtual Router Redundancy Protocol,簡稱VRRP);
Heartbeat是基於主機或網絡的服務的高可用方式;
keepalived的目的是模擬路由器的雙機
heartbeat的目的是用戶service的雙機
lvs的高可用建議用keepavlived
業務的高可用用heartbeat
參考官方文檔:http://www.linux-ha.org/doc/users-guide/users-guide.html
http://www.linux-ha.org/wiki/Downloads 三個安裝包在此
參考博客:http://blog.51cto.com/wangzhijian/1708694
工作原理:
通過修改heartbeat的配置文件,可以指定一臺heartbeat服務器作爲主服務器,另一臺自動成爲熱備服務器。在熱備服務器上面配置heartbeat守護程序來監聽來自主服務器的心跳信息。如果在規定時間內,無法監聽到心跳信息,那麼就啓動故障轉移,取得主服務器上的相關資源的所有權,接替主服務器繼續不間斷的提供服務,從而達到資源以及服務高可用的目的。
heartbeat支持主主模式,以及兩臺服務器互爲主備,一般故障切換時間在5~20s之間
heartbeat裂腦:
兩臺服務器在一定時間內,無法相互檢測到對方心跳而各自啓動故障轉移功能,取得資源和服務的所有權,會導致同一個IP在兩端同時啓動服務,存在兩個相同的VIP,造成衝突的嚴重問題
裂腦的原因:
心跳鏈路故障,導致無法正常通信
開啓了防火牆阻擋了心跳信息傳輸
心跳網卡地址等配置不正確
心跳方式,心跳廣播衝突,軟件bug
防止裂腦方案:
同時使用串行電纜和以太網電纜連接,同時使用兩條心跳線
檢測到裂腦時,強制關閉一個節點(需要特殊設備支持,如stonish和fence),相當於程
序上的備節點發現心跳故障,發送關機指令到主節點
做好監控預警
啓用磁盤鎖
仲裁機制(確定讓哪個節點接管服務)
IP地址接管和故障轉移: heartbeat通過ip地址接管和arp廣播進行故障轉移
Heartbeat 2.1.4之後被拆分爲三個子項目: cluster-glue、resource-agents、heartbeat 導致了
配置更加複雜
源碼編譯比較複雜:需要安裝各種依賴,比較麻煩
安裝方式建議採用yum安裝的方式: 但是centos6.2後的epel源裏沒有了,centos6.2後
的系統,只能採取源碼編譯方式安裝heartbeat
源碼編譯安裝方式:
必須安裝:
yum install gcc gcc-c++ autoconf automake libtool glib2-devel libxml2-devel bzip2 bzip2-devel e2fsprogs-devel libxslt-devel libtool-ltdl-devel asciidoc
1、安裝cluster-glue :
groupadd haclient
useradd -g haclient hacluster
下載: wget http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
tar -jxvf cluster-clue-1.0.12.tar.bz2
cd Reusable-Cluster-Components-glue--0a7add1d9996/
./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1' ##注:32位系統去掉64
make
make install
2、安裝Resource Agents : 爲集羣資源的訪問提供了一系列的標準的接口
wget https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz
tar zxvf resource-agents-3.9.6.tar.gz
./autogen.sh
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
3、安裝Heartbeat :
wget http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
tar jxvf 958e11be8686.tar.bz2
cd Heartbeat-3-0-958e11be8686/
./bootstarp
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
./configure --prefix=/usr/local/heartbeat --with-daemon-user=hacluster --with-daemon-group=haclient --enable-fatal-warnings=no LIBS='/lib64/libuuid.so.1'
make && make install
複製源碼包部分內容到安裝目錄:
cd Heartbeat-3-0-958e11be8686/ #切換到heartbeat源碼解壓後的目錄,複製一下內容:
cp doc/{ha.cf,haresources,authkeys} /usr/local/heartbeat/etc/ha.d/
chkconfig --add heartbeat #加入到開機啓動項
chkconfig heartbeat on #設爲開機啓動,7以上的此命令:systemctl enable heartbeat.service
chmod 600 /usr/local/heartbeat/etc/ha.d/authkeys
mkdir -pv /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
cp /usr/lib/ocf/lib/heartbeat/ocf-* /usr/local/heartbeat/usr/lib/ocf/lib/heartbeat/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/*/usr/local/heartbeat/lib/heartbeat/plugins/RAExec/ #主備heartbeat都需要設置
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/ ##主備heartbeat都需要設置
Heartbeat配置:
Heartbeat的配置主要涉及到ha.cf、haresources、authkeys這三個文件。其中ha.cf是主配置文件,haresource用來配置要讓Heartbeat託管的服務,authkey是用來指定Heartbeat的認證方式
1、配置ha.cf : 主配置文件
注:192.168.56.102是主heartbeat節點IP,192.168.56.101是備heartbeat節點IP
cat /usr/local/heartbeat/etc/ha.d/ha.cf 去掉空行和註釋行後的內容如下:
debugfile /var/log/ha-debug ##用於記錄heartbeat的調試信息
logfile/var/log/ha-log ##用於記錄heartbeat的日誌信息
logfacilitylocal0 ##設置heartbeat的日誌,這裏用的是系統日誌
keepalive 2 ##設定心跳(監測)時間時間爲2秒
deadtime 30 ##指定若備用節點在30秒內未收到主節點心跳信號,則接管主服務器資源
warntime 10 ##指定心跳延遲的時間爲10秒,10秒內備節點不能接收主節點心跳信號,即往日誌寫入警告日誌,但不會切換服務
initdead 120 ##系統啓動或重啓後預留的忽略時間段,取值至少爲deadtime的兩倍
udpport 694 ##廣播/單播通訊使用的Udp端口
bcast enp0s8 # Linux ##使用網卡enp0s8發送心跳檢測
#mcast eth0 225.0.0.1 694 1 0 ##採用網卡eth0的Udp多播來組織心跳,一般在備用節點不止一臺時使用。Bcast、ucast和mcast分別代表廣播、單播和多播,是組織心跳的的方式,任選其一,可選配置
#ucast enp0s8 192.168.10.102 ##採用網卡enp0s8的udp單播來組織心跳,後面跟的IP地址爲雙機對方IP地址,可選配置
auto_failback on ##定義當主節點恢復後,是否將服務自動切回#watchdog /dev/watchdog ##可選配置,通過Heartbeat監控系統運行狀態。
node node1 ##主節點名稱,與uname -n顯示一致,即主節點主機名
node node2 ##備用節點名稱,即備節點主機名
ping 192.168.10.1 ##通過ping網關檢測心跳是否正常,僅用來測試網絡
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail ##指定和heartbeat一起啓動、關閉的進程,可選配置
#apiauth ipfail gid=haclient uid=hacluster ##設置啓動IPfail的用戶和組,可選配置
2、配置Haresources資源文件:
Haresources文件用於指定雙機系統的主節點、集羣IP、子網掩碼、廣播地址及啓動服務集羣資源,文件每一行可包含一個或多個資源腳本名,資源間使用空格隔開,參數間使用兩個冒號隔開,主節點和備份節點中資源文件haresources要完全一樣
編輯haresources文件: vim /usr/local/heartbeat/etc/ha.d/haresources
一般格式爲: node-name network <resource-group>
node-name表示主節點的主機名,必須和ha.cf文件中指定的節點名一致。
network用於設定集羣的IP地址、子網掩碼和網絡設備標識等。
resoure-group 用於指定需Heartbeat託管的服務(即這些服務可由Heartbeat來啓動和關閉)
如:
IP 192.168.56.110是虛擬IP
two是HA集羣的主節點,IPaddr爲heartbeat自帶的執行腳本,heartbeat首先將執行/etc/ha.d/resource.d/IPaddr 192.168.56.102/24 start的操作,即虛擬一個子網掩碼爲255.255.255.0,IP爲192.168.56.102的地址,此IP爲heartbeat對外提供服務的網絡地址,同時指定此IP使用的網絡接口
3、配置authkeys : 心跳密鑰驗證文件
編輯 vim /usr/local/heartbeat/etc/ha.d/authkeys
注:auth後填序號,可任意填寫,但第二行開頭必須爲序列號,然後爲驗證方式,支持三種(crc md5 sha1)方式驗證,最後面是自定義密鑰
配置雙機互信(可選)並複製文件至備機 : 即配置ssh雙機通信:
ssh-keygen -t rsa
ssh-copy-id -i .ssh/id_rsa.pub root@對端IP
4、複製配置文件至備heartbeat:
scp /usr/local/heartbeat/etc/ha.d/* root@備heartbeat機IP地址:/usr/local/heartbeat/etc/ha.d/
注意:備heartbeat節點各配置文件與主heartbeat節點各配置文件大體相同
5、測試:在主備heartbeat機上都執行
啓動httpd: systemctl start httpd
啓動heartbeat: /etc/init.d/heartbeat start或systemctl start heartbeat
設置selinux爲Permissive模式:getenforce 0
停止防火牆:systemctl stop firewalld
查看heartbeat啓動後的信息:
netstat -tulnp|grep heartbeat
tail -f /var/log/ha-log #日誌文件在ha.cf裏已經指定了
ifconfig命令查看虛擬IP 192.168.56.110是否存在:
停掉主heartbeat服務,會發現192.168.56.110 IP會漂移到備heartbeat
在瀏覽器裏輸入: 192.168.56.110 訪問會發現當主備heartbeat切換時,網頁內容會在主備heartbeat上的httpd服務內容之間切換