參考: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,主動使其上的業務切換到另一台