1. 程式人生 > 其它 >nginx keepalived高可用(私網)

nginx keepalived高可用(私網)

keepalived高可用(私網)

部署在整個叢集中的一個高可用軟體,作用是建立一個VIP(虛擬IP),在整個叢集中有且只有一個機器上生成VIP,當這臺機器出現問題時,keepalived將自動將VIP切換至其他的某一臺伺服器上。

一、部署keepalived:

1.server1、server2安裝keepalived

yum install keepalived -y

2.修改配置檔案。

吧原來的清空了,然後在吧這個複製過去修改 server1: #全域性配置 global_defs { #身份識別(全域性唯一) router_id lb01 } # 配置VRRP協議 vrrp_instance VI_1 { # 狀態,MASTER和BACKUP(這裡僅僅是一個標記,正真確認VIP的是權重) state BACKUP nopreempt # 繫結網絡卡 interface eth0 # 虛擬路由標示,可以理解為分組 virtual_router_id 50 # 優先順序(數字越大,權重越大) priority 100 # 監測心跳間隔時間 advert_int 1 # 配置認證 authentication { # 認證型別 auth_type PASS # 認證的密碼 auth_pass 1111 } # 設定VIP virtual_ipaddress { # 虛擬的VIP地址 192.168.159.33 } } server2:
#全域性配置 global_defs { #身份識別(全域性唯一) router_id lb02 } # 配置VRRP協議 vrrp_instance VI_1 { # 狀態,MASTER和BACKUP(這裡僅僅是一個標記,正真確認VIP的是權重) state BACKUP nopreempt # 繫結網絡卡 interface eth0 # 虛擬路由標示,可以理解為分組 virtual_router_id 50 # 優先順序(數字越大,權重越大) priority 90 # 監測心跳間隔時間 advert_int 1 # 配置認證 authentication { # 認證型別 auth_type PASS # 認證的密碼 auth_pass 1111 } # 設定VIP virtual_ipaddress { # 虛擬的VIP地址 192.168.159.33 } } 注意:vip地址必須和繫結網絡卡地址一個網段

3.重啟測試

server1、server2: systemctlrestartkeepalived 用ip a檢視ip地址。

二、搶佔士和非搶佔式

state BACKUP(所有的機器全部設定成BACKUP) #開啟非搶佔式 nopreempt 解決了那些問題: 當master宕機切換到backup的時候會短暫一小段時間無法訪問,當master恢復服務時候切換回來又宕機一小段時間,如果全部設定問backup那麼就沒有master切換過去除非宕機要不然不會切換回來了

三、高可用時如果出現腦裂問題時怎麼解決

在配置檔案新增

1、通過一個指令碼判斷

#每5秒執行一次指令碼,指令碼執行內容不能超過5秒,否則會中斷再次重新執行指令碼 vrrp_script check_web { # 指定指令碼路徑 script "/etc/keepalived/check.sh" # 5秒鐘執行一次 interval 5 } #呼叫計劃的指令碼 track_script { check_web } 例: #全域性配置
global_defs { #身份識別(全域性唯一) router_id lb01 } #每5秒執行一次指令碼,指令碼執行內容不能超過5秒,否則會中斷再次重新執行指令碼 vrrp_script check_web { # 指定指令碼路徑 script "/etc/keepalived/check.sh" # 5秒鐘執行一次 interval 5 } # 配置VRRP協議 vrrp_instance VI_1 { # 狀態,MASTER和BACKUP(這裡僅僅是一個標記,正真確認VIP的是權重) state BACKUP nopreempt # 繫結網絡卡 interface eth0 # 虛擬路由標示,可以理解為分組 virtual_router_id 50 # 優先順序(數字越大,權重越大) priority 100 # 監測心跳間隔時間 advert_int 1 # 配置認證 authentication { # 認證型別 auth_type PASS # 認證的密碼 auth_pass 1111 } # 設定VIP virtual_ipaddress { # 虛擬的VIP地址 192.168.159.33 } #呼叫計劃的指令碼 track_script { check_web } } 指令碼: [root@lb01 ~]# cat /etc/keepalived/check.sh #!/bin/bash #1.判斷埠 #2.通過程序的方式 ps -aux | grep [n]ginx if [ $? -ne 0 ] ; then /usr/local/nginx/sbin/nginx sleep 3; ps -aux | grep [n]ginx if [ $? -ne 0 ] ; then systemctl stop keepalived fi fi