Keepalive介紹及工作原理


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

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

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

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
    }
}

10.如何高可用集群雙主配置

###編寫lb01服務器keepalived配置文件
[root@lb01 ~]# cat /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
     global_defs {
       router_id lb01
    }
    
    
    vrrp_instance shuai {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
         10.0.0.3/24
        }
    }
    vrrp_instance ashuai {
        state BACKUP
        interface eth0
        virtual_router_id 52
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
         10.0.0.4/24
        }
    }
        
###編寫lb02服務器keepalived配置文件    
    ! Configuration File for keepalived
    global_defs {
       router_id lb02
    }
    
    vrrp_instance shuai {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.3/24
        }
    }
    vrrp_instance ashuai {
        state MASTER
        interface eth0
        virtual_router_id 52
        priority 150
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            10.0.0.4/24
        }
    }

11.高可用服務安全訪問配置(負載均衡服務)

1.修改nginx負載均衡文件

    upstream oldboy {
       server 10.0.0.7:80;
       server 10.0.0.8:80;
       server 10.0.0.9:80;
    }
    server {
        listen       10.0.0.3:80;
        server_name  www.oldboy.com;
        location / {
           proxy_pass http://oldboy;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
           proxy_next_upstream error timeout http_404 http_502 http_403;
        }
    }
    server {
        listen       10.0.0.4:80;
        server_name  bbs.oldboy.com;
        location / {
           proxy_pass http://oldboy;
           proxy_set_header Host $host;
           proxy_set_header X-Forwarded-For $remote_addr;
        }
    }

2.修改內核文件

異常問題:
    01. 如何設置監聽網卡上沒有的地址
    解決: 需要修改內核信息
    echo 'net.ipv4.ip_nonlocal_bind = 1' >>/etc/sysctl.conf
        sysctl -p 

3.重啟nginx負載均衡服務

systemctl restart nginx


免責聲明!

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



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