一、理論概述
HA高可用,又被叫做雙機熱備。
高可用原理:兩臺機器A和B,正常是A提供服務,B閒置,當A宕機或服務宕掉,切換到B繼續提供服務,使用心跳進行通信和選舉
heartbeat原理:心跳檢測和資源接管兩個部分。集羣中的主機互相發送報文,告訴對方自己當前的狀態,如果在一定時間內未收到對方報文,認定對發死亡
常用的高可用軟件:heartbeat、keepalived
腦裂:雙方無法進行心跳信息的傳遞,導致無法獲取其他節點狀態信息
heartbeat 適合做服務高可用
keepalived適合做lvs高可用
兩種檢測的方式:互相發送報文,第二種ping網關或者別的第三方
心跳線的作用(內網IP):互相發送報文
實驗:AB兩臺虛擬機上都裝nginx和heartbeat,AB兩臺虛擬機都把heartbeat起來,但不啓動nginx。
這時主節點上的nginx會自動啓動,並獲得VIP。
正常情況下是A提供服務,VIP在A上,如果A上的nginx出現故障停止工作,VIP會漂移到B上,B上的nginx也會自動啓動,以此達到高可用效果
二、搭建
重點:時間同步
各個集羣節點能互相解析
(1)三個配置文件:
祕鑰文件:authkeys
heartbeat服務配置文件:ha.cf
資源管理配置文件:haresouce
(2)準備環境
1.兩臺虛擬機都裝heartbeat和nginx
2. hostname分別爲:node1 node2
3.兩臺機器都添加兩個內網地址:192.168.100.20,192.168.100.30(用來模擬心跳線)
4. 關閉防火牆 service iptables stop
5. 關閉SElinux setenforce 0
6.添加解析 vim/etc/hosts #增加內容如下:
192.168.1.104 node1 #外網地址和主機名
192.168.1.106 node2 #外網地址和主機名
7. 兩個機器都安裝heartbeat libnet nginx
#yum install -yheartbeat* libnet nginx
#yum install -y heartbeat* libnet nginx
(3)主節點:
#cd /usr/share/doc/heartbeat-3.0.4/ #cp authkeys ha.cf haresources /etc/ha.d/ 拷貝模版配置文件 #cd /etc/ha.d #vim authkeys 設置互相檢測心跳時的加密方式 #vim haresources 設置主節點,備用上邊不用修改 node1 192.168.1.109/24/eth0:0 nginx 主節點的主機名/外網IP/掩碼/虛擬接口/高可用服務 #vim ha.cf debugfile /var/log/ha-debug 記錄調試信息 ogfile /var/log/ha-log 記錄日誌信息 logfacility local0 日誌級別 keepalive 2 發送心跳報文的間隔 deadtime 30 等待30秒,如果沒收到對方心跳,視爲宕機 warntime 10 10秒收不到,記錄日誌 initdead 60 網絡啓動時間 udpport 694 設置廣播通信使用的端口 ucast eth1 192.168.100.20 第一種:廣播的形式檢測對方心跳線信息(對方,內網IP) auto_failback on 主節點恢復後,是否接管從節點的服務 respawn hacluster /usr/lib64/heartbeat/ipfail 配合ping語句指定的ping node來檢測網絡的連通性 node zhaijunming 主節點 node zhaijunming1 從節點 ping 192.168.1.254 第二種檢測方式,ping 第三方穩定的節點 #兩種檢測方式: 1.互相發送心跳報文 2.ping第三方穩定的節點
(4)備節點
1.拷貝配置文件到 從服務器上
scp ha.cf haresources authkeyszhaijunming1:/etc/ha.d/ #把配置文件拷貝到從上
2.備節點修改/etc/ha.cf vim /etc/ha.d/ha.cf # 只需要更改一個地方,修改爲對方的心跳線地址
”ucast eth1192.168.100.20 “改爲 ”ucasteth1 192.168.100.30“
三、測試
主:1.啓動heartbeat:等待一分鐘左右,執行ifconfig -a 查看是否有VIP,然後nginx服務是否自動起來了
備:2.啓動heartbeat,不能有VIP,nginx也不能自動啓動
停止主節點上的httpd,看是否vip轉到備用節點,備節點httpd服務是否啓動