
IP
| 用途 | 賬號/密碼 | 安裝方式 |
10.100.174.84 | 實IP | test/******** root/******** | Yum install |
10.100.174.85 | 實IP | Yum install | |
10.100.174.86 | VIP |
[test@localhost ~]$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
Locate包名稱:mlocate
yum install mlocate
Tcpdump包名稱:tcpdump
yum install tdpdump
rz\sz包名稱:lrzsz
兩臺實體服務器均執行安裝命令:
yum install keepalived
為避免腦裂情況,本次采用非搶占模式配置,非搶占模式說明:
(1)兩個節點的state都必須配置為BACKUP;
(2)兩個節點都必須加上配置nopreempt;
(3)其中一個節點的優先級必須要高于另外一個節點的優先級;
1)兩臺服務器配置文件路勁:/etc/keepalived/keepalived.conf
2)主節點配置(注意:本次采用非搶占模式配置)
[root@localhost ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs { router_id ultra01}vrrp_instance VI_1 { state BACKUP nopreempt interface ens192 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass Tmp123$%^ } virtual_ipaddress { 10.100.174.86 }}
3)備節點配置
[root@localhost ~]# cat /etc/keepalived/keepalived.conf! Configuration File for keepalivedglobal_defs { router_id ultra02}vrrp_instance VI_1 { state BACKUP nopreempt interface ens192 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass Tmp123$%^ } virtual_ipaddress { 10.100.174.86 }}
兩臺服務器同時執行命令:
systemctl start keepalived.service
啟用keepalived服務:
systemctl enable keepalived
啟動keepalived服務:
systemctl start keepalived
#配置keepalived
vi /etc/sysconfig/keepalived
添加:KEEPALIVED_OPTIONS="-D -d -S 0"
#配置rsyslog抓取日志
vi /etc/rsyslog.conf
添加:local0.* /var/log/keepalived.log
#重啟服務
systemctl restart keepalived rsyslog
?
說明:#兩個節點都啟動時,由于主節點優先級高于備用節點,所以只有主節點上有VIP地址生效;
主節點-VIP地址生效查看:
[root@localhost ~]# ip a|grep 174.86 inet 10.100.174.86/32 scope global ens192
備節點-VIP地址查看:(說明:未生效-無VIP結果)
[root@localhost ~]# ip a|grep 174.86[root@localhost ~]#
說明:#由于主節點keepalived掛掉,備用節點會自動接管主節點的工作,即VIP
主節點-停服后,無VIP信息
[root@localhost ~]# systemctl stop keepalived[root@localhost ~]# ps -ef |grep keepalivedroot 108049 107959 0 15:37 pts/0 00:00:00 grep --color=auto keepalived[root@localhost ~]# ip a|grep 174.86[root@localhost ~]#
備節點-接管業務,有VIP信息
[root@localhost ~]# ip a|grep 174.86 inet 10.100.174.86/32 scope global ens192[root@localhost ~]#
如何檢查keepalived正常運行:
查看keepalived三個進程是否都啟動,命令:ps aux | grep keepalived
Keepalived 正常運行時,共啟動 3 個進程,其中一個進程是父進程,負責監控其子進程;一個是 vrrp 子進程;另外一個是 checkers 子進程。
1)查看已啟動的服務列表:systemctl list-unit-files |grep enabled
輸出的結果中無 keepalived.service
2)設置在開機時啟用服務: systemctl enable keepalived.service
3)查看服務是否開機啟動:systemctl is-enabled keepalived.service 結果輸出 enabled,則設置成功;
查看服務列表:chkconfig--list
查看keepalived是否開機啟動:chkconfig--list |grepkeepalived
設置開機啟動:chkconfigkeepalived on
腦裂(split-brain):指在一個高可用(HA)系統中,當聯系著的兩個節點斷開聯系時,本來為一個整體的系統,分裂為兩個獨立節點,這時兩個節點開始爭搶共享資源,結果會導致系統混亂,數據損壞。
一般來說裂腦的發生,有以下幾種原因:
1.高可用服務器對之間心跳線鏈路發生故障,導致無法正常通信。
2.因心跳線壞了(包括斷了,老化)。
3. 因網卡及相關驅動壞了,ip配置及沖突問題(網卡直連)。
4.因心跳線間連接的設備故障(網卡及交換機)。
5.因仲裁的機器出問題(采用仲裁的方案)。
6.高可用服務器上開啟了 ??iptables??防火墻阻擋了心跳消息傳輸。
7.高可用服務器上心跳網卡地址等信息配置不正確,導致發送心跳失敗。
8.其他服務配置不當等原因,如心跳方式不同,心跳廣插沖突、軟件Bug等。
9.Keepalived配置里同一 VRRP實例如果virtual_router_id兩端參數配置不一致也會導致裂腦問題發生。
————————————————
但有一個問題,正常情況下A(master)主服務器運行時浮動ip(vip)綁定在A服務器的網卡上,當A服務器宕機時,B(backup)從服務器自動接替工作浮動ip綁定到B服務器網卡上,若修復好A服務器從新上線,A服務器會搶占浮動ip,強制重新綁定到A服務器網卡上。
如何避免搶占浮動ip,A宕機時B接替工作,當A恢復上線時自動當從機,B繼續工作?
解決方案:
修改A(master)主服務的/etc/keepalived/keepalived.conf文件中state的值為BACKUP,在參數中添加nopreempt命令,B服務器的配置文件不改變。
【這個nopreempt配置只能設置在state為BACKUP的主機上,而且這個主機的priority必須比另外一臺高】
問題原因:是防火墻禁用了vrrp協議
問題解決:需要防火墻允許vrrp協議
Iptables命令:
Iptables -A INPUT -i eth0 -p 112 -j ACCEPT
firewalld命令:
firewalld添加規則:
firewall-cmd --add-rich-rule="rule protocol value="vrrp" accept" --permanent
firewall-cmd --reload
以上驗證,配置成功;或者==>
firewalld開放vrrp協議
firewall-cmd --direct --permanent --add-rule ipv4 filter INPUT 0 --in-interface ens192--destination 224.0.0.18 --protocol vrrp -j ACCEPT
通過tcpdump抓包判斷高可用網絡是否正常
命令:tcpdump -i ens192|grep VRRP
說明:正常情況下,主節點會像備節點發送VRRP報文。