HA(High available)--Heartbeat高可用性集群(雙機熱備)
1.理解:兩台服務器A和B ,當A提供服務,B閑置待命,當A服務宕機,會自動切換至B機器繼續提供服務。當主機恢復正常后,按照使用者設定的自動或手動切換到主機上運行,數據一致性通過共享存儲系統解決。
2.實現該功能的軟件有:Heartbeat , keepalived(具有負載均衡的能力)
3.結構圖
HA-Heartbeat
實驗:以hearbeat為例,來做HA集群,並把nginx服務作為HA對應的服務
關閉防火牆:iptables -F service iptables save
關閉selinux: setenforce 0 ,getenforce 查看,vim /etc/selinux/conf 修改,保存退出。
配置網卡:
master --eth1 192.168.2.105
slave --eth1 192.168.2.106 eth1作為心跳線 作用:探測對方主機服務是否存活。
master --eth0 192.168.1.105
slave --eth0 192.168.1.106 eth0為流動ip 又稱VIP 對外提供服務。
操作:A:
hostname =master
vim /etc/sysconfig/network
HOSTNAME=master
vim /etc/hosts
192.168.1.105 master
192.168.1.106 slave
操作:B:
hostname =slave
vim /etc/sysconfig/network
HOSTNAME=slave
vim /etc/hosts
192.168.1.105 master
192.168.1.106 slave.
A,B同時安裝epel擴展源 (安裝擴展源后yum報錯解決linux 小記[2])
wget www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm
rpm -ivh epel-release-6-8_64.noarch.rpm
A,B同時安裝hearbeat 及擴展libnet 和准備測試的nginx
yum install -y heartbeat* libnet nginx
A機:切換到安裝目錄拷貝文件到/etc/ha.d下
cd /usr/share/doc/heartbeat-3.0.4/
cp authkeys ha.cf haresources /etc/ha.d/
切換目錄到/etc/ha.d編輯配置
cd /etc/ha.d/
vim authkeys
auth 3 驗證級別
3 md5 Hello! 加密方式
並且賦予600讀寫權限給root
chmod 600 authkeys
vim haresources
master 192.168.1.106/24/eth0 nginx [流動ip 即vip master 主機名 nginx 服務,可以是其他服務。]
vim ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
ucast eth1 192.168.2.106 對方ip
auto_failback on
node master
node slave
ping 192.168.2.1
respawn hacluster /usr/lib64/heartbeat/ipfail 如果是32系統切記lib64改為lib
ha.cf 文件詳解
debugfile /var/log/ha-debug 故障調試log
logfile /var/log/ha-log log文件
logfacility local0 日志級別
keepalive 2 探測周期 2s
deadtime 30 檢測死亡時間 30s
warntime 10 啟動警告記錄時間 10s
initdead 60 重啟預留時間60s
udpport 694 心跳線通訊端口
ucast eth0 192.168.0.161 對方的ip ,也可使用 bcast 即廣播的方式尋找 ,最好串口線或者使用單獨網卡
auto_failback on 從機啟動后探測到主機存活是否返回設置
node master
node slave 兩個node機器
ping 192.168.0.1 仲裁者 路由器或者交換機來充當
respawn hacluster /usr/lib/heartbeat/ipfail 防止進程死亡 從新拉起進程 64位系統需要改一下/lib 位lib64 不然服務無法啟動,切記。
拷貝編輯的此三個文件到第二台服務器B機的/etc/ha.d目錄下
scp authkeys ha.cf haresources slave:/etc/ha.d/
修改B機器中的ha.cf
vim /etc/ha.d/ha.cf
修改:ucast 項為:ucast eth1 192.168.2.105 保存退出。
環境測試
A主機nginx
echo "this is heartbeat server master "1111"" > /usr/share/nginx/html/index.html
B主機nginx
echo "this is heartbeat server slave "2222"" > /usr/share/nginx/html/index.html
查看AB 機器nginx啟動情況
先啟動A機master heartbeat服務 后啟動B機slave heartbeat
/etc/init.d/heartbeat start
查看nginx啟動情況
ps -aux|grep nginx
注釋:(啟動heartbeat后nginx會自動啟動無需手動,B機器默認nginx是不會啟動的)
測試1
客戶端瀏覽器訪問192.168.1.106 [流動ip (vip)]
瀏覽器顯示“this is heartbeat server master 111111”正常
測試2
介於該心跳線是基於icmp協議的服務,所以我們屏蔽主機A的ping服務后,B機中heartbeat服務無法探測到A機器時,B機器認為A機器已故障(可從heartbeat日志中查看到),於是B機器即刻啟動自身nginx服務接管A機器工作
實驗.在A服務器主機上添加一條防火牆規則,拒絕ping
iptables -A INPUT -p icmp -j DROP
客戶端瀏覽器訪問192.168.1.106
覽器顯示“this is heartbeat server slave 2222”正常
測試3.
當我們刪除A機器剛才添加的防火牆規則,B機器探測到A機器存活后,讀取自身/etc/ha.d/ha.cf 文件auto_failback on項, 於是自動切換到A機器,停止自身ngingx服務。此時服務有A提供。測試如下
實驗:刪除A機器剛才添加的防火牆規則
iptables -D INPUT -p icmp -j DROP
瀏覽器顯示“this is heartbeat server master 111111”正常
此次測試可從eth0 ,nginx , heaartbeat日志等看到相同的情況。日志:/var/log/ha-log.
完結
超詳配置說明:
linux下heartbeat的配置
在Linux系統上雙機功能的實現,對雙機軟件High-Availability Linux Project的安裝、配置、運行以及測試進行說明。
1. 軟件及安裝說明
本文檔描述的Linux-HA軟件以及參考的文檔均來自網站: http://www.linux-ha.org/。
通過安裝該Linux-HA軟件,可以實現Linux雙機系統的高可用性解決方案,實現雙機系統的熱備份,並能夠做到雙機之間的無縫切換,從而對外
提供穩定可靠的服務,最終實現系統高性能RAS(reliability, availability, and serviceability)。
實現雙機系統的兩台主機不要求完全一致,但應該盡量做到硬件匹配。雙機的連接可以使用串口線,也可以通過以太網ethernet進行連接,還
可以采用並存的多種連接方式實現兩台主機的多重互連。兩台主機應該安裝相同的操作系統,推薦使用RedHat Linux。進行網絡配置,為每一
台主機分配一個固定IP地址,另外需要選擇一個IP地址作為集群IP(cluster IP),該IP是集群系統對外提供服務的接口。
注意:主機IP地址與集群IP地址一定不能重復。
1.2 軟件的安裝
1.2.1 下載
首先選擇與系統匹配的安裝文件。本文檔測試所用的系統是CENTOS4.4,所用的安裝文件是heartbeat-2.0.8.tar.gz,用戶可以自行到網站
http://linux-ha.org/download/index.html上下載,該網站也會不斷提供實時更新.同時到 http://www.packetfactory.net/libnet/下載
libnet.tar.gz 穩定版本是:1.1.2.1.
Linux-HA軟件的安裝需要大量支持性的rpm軟件包,根據用戶系統及配置的不同,安裝過程中會提出不同的rpm需求。如果有未獲得的rpm包,可
以到網站 http://rpmfind.net/ 上查找並下載。
1.2.2 編譯安裝
如安裝文件所示,heartbeat-2.0.8.tar.gz是heartbeat的源代碼軟件包。該文件需要重新編譯,但是首先應該依次安裝支持heartbeat的一些
rpm package,這些軟件包對heartbeat提供必要的支持,然后再安裝heartbeat軟件包。注意由於軟件包之間有相互依賴關系,因而需要遵循一
定的安裝順序,可以根據安裝過程中的提示自行協調安裝順序。
一些依賴的rpm包如下:
#rpm –ivh perl-Digest-SHA1-2.01-6.i386.rpm
#rpm –ivh perl-Digest-HMAC-1.01-8.noarch.rpm
#rpm –ivh perl-Authen-SASL-2.03-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-ldap-0.2701-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Convert-ASN1-0.16-2.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Net-SSLeay-1.22-1.rh.8.0.um.1.i386.rpm
#rpm –ivh perl-IO-Socket-SSL-0.92-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Parse-RecDescent-1.80-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-Mail-IMAPClient-2.2.7-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-XML-NamespaceSupport-1.08-1.rh.8.0.um.1.noarch.rpm
#rpm –ivh perl-XML-SAX-0.12-1.rh.8.0.um.1.noarch.rpm
下面開始編譯安裝libnet和heartbeat
tar -zxvf libnet.tar.gz
cd libnet
./configure
make
make install
tar zxf heartbeat-2.0.8.tar.gz
cd heartbeat-2.0.8
./ConfigureMe configure --disable-swig --disable-snmp-subagent
make
make install
cp doc/ha.cf doc/haresources doc/authkeys /etc/ha.d/
cp ldirectord/ldirectord.cf /etc/ha.d/
1.3 軟件的配置
Heartbeat軟件的安裝目錄為/etc/ha.d,其中的
README.config對配置文件進行了說明,共有三個主要的配置文件:ha.cf,haresources,authkeys。
下面依次對三個配置文件進行說明,此外用戶還可以參考Linux-HA附帶的安裝文檔以及配置文件自身的注釋。
1.3.1 配置ha.cf文件
ha.cf是heartbeat的主要配置文件,可以對heartbeat的多數性能和狀態進行配置。大部分選項的取值可以采用默認值,其中的主要選項及配置
方法說明如下:
debugfile /var/log/ha-debug:該文件保存heartbeat的調試信息
logfile /var/log/ha-log:heartbeat的日志文件
keepalive 2:心跳的時間間隔,默認時間單位為秒
IXDBA.NET社區論壇
deadtime 30:超出該時間間隔未收到對方節點的心跳,則認為對方已經死亡。
warntime 10:超出該時間間隔未收到對方節點的心跳,則發出警告並記錄到日志中。
initdead 120:在某些系統上,系統啟動或重啟之后需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔。取值至
少為deadtime的兩倍。
udpport 694:設置廣播通信使用的端口,694為默認使用的端口號。
baud 19200:設置串行通信的波特率。
serial /dev/ttyS0:選擇串行通信設備,用於雙機使用串口線連接的情況。如果雙機使用以太網連接,則應該關閉該選項。
bcast eth0:設置廣播通信所使用的網絡接口卡。
auto_failback on:heartbeat的兩台主機分別為主節點和從節點。主節點在正常情況下占用資源並運行所有的服務,遇到故障時把資源交給從
節點並由從節點運行服務。在該選項設為on的情況下,一旦主節點恢復運行,則自動獲取資源並取代從節點,否則不取代從節點。
ping ping-node1 ping-node2:指定ping node,ping node並不構成雙機節點,它們僅僅用來測試網絡連接。
respawn hacluster /usr/lib/heartbeat/ipfail:指定與heartbeat一同啟動和關閉的進程,該進程被自動監視,遇到故障則重新啟動。最常
用的進程是ipfail,該進程用於檢測和處理網絡故障,需要配合ping語句指定的ping node來檢測網絡連接。
1.3.2 配置haresources文件
haresources文件用於指定雙機系統的主節點、集群IP、子網掩碼、廣播地址以及啟動的服務等。其配置語句格式如下:
node-name network-config
其中node-name指定雙機系統的主節點,取值必須匹配ha.cf文件中node選項設置的主機名中的一個,node選項設置的另一個主機名成為從節點
。
network-config用於網絡設置,包括指定集群IP、子網掩碼、廣播地址等。resource-group用於設置heartbeat啟動的服務,該服務最終由雙機
系統通過集群IP對外提供。
下面舉例對配置方法進行說明:
# hello 192.168.8.240 httpd tomcat
假設ha.cf文件中node選項設置的兩個主機名分別為hello和web,則根據上述配置,雙機系統的主節點為hello,從節點為web。
heartbeat啟動時獲取集群IP(cluster IP)為192.168.8.240,該IP成為heartbeat對外提供服務的網絡地址。此外heartbeat依次啟動服務
httpd和tomcat(從左向右的順序)。heartbeat關閉時將依次關閉tomcat和httpd(從右向左的順序),並釋放cluster IP。
httpd和tomcat分別是apache和tomcat的啟動腳本,heartbeat將從下面目錄中尋找這些啟動腳本:
/etc/ha.d/resource.d
/etc/rc.d/init.d
# hello 192.168.8.240/19 httpd tomcat
指定cluster IP為192.168.8.240,並且指定子網掩碼為255.255.224.0,每個網段內有213個可用IP,默認廣播地址取該網段內的最大可用IP,
取值為192.168.31.255。
此外,還可以向啟動腳本傳遞argument,語法為:scriptname::argument
# hello 192.168.8.240/19/eth0/192.168.31.251 httpd tomcat
指定cluster IP為192.168.8.240,子網掩碼為255.255.224.0,使用的網絡接口卡為eth0,並強制設定廣播地址為192.168.31.251。
注意:兩台主機的haresources文件設置必須完全一致。
1.3.3 配置authkeys文件
authkeys文件用於heartbeat的鑒權設置,共有三種可用的鑒權方式:crc、md5和sha1。三種方式安全性依次提高,但同時占用的系統資源也依
次擴大。crc安全性最低,適用於物理上比較安全的網絡,sha1提供最為有效的鑒權方式,占用的系統資源也最多。
IXDBA.NET技術社區
其配置語句格式如下:
auth
[]
舉例說明:
auth 1
1 sha1 key-for-sha1
其中鍵值key-for-sha1可以任意指定,number設置必須保證上下一致。
auth 2
2 crc
crc方式不需要指定鍵值。
最后,該authkeys文件的文件許可權應該設為600(即-rw-------),命令為:
chmod 600 authkeys
注意:上述三個配置文件設置完畢后,應該復制到/etc/ha.d目錄下。
1.4 運行與測試
1.4.1 啟動heartbeat
heartbeat安裝完成后,自動在/etc/rc.d/init.d/目錄下生成啟動腳本heartbeat,啟動heartbeat可以使用命令
/etc/rc.d/init.d/heartbeat start
此外還可以使用stop、restart、reload、status等控制參數。
1.4.2 測試方案
下面描述一個簡單的測試方案。系統環境和軟件配置如下:
兩台主機的主機名和IP地址分別為:
hello(192.168.6.7)
web(192.168.6.33)
則ha.cf文件中的node語句定義如下:
node hello
node web
haresources文件定義如下:
hello 192.168.8.240/19/192.168.31.255
該語句指定雙機系統的主節點為hello,從節點為web,集群IP(cluster IP)為192.168.8.240,子網掩碼為255.255.224.0,廣播地址為
192.168.31.255。本測試方案沒有指定heartbeat啟動的服務,僅通過ping命令和telnet命令來檢測雙機系統的可用性。
任何一台主機在啟動heartbeat后,可以使用命令 ps aux | grep heartbeat 來查看heartbeat的進程狀態,可以使用ifconfig命令確認當前主
機是否已經綁定了cluster IP,此外還可以在/var/log/目錄下查看heartbeat的日志文件ha-debug、ha-log。如果運行過程中產生了任何異常
或錯誤消息,則應該根據上述信息進行檢查和調試。
測試步驟如下:
1.
主節點啟動heartbeat
在主節點hello上調用命令 /etc/rc.d/init.d/heartbeat start 啟動heartbeat。該主機將會自動綁定集群IP地址,在雙機系統之外的第三台
主機上使用ping命令檢測集群IP地址192.168.8.240,直至該地址變為可用(根據硬件和網絡性能的差異,主機綁定集群IP地址需要等待不同的
時間)。
在主節點hello上使用ifconfig命令查看該主機的網絡配置,顯示主節點已經綁定了集群IP地址192.168.8.240。
在第三台主機上使用telnet命令登錄集群IP地址192.168.8.240,輸入主節點hello的用戶名和口令,可以成功登錄hello主機。
2.從節點啟動heartbeat
使用相同的命令啟動從節點web的heartbeat。由於在兩台主機同時啟動heartbeat的情況下,應該由主節點來獲取IP地址並對外提供服務,因而
從節點heartbeat的啟動並不對主節點產生影響。最終仍然由主節點hello綁定集群IP地址,使用telnet命令登錄的也是主節點hello。
3. 主節點關閉heartbeat
在主節點hello上調用命令 /etc/rc.d/init.d/heartbeat stop 關閉heartbeat。
使用ifconfig命令可以發現,主節點hello已經釋放了集群IP地址192.168.8.240,並由從節點web綁定該IP地址。使用telnet命令登錄的是從節
點web。
在這個過程中,使用ping命令進行不間斷監測,可以發現集群IP地址192.168.8.240一直處於可通狀態,並沒有產生任何阻塞或延遲,所以,在
關閉處於激活狀態的heartbeat的情況下,雙機系統可以實現無縫切換。但是在另外一些情況下,比如網絡故障、主機關機或重啟等,如果該主
機的heartbeat處於激活狀態,則不能實現雙機的無縫切換,切換過程需要有一定的延遲,使用ping命令可以發現集群IP地址暫時無法使用。
3. 主節點再次啟動heartbeat
在這種情況下,主節點hello將重新綁定集群IP地址,從節點web釋放該IP地址,並由主節點對外提供服務。在主節點啟動heartbeat之后,集群
IP地址的釋放和綁定有一定的延遲。雖然有一定的延遲,但是集群IP地址的釋放和綁定是同步進行的,使用ping命令可以發現集群IP地址一直
處於可通狀態,該過程並不影響雙機系統的可用性。所以該過程仍然是一個無縫切換。