Keepalived實現高可用Nginx
阿新 • • 發佈:2018-12-15
Keepalived是一個高效能的伺服器高可用或熱備解決方案,Keepalived主要用來防止伺服器單點故障發生的問題,可以通過其與Nginix的配合來實現Web服務端的高可用。
關於安裝Keepalived我這裡就不介紹了,網上的一大堆,但是注意的是,一般我們會將Keepalived安裝成系統服務。
下面最主要是keepalived的配置檔案和檢測nginx的指令碼檔案。我們現在做兩個Nginx的高可用。
下面是Master的Keepalived.conf:
! Configuration File for keepalived global_defs { router_id hyf112 ##標識節點的字串,通常為hostname } ## keepalived 會定時執行指令碼並且對指令碼的執行結果進行分析,動態調整vrrp_instance的優先順序。這裡的權重weight 是與下面的優先順序priority有關,如果執行了一次檢查指令碼成功,則權重會-20,也就是由100 - 20 變成了80,Master 的優先順序為80 就低於了Backup的優先順序90,那麼會進行自動的主備切換。 如果指令碼執行結果為0並且weight配置的值大於0,則優先順序會相應增加。 如果指令碼執行結果不為0 並且weight配置的值小於0,則優先順序會相應減少。 vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" ##執行指令碼位置 interval 2 ##檢測時間間隔 weight -20 ## 如果條件成立則權重減20(-20) } ## 定義虛擬路由 VI_1為自定義標識。 vrrp_instance VI_1 { state MASTER ## 主節點為MASTER,備份節點為BACKUP ## 繫結虛擬IP的網路介面(網絡卡),與本機IP地址所在的網路介面相同(我這裡是eth6) interface eth6 virtual_router_id 112## 虛擬路由ID號(主備要一致) mcast_src_ip 192.168.1.112 ## 本機ip地址 priority 100 ##優先順序配置(0-254的值) Nopreempt ## advert_int 1 ## 組播資訊傳送間隔,倆個節點必須配置一致,預設1s authentication { auth_type PASS auth_pass hyf## 真實生產環境下對密碼進行匹配 } track_script { chk_nginx } virtual_ipaddress { 192.168.1.110 ## 虛擬ip(vip),可以換行指定多個 } }
Backup節點的keepalived.conf:
! Configuration File for keepalived global_defs { router_id hyf113 } vrrp_script chk_nginx { script "/etc/keepalived/nginx_check.sh" interval 2 weight -20 } vrrp_instance VI_1 { state BACKUP interface eth7 virtual_router_id 112 mcast_src_ip 192.168.1.113 priority 90 ##優先順序配置 advert_int 1 authentication { auth_type PASS auth_pass hyf } track_script { chk_nginx } virtual_ipaddress { 192.168.1.110 } }
檢測Nginx指令碼(主備一樣):
1、先通過命令看nginx是否在啟動中,
2、如果沒啟動就命令啟動nginx,然後休眠2秒讓足夠時間啟動nginx
3、再次通過命令檢視nginx是否已經啟動,如果還是沒啟動就直接kill掉keepalived
#!/bin/sh A = `ps -C nginx --no-header | wc -l` if [ $A -eq 0];then /usr/local/nginx/sbin/nginx sleep 2 if [`ps -C nginx --no-header | wc -l`];then killall keepalived fi fi
測試:首先啟動兩臺伺服器的nginx和keepalived
1、看兩臺機器的ip a命令下誰有虛擬ip。很明顯112的權重比113的權重大,虛擬ip必須在112機子上。
瀏覽器訪問虛擬IP192.168.1.110:
2、停掉主節點112的keepalived,看是否會切換到113.
先用ip a命令看是否虛擬IP移到113機子上:
繼續訪問瀏覽器看看:
3、我們假如重新啟動112機子的keepalived服務,可以發現nginx也被一起啟動了,而且虛擬ip肯定是重新移到112機子上,因為112的權重是100,而113是90.
訪問瀏覽器:
4、我們可以測試在nginx出現問題的情況下,實現切換,這個時候我們只需要把nginx的配置檔案進行修改,讓其變得不可用,然後強殺掉nginx程序即可,發現也會實現自動切換伺服器節點。