keepalived+nginx高可用配置
阿新 • • 發佈:2020-12-02
首先兩臺伺服器都安裝keepalived
yum install keepalived
修改keepalived配置檔案
vim /etc/keepalived/keepalived.conf
主伺服器配置檔案修改為
vrrp_instance VI_1 { #定義VRRP熱備例項 state MASTER #熱備狀態,MASTER表示主伺服器 interface eth0 #承載VIP地址的物理介面 virtual_router_id 1 #虛擬路由ID號,每個熱備組保持一致 priority100 #優先順序,數值越大優先順序越高 advert_int 1 #通告間隔秒數 authentication { #認證資訊,每個熱備組保持一致 auth_type PASS #認證型別 auth_pass 123456 #密碼字串 } virtual_ipaddress { #指定VIP漂移地址,可以寫多個 192.168.10.20 } }
從伺服器配置檔案修改為
vrrp_instance VI_1 { state BACKUP #改這裡interface eth0 virtual_router_id 1 priority 10 #改這裡,這裡要改成比主伺服器值要小 advert_int 1 authentication { auth_type PASS auth_pass 123456 } virtual_ipaddress { 192.168.10.20 } }
兩臺都開啟keepalived服務
/bin/systemctl stop keepalived.service
以下是檢查是否成功了,執行
ip a
如果成功了,主伺服器有虛似ip:192.168.10.20,從伺服器沒有虛擬ip。把主伺服器keepalived關閉掉,從伺服器有虛擬ip了,主伺服器沒有了,如果主伺服器重新啟動,主服器這時又有虛擬ip了,從伺服器沒有虛擬ip了
注意:
如果出現了主從伺服器都有虛擬ip,那麼一般是腦裂了,
比如阿里雲的伺服器都會有這情況,vrrp沒有開放,不支援廣播和組播。需要將配置檔案中的通訊方式修改為單播通訊。
以下例子主伺服器內網ip為:172.18.40.183,從伺服器內網ip為:172.18.40.182,虛擬ip定為:172.18.40.185
主伺服器配置檔案改為:
vrrp_script chk_nginx { #檢測nginx的執行狀態 script "/etc/keepalived/nginx_check.sh" #指令碼路徑 interval 2 #探測間隔時間 weight -20 #如果條件滿足,權重-20 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 unicast_src_ip 172.18.40.183 unicast_peer { 172.18.40.182 #對端IP地址,此地址一定不能忘記 } advert_int 1 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { #將track_script塊加入instance配置塊 chk_nginx #執行Nginx檢測 } virtual_ipaddress { 172.18.40.185/32 } }
從伺服器配置改為:
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 unicast_src_ip 172.18.40.182 unicast_peer { 172.18.40.183 #對端IP地址,此地址一定不能忘記 } priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.18.40.185/32 } }
這裡增加了nginx檢查
vim /etc/keepalived/nginx_check.sh
sh指令碼的內容為:
#!/bin/bash if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then killall keepalived fi
給它附執行許可權:
chmod +x /etc/keepalived/nginx_check.sh
單通道配置檔案最關鍵設定的兩個引數為:
unicast_src_ip,
unicast_peer
檢試下是否成功
主伺服器圖
從伺服器圖
當主伺服器nginx掛掉之後,sh指令碼會執行殺掉keepalived命令,從而虛擬ip為飄到從伺服器上面。
特別說明一下,如果是阿里雲伺服器,可以用阿里雲自帶的: