Heartbeat原理及部署


  參考:https://blog.csdn.net/wzy0623/article/details/81188814

    http://www.mamicode.com/info-detail-1494631.html

    https://www.jianshu.com/p/12c4b3e43b65

  一,Heartbeat簡介

  通過Heartbeat,可以將資源(ip以及程序服務等資源)從一台已經故障的計算機快速轉移到另一台正常運轉的機器上繼續提供服務,一般稱之為高可用服務。官方網址:http://www.linux-ha.org/wiki/Heartbeat
        通過修改Heartbeat的配置文件,可以指定一台Heartbeat服務器作為主服務器,另一台自動成為熱備服務器。在熱備服務器上面配置Heartbeat守護程序來監聽來自主服務器的心跳信息。如果在規定時間內,無法監聽到心跳信息,那么就啟動故障轉移,取得主服務器上的相關資源的所有權,接替主服務器繼續不間斷的提供服務,從而達到資源以及服務高可用的目的。一般故障切換時間在5~20s之間。Heartbeat還支持主主模式,及兩台服務器互為主備。
        另外,和Keepalived的服務一樣,Heartbeat高可用是服務器級別的,不是服務級別的。它可以監測以下系統問題:
  服務器宕機
  Heartbeat軟件故障
  心跳連接線故障
  服務故障不會導致切換,但可以通過服務宕機把Heartbeat服務停掉,從而主機實現自動切換。至少需要兩台主機才可以實現高可用服務。兩台Heartbeat服務之間可以通過以下方式進行通信:
  穿行電纜,所謂的串口(首選,缺點是距離不能太遠)
  一根以太網電纜兩網卡直連(常用方式)
  以太網電纜,通過交換機等網絡設備連接。(交換機可能出現問題等)
        Heartbeat通過ip地址接管和arp廣播進行故障轉移的。在主服務器故障時,備用節點接管資源后,會立即強制更新所有客戶端本地的arp表,即清楚客戶端本地緩存的故障服務器的vip和mac地址的解析記錄,確保客戶端和新的主服務器的對話。
        真實ip,又被稱為管理ip,一般指配置在物理網卡上面的ip。在負載均衡高可用環境中,管理ip是不對外提供訪問服務的,僅作為管理服務器使用,如SSH可以通過這個進行服務連接管理。VIP是虛擬ip,實際上就是eth0:X,x為0~255的任意數字,可以在一個網卡上面綁定多個別名。VIP當主服務器故障時,可以自動漂移到備用服務器。
  

  二,安裝Heartbeat

  環境查看

 

 

   服務器規划

IP 用途 主機名
192.168.1.101 主服務器 hdp3
192.168.1.102 備服務器 hdp4

 

  初始配置

  禁用防火牆

systemctl disable firewalld

   關閉senlinux

  設置主機名並設置hosts文件 

  兩台主機名不一樣,hosts文件一樣 

# cat /etc/hosts
192.168.1.101 hdp3
192.168.1.102 hdp4

   安裝依賴包

yum -y install glib2-devel libtool-ltdl-devl net-snmp-devel bzip2-devel ncurses-devel openssl-devel libtool libxml2 libxml2-devel gettext bison flex zlib-devel mailx which libxslt docbook-dtds docbook-style-xsl PyXML shadow-utils opensp autoconf automake bzip2 e2fsprogs-devel libxslt-devel libtool-ltdl-devel make asciidoc libuuid-devel asciidoc

   下載安裝包

    Heartbeat 3.0.6:http://hg.linux-ha.org/heartbeat-STABLE_3_0/archive/958e11be8686.tar.bz2
    Cluster Glue 1.0.12:http://hg.linux-ha.org/glue/archive/0a7add1d9996.tar.bz2
    Resource Agents 3.9.6:https://github.com/ClusterLabs/resource-agents/archive/v3.9.6.tar.gz

   添加 haclient 組和 hacluster 賬戶,這個用戶主要用來配置respawn的。

groupadd haclient
useradd -g haclient -M -s /sbin/nologin hacluster

   安裝Cluster Glue 1.0.12

tar -xf 0a7add1d9996.tar.bz2 
cd Reusable-Cluster-Components-glue--0a7add1d9996/
./autogen.sh
./configure --prefix=/usr/local/heartbeat  LIBS='/lib64/libuuid.so.1'
make && make install

  安裝Resource Agents

tar -xf v3.9.6.tar.gz
cd resource-agents-3.9.6/
./autogen.sh
./configure --prefix=/usr/local/heartbeat  
make && make install

   安裝heartbeat-3-0-6

tar -xf 958e11be8686.tar.bz2
cd Heartbeat-3-0-958e11be8686/
#設置,否則安裝會報錯
export CFLAGS="$CFLAGS -I/usr/local/heartbeat/include -L/usr/local/heartbeat/lib"
#刪除配置文件的最后一行
sed -i '/^#define HA_HBCONF_DIR /d' /usr/local/heartbeat/include/heartbeat/glue_config.h
./bootstrap 
./configure --prefix=/usr/local/heartbeat  LIBS='/lib64/libuuid.so.1'
make && make install

   拷貝配置文件

cd /usr/local/heartbeat/share/doc/heartbeat
cp authkeys ha.cf haresources /usr/local/  heartbeat/etc/ha.d/

   設置配置文件權限及軟連接

cd /usr/local/heartbeat/etc/ha.d
chmod 600 authkeys
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/RAExec/* /usr/local/heartbeat/lib/heartbeat/plugins/RAExec/
ln -svf /usr/local/heartbeat/lib64/heartbeat/plugins/* /usr/local/heartbeat/lib/heartbeat/plugins/

   編輯配置文件

  192.168.1.101上的ha.cf文件內容如下

# cat /usr/local/heartbeat/etc/ha.d/ha.cf 
# 保存調試信息文件
debugfile /var/log/ha-debug         
# 日志文件
logfile /var/log/ha-log
# 表示使用系統日志            
logfacility local0 
# 心跳的時間間隔,單位秒                 
keepalive 1                         
# 超出該時間間隔未收到對方節點的心跳,則判定對方死亡
deadtime 30  
# 超出該時間間隔未收到對方節點的心跳,則發出警告記錄到日志中                       
warntime 10 
#  在某系統上,系統啟動或重啟之后需要經過一段時間網絡才能正常工作,該選項用於解決這種情況產生的時間間隔,取值至少為deadtime的2倍                         
initdead 120  
# 設置廣播通信使用的端口,694為默認使用的端口號                           
udpport 694                         
# 傳播心跳的廣播播網卡信息
bcast eth0      
# 設置對方機器心跳檢測的IP
# 第二列為網卡名 第三列為心跳IP,生產中心跳需要與數據網絡分開                   
ucast eth0 192.168.1.102  
# 在該選項設為on的情況下,一旦主節點恢復運行,則自動獲取資源並取代從節點         
auto_failback off              
# 配置主從的節點信息
node hdp3                           
node hdp4           
# 如果ping不通該地址,就認為當前斷網,需要轉移vip
ping 192.168.1.9                   
# 指定與heartbeat一同啟動和關閉的進程,該進程被自動監視,遇到故障則重新啟動。最常用的進程是ipfail,該進程用於檢測和處理網絡故障,需要配合ping語句指定的ping node來檢測網絡連接。如果你的系統是64bit,請注意該文件的路徑
respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfail  
# 指定用戶和組
apiauth ipfail gid=haclient uid=hacluster

   注意:如果復制配置文件可能導致無法啟動heartbeat,可能是因為字符編碼或者空格等原因,可以直接在原配置文件修改

  192.168.1.102除了以下配置不一樣其他一致

# 設置對方機器心跳檢測的IP
# 第二列為網卡名 第三列為心跳IP,生產中心跳需要與數據網絡分開                   
ucast eth0 192.168.1.101  

   編輯認證文件authkeys

  開啟2認證,認證秘鑰為HI!生產中使用復雜秘鑰

# sed '/#/d' authkeys 
auth 2
2 sha1 HI!

   編輯資源配置文件

  192.168.1.101配置文件

#cat haresources 
hdp3 IPaddr::192.168.1.100/24/eth0

   解析:hdp3代表主機名,192.168.1.100為VIP 虛擬在網卡eth0上

  192.168.1.101配置文件

# cat haresources 
hdp4 IPaddr::192.168.1.100/24/eth0

   啟動heartbeat

 systemctl start heartbeat

   主服務器上查看日志

 

 

 

   備主機沒有虛擬VIP

 

   停止主服務器的heartbeat

systemctl stop heartbeat

   主服務器查看ha日志

 

   從服務器查看ha日志

 

   再次啟動主服務器的heartbeat

  查看從服務器日志知道hdp3已經觸及active狀態

 

   從服務器VIP還保留,除非從服務器heartbeat停止主heartbeat應用正常則主會接收生成VIP

  三,使用heartbeat實現web高可用

  以上只實現的VIP漂移,下面通過heartbeat實現web高可用

  兩台主機安裝apache

yum -y install httpd

   找到httpd啟動程序並負責到heartbeat管理目錄

# which  httpd
/usr/sbin/httpd
cp /usr/sbin/httpd /usr/local/heartbeat/etc/ha.d/resource.d/

   使用heartbeat需要滿足以下條件

1)httpd命令需要放在/etc/init.d/下或者/etc/ha.d/resource.d下

2)httpd命令需要具備可執行權限(x)

3)httpd必須支持如下啟動方式

/etc/init.d/httpd

Usage: httpd {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}

   查看httpd幫助可以知道httpd可以使用命令啟動,需要加參數-k

 

   

httpd -k start

   修改haresources

  兩台服務器配置一致

# cat haresources 
hdp3 IPaddr::192.168.1.100/24/eth0 httpd::-k

   重啟heartbeat查看日志

systemctl restart heartbeat

 

  主服務器

 

   注意:使用heartbeat可以管理應用資源,應用無需使用systemctl enable設置成開機自啟動

  高可用測試,為了區分,在兩台服務器寫入不同的首頁

#主服務器
echo hdp3>/var/www/html/index.html
#備服務器
echo hdp4>/var/www/html/index.html

   停止主服務器的heatbeat模擬中斷

  備服務器查看日志

 

   web頁面使用VIP訪問變成備服務器的首頁了

 

   生產中主備服務器后端內容是一致的,主服務器宕機對於用戶來說無感知

   注意:如果heartbeat正常,VIP正常,httpd服務宕了,這個時候不會做高可用切換,寫個簡單的腳本定時或守護進程判斷httpd服務,如果有問題,則停止heartbeat,主動使其上的業務切換到另一台

  


免責聲明!

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



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