HA(High available)--Heartbeat高可用性集群(雙機熱備)


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.


 

AB同時安裝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

AB同時安裝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協議的服務,所以我們屏蔽主機Aping服務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地址一直

處於可通狀態,該過程並不影響雙機系統的可用性。所以該過程仍然是一個無縫切換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM