搭建高可用Kubernetes集群之Nginx+Keepalived集群搭建(二)


Keepalived簡介

說到Keepalived,首先介紹一下什么是VRRP(Virtual Router Redundancy Protocol)協議,即虛擬器路由冗余協議,是為了解決局域網內默認網關單點失效的問題。

VRRP 將局域網內的一組路由器組成一個虛擬路由器組,每個路由器都有自己的局域網地址, 根據設置的優先級最高決定那個是master路由器。然后網關地址賦給該主路由器, 該主路由器定時發送VRRP報文向虛擬路由器組公布健康狀況, 備份的路由器根據波紋判斷Master路由器是否工作正常,從而決定是否要接替它. VRRP說白了就是實現IP地址漂移的,是一種容錯協議。在下圖中,Router A(10.100.10.1)、Router B(10.100.10.2)和Router C(10.100.10.3) 組成一個虛擬路由器。各虛擬路由器都有自己的IP地址。局域網內的主機將虛擬路由器設置為缺省網關。 Router A、Router B和Router C中優先級最高的那台路由器作為Master路由器,比如A,承擔網關的功能。局域網內的服務 只知道這台主master路由器A的存在,將自己缺省路由下一跳地址設置為該路由的ip地址10.100.10.1, 其余兩台路由器作為Backup路由器。當master路由器出故障后, backup路由器會根據優先級重新選舉出新的master路由器承擔網關功能。Master路由器周期性地發送VRRP報文, 在虛擬路由器中公布其配置信息(優先級等)和工作狀況。Backup路由器通過接收到VRRP報文的情況來判斷Master路由器是否工作工常。


 
 

Keepalived是基於vrrp協議的一款高可用軟件,它是作用在主機上,而不是路由器上。Keepailived把多台主機虛擬在一起,提供一個虛擬IP對外提供服務,它擁有一台master服務器和多台backup服務器,當主服務器出現故障時,虛擬IP地址會自動漂移到備份服務器,實現故障轉移的高可用可能,即雙機熱備。注意:服務器的時間一定要一致。

Haproxy簡介

HAProxy 提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是開源、快速並且可靠的一種解決方案。HAProxy 特別適用於那些負載特大的 web 站點, 這些站點通常又需要會話保持或七層處理(和Nginx比較有優勢的地方)。HAProxy 運行在當前的硬件上,完全可以支持數以萬計的並發連接。並且它的運行模式使得它可以很簡單安全的整 合進您當前的架構中, 同時可以保護你的 web 服務器不被暴露到網絡上。

它在kubernetes高可用集群中的作用如下圖,負責接收各節點發送給API Server的消息,然后負載均衡到任一個主節點,保證了數據的一致性:

 

思路大致就是lb這個集群中vip地址所在的節點負責監聽kubernetes集群的各組件發送給api的消息,然后haproxy利用負載均衡實現消息分發到各個kubernetes的master節點,keepalived則保證這個接收請求的“大門“保持敞開。

備注:一般推薦使用Haproxy+Keepalived來實現LB集群,不過本人對Nginx比較熟悉,所以我選擇Nginx+Keepalived來實現LB集群。

環境規划

LB(Master)  192.168.248.202 Nginx Keepalived 
LB(Backup)  192.168.248.206 Nginx Keepalived nfs-server
VIP:192.168.248.209

安裝Keepalived

192.168.248.202服務器:

yum install -y keepalived
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {  #接收人郵箱地址
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc #發送人郵箱
   smtp_server 127.0.0.1 #郵箱服務器
   smtp_connect_timeout 30
   router_id 192.168.248.202  #主機名,每個節點不同
   vrrp_skip_check_adv_addr
   # vrrp_strict  注釋,不然嚴格遵守vvrp,訪問不了vip
   vrrp_garp_interval 0
   vrrp_gna_interval 0
}

#nginx配置 vrrp_script check_nginx { script "/etc/keepalived/check_nginx.sh" } vrrp_instance VI_1 { state MASTER #主服務器 interface ens32 #VIP 漂移到的網卡 virtual_router_id 51 #多個節點必須相同 priority 100 #優先級,備服務器比這個低 advert_int 1 #指定VRRP 心跳包通告間隔時間,默認1秒 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.248.209/26 #vip } }

192.168.248.206服務器:

yum install -y keepalived
vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id linsrv2
}

#nginx配置
vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
}

vrrp_instance VI_1 {
    state MASTER
    interface em1
    virtual_router_id 51
    priority 90  #優先級,備份服務器比這個低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.248.209/26
    }
}

然后在192.168.248.202、192.168.248.206節點執行下列命令啟動Keepalived

systemctl start keepalived
systemctl enable keepalived

現在你可以嘗試關閉主節點,看看vip是否漂移到其他節點去了,然后再打開主節點,vip又重新綁定到主節點的網卡上。

安裝Nginx

192.168.248.202、192.168.248.206服務器:

rpm -vih http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.16.0-1.el7.ngx.x86_64.rpm
vim /etc/nginx/nginx.conf
#配置文件最后一行追加如下內容
stream {

    log_format  main  '$remote_addr $upstream_addr - [$time_local] $status $upstream_bytes_sent';

    access_log  /var/log/nginx/k8s-access.log  main;

    upstream k8s-apiserver {
                server 192.168.248.161:6443; 
                server 192.168.248.162:6443;
            }

    server {
       listen 6443;
       proxy_pass k8s-apiserver;
    }
}

啟動nginx

systemctl start nginx
systemctl enable nginx

Nginx+keepalived高可用配置 

cat /etc/keepalived/check_nginx.sh 

#!/bin/bash
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
    exit 1
else
    exit 0
fi

 並將此腳本加入到keepalived配置文件中(上面keepalived配置文件已加入)

vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"
} 

至此Nginx+Keepalived搭建完畢。

參考:https://www.jianshu.com/p/7a41f0294f32


免責聲明!

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



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