一、理論
·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 -y heartbeat* libnet nginx
(3)主節點:
1.cd /usr/share/doc/heartbeat-3.0.4/
2.cp authkeys ha.cf haresources /etc/ha.d/ #拷貝模版配置檔案
3.cd /etc/ha.d
4.vim authkeys #設定互相檢測心跳時的加密方式
5.vim haresources #設定主節點,備用上邊不用修改
node1 192.168.1.109/24/eth0:0 nginx #主節點的主機名/外網IP/掩碼/虛拟接口/高可用服務
6.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 authkeys zhaijunming1:/etc/ha.d/ #把配置檔案拷貝到從上
2.備節點修改/etc/ha.cf vim /etc/ha.d/ha.cf # 隻需要更改一個地方,修改為對方的心跳線位址
”ucast eth1 192.168.100.20 “改為 ”ucast eth1 192.168.100.30“
三、測試
主:1.啟動heartbeat:等待一分鐘左右 ,執行ifconfig -a 檢視是否有VIP,然後nginx服務是否自動起來了