Keepalive介紹及工作原理


注:keepalive和Nginx和高可用沒有關聯。

1.什么是高可用,為什么要設計高可用?

1.兩台業務系統啟動着相同的服務,如果有一台故障,另一台自動接管,我們將中國稱之為高可用。
2.系統可用率算法例:
-1個9:(1-90%)*365=36.5天 ----> 表示該系統1年時間里最多可能的業務中斷時間是36.5天
-2個9:(1-99%)*365=3.65天 ----> 表示該系統1年時間里最多可能的業務中斷時間是36.5天

2.高可用的目的?

保證系統可實時不間斷的使用。

3.高可用使用什么工具來實現?

軟件:keepalive

4.keepalive如何實現高可用?

keepalive是通過vrrp(虛擬路由冗余協議)實現高可用。


 
VRRP協議原理

5.keepalive使用場景

通常業務系統需要保證7X24小時不down機。比如公司內部OA系統,每天公司人員都需要使用,則不允許down機。作為業務系統來說隨時隨地地都要求可用。


 
場景及原理說明

6.keepalive安裝與配置

1.安裝

yum install -y keepalive

2.配置[root@lb01 ~]#

**lb01配置**: cat /etc/keepalived/keepalived.conf global_defs { router_id lb01 #標識信息 } vrrp_instance VI_1 { state MASTER priority 150 #優先級 interface eth0 #綁定的網卡 virtual_router_id 50 #同一個虛擬的路由 advert_int 1 #心跳的間隔時間 authentication { auth_type PASS #兩個主機之間的密語 auth_pass 1111 #心跳密碼 } virtual_ipaddress { 10.0.0.3 #虛擬IP地址(可以綁定多個虛擬IP地址) } } **lb02配置**: #lb02配置如下 global_defs { router_id lb02 } vrrp_instance VI_1 { state BACKUP priority 100 interface eth0 virtual_router_id 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 #虛擬IP地址 } } 

3.啟動

systemctl  start keepalive

4.測試:keepalive高可用地址漂移
(1)keepalive提供一個VIP(虛擬IP)和vmac(虛擬Mac地址)


 
虛擬IP地址

(2)抓包測試


 
抓包測試

7.keepalive高可用搶占式和非搶占式

(1)默認配置為搶占式:
master掛掉,backup上台,master重新啟動則講IP搶占過去。
(2)非搶占式配置:
兩台均為backup,在優先級上做區分,如master掛掉,backup上台,則backup變成master,master變為backup。
a.兩個節點的state均為backup(官方建議)
b.兩個節點都在vrrp_instance中添加nopreempt
c.其中一個節點的優先級要高於另外一個節點
兩台服務器角色都啟用了nopreempt后,必須修改角色狀態統一為backup,唯一的區別就是優先級不同。

#Master
    vrrp_instance VI_1 {
        state BACKUP
        priority 150
        nopreempt    
    }

#Backup
    vrrp_instance VI_1 {
        state BACKUP
        priority 100
        nopreempt
    }

8.keepalive高可用與Nginx集成

  • PS: 有Nginx負載均衡,並不一定必須要裝Keepalived
  • Nginx負載均衡實現高可用,需要借助Keepalived地址漂移功能
  • 比如:第一次 keepalived綁定在Master上, 通過vip地址訪問到這台master上的所有服務
  • 因為所有的服務都是 listen port;

9.keepalive問題

keepalive高可用故障腦裂
由於某些原因,導致兩台keepalive高可用服務器在指定時間內,無法檢測到對方的心跳消息,各自取得資源及服務的所有權,而此時的兩台高可用服務器又都還活着。
a.服務器網線松動等網絡故障
b.服務器硬件故障發生損壞現象而奔潰
c.主備服務器都開啟了firewalld防火牆
解決方法:

  • 如果Nginx宕機, 會導致用戶請求失敗, 但Keepalived並不會進行地址漂移
  • 所以需要編寫一個腳本檢測Nginx的存活狀態, 如果不存活則kill nginx和keepalived
# 腳本如下
[root@lb01 ~]# cat  /server/scripts/check_www.sh
#!/bin/sh
nginxpid=$(ps -C nginx --no-header|wc -l)
#1.判斷Nginx是否存活,如果不存活則嘗試啟動Nginx
if [ $nginxpid -eq 0 ];then
    systemctl start nginx
    sleep 3
    #2.等待3秒后再次獲取一次Nginx狀態
    nginxpid=$(ps -C nginx --no-header|wc -l) 
    #3.再次進行判斷, 如Nginx還不存活則停止Keepalived,讓地址進行漂移,並退出腳本  
    if [ $nginxpid -eq 0 ];then
        systemctl stop keepalived
   fi
fi
[root@lb01 ~]# chmod +x /server/scripts/check_www.sh

配置keepalived使用

[root@lb01 ~]# cat /etc/keepalived/keepalived.conf global_defs { router_id lb01 } #定義腳本所在的位置,以及執行時間 vrrp_script check_www { script "/server/scripts/check_www.sh" interval 5 } vrrp_instance VI_1 { state BACKUP priority 150 nopreempt interface eth0 virtual_router_id 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.0.0.3 } #調用腳本 track_script { check_www } }


作者:張福帥19
鏈接:https://www.jianshu.com/p/ea412143e017
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

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



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