Keepalived.conf解析
三大部分: 全局定義塊、VRRP 實例定義塊及虛擬服務器定義塊
實例剖析
! Configuration File for keepalived global_defs { notification_email { lisongtao@ihuilian.com #acassen@firewall.loc #failover@firewall.loc #sysadmin@firewall.loc } notification_email_from sa@ihuilian.com smtp_server smtp.exmail.qq.com smtp_connect_timeout 30 router_id LVS_DEVEL ##自定義的字符串 } ###在哪里找到自定義配置規范 #vrrp_script chk_mantaince_down { #定義可以手動控制狀態的腳本 # script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" vrrp_script chk_nginx_down { #定義可以手動控制狀態的腳本 #script "killall -0 nginx" #script "killall -0 nginx && exit 0 || exit 1" script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" interval 1 #檢查時間間隔 weight - 13 #如果檢測失敗,優先級-13 } vrrp_instance VI_1 { state MASTER ###MASTER/BACKUP必須大寫,且當MASTER恢復時,會自動恢復為MASTER狀態 interface eth0 virtual_router_id 51 ###同一個vrrp使用相同的vrrp,整個vrrp內唯一 priority 100 ###數字越大優先級越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O< advert_int 1 ###Timeout時長秒為單位 authentication { ###MASTER和SLAVE密碼相同方可正常通信 auth_type pass auth_pass huilian } virtual_ipaddress { ###每個地址占一行,不能指定子網掩碼,與lvs客戶端設定的VIP一致 192.168.65.200 #192.168.200.17 #192.168.200.18 } ###跟global_defs中定義的vrrp_script chk_mantaince_down對應 track_script { #引用自定義的腳本 chk_nginx_down } #notify_master "/etc/keepalived/notify.sh master" #notify_backup "/etc/keepalived/notify.sh backup" #notify_fault "/etc/keepalived/notify.sh fault" } #virtual_server 192.168.65.200 36379{ ###IP和vrrp_instance中定義的vip需一致,IP PORT virtual_server 192.168.65.200 80{ ###IP和vrrp_instance中定義的vip需一致,IP PORT delay_loop 6 ###健康檢查時間/秒 #lb_algo wlc ###負載均衡調度算法,常用rr/wlc lb_algo rr ###負載均衡調度算法,常用rr/wlc lb_kind DR ###負載均衡轉發規則, DR,NAT,TUN3 nat_mask 255.255.255.0 #persistence_timeout 50 ###會話保持時長 protocol TCP ###協議類型轉發 #virtualhost www.a.com real_server 192.168.65.128 80{ ###real server IP PORT weight 33 ###數值越大,權重越大 TCP_CHECK { connect_timeout 1 #表示3秒無響應,則超時 nb_get_retry 3 #表示重試次數 delay_before_retry 3 #表示重試間隔 } } real_server 192.168.65.129 80{ weight 22 } real_server 192.168.65.130 80{ weight 11 } }
自定義腳本功能測試
配置keepalived.conf
###分發keepalived.conf到slave
# ansible keepalived -m copy -a 'src=/etc/keepalived/keepalived.conf dest=/etc/keepalived'
修改優化級和狀態
! Configuration File for keepalived global_defs { notification_email { lisongtao@ihuilian.com #acassen@firewall.loc #failover@firewall.loc #sysadmin@firewall.loc } notification_email_from sa@ihuilian.com smtp_server smtp.exmail.qq.com smtp_connect_timeout 30 router_id LVS_DEVEL ##自定義的字符串 } ###在哪里找到自定義配置規范 #vrrp_script chk_mantaince_down { #定義可以手動控制狀態的腳本 # script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" vrrp_script chk_nginx_down { #定義可以手動控制狀態的腳本 #script "killall -0 nginx" #script "killall -0 nginx && exit 0 || exit 1" script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" interval 1 #檢查時間間隔 weight - 13 #如果檢測失敗,優先級-13 } vrrp_instance VI_1 { state SLAVE ###MASTER/BACKUP必須大寫,且當MASTER恢復時,會自動恢復為MASTER狀態 interface eth1 virtual_router_id 51 ###同一個vrrp使用相同的vrrp,整個vrrp內唯一 priority 99 ###數字越大優先級越高,且要MASTER要高于SLAVE,和sentinel恰好相反...>O< advert_int 1 ###Timeout時長秒為單位 authentication { ###MASTER和SLAVE密碼相同方可正常通信 auth_type pass auth_pass huilian } virtual_ipaddress { ###每個地址占一行,不能指定子網掩碼,與lvs客戶端設定的VIP一致 192.168.65.200 #192.168.200.17 #192.168.200.18 } ###跟global_defs中定義的vrrp_script chk_mantaince_down對應 track_script { #引用定義的腳本 chk_nginx_down } #notify_master "/etc/keepalived/notify.sh master" #notify_backup "/etc/keepalived/notify.sh backup" #notify_fault "/etc/keepalived/notify.sh fault" } #virtual_server 192.168.65.200 36379{ ###IP和vrrp_instance中定義的vip需一致,IP PORT virtual_server 192.168.65.200 80{ ###IP和vrrp_instance中定義的vip需一致,IP PORT delay_loop 6 ###健康檢查時間/秒 #lb_algo wlc ###負載均衡調度算法,常用rr/wlc lb_algo rr ###負載均衡調度算法,常用rr/wlc lb_kind DR ###負載均衡轉發規則, DR,NAT,TUN3 nat_mask 255.255.255.0 #persistence_timeout 50 ###會話保持時長 protocol TCP ###協議類型轉發 #virtualhost www.a.com real_server 192.168.65.128 80{ ###real server IP PORT weight 33 ###數值越大,權重越大 TCP_CHECK { connect_timeout 1 #表示3秒無響應,則超時 nb_get_retry 3 #表示重試次數 delay_before_retry 3 #表示重試間隔 } } real_server 192.168.65.129 80{ weight 22 } real_server 192.168.65.130 80{ weight 11 } }
重啟slave和master的keepalived
# ansible keepalived -m command -a "service keepalived restart"
Touch down文件測試
/var/log/message日志信息
Jan 27 19:40:03 Mrds Keepalived_vrrp[6580]: VRRP_Script(chk_nginx_down) failed Jan 27 19:40:03 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Entering FAULT STATE Jan 27 19:40:03 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Now in FAULT state
VIP信息
Rm down文件測試
/var/log/message日志信息
Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Script(chk_nginx_down) succeeded Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) prio is higher than received advert Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Transition to MASTER STATE Jan 27 19:52:29 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Received lower prio advert, forcing new election Jan 27 19:52:30 Mrds Keepalived_vrrp[6580]: VRRP_Instance(VI_1) Entering MASTER STATE
VIP信息
改造為檢測nginx進程
修改master配置
Stop nginx進程
/var/log/message日志信息 serJan 27 20:06:05 Mrds Keepalived_healthcheckers[9992]: TCP connection to [192.168.65.128]:80 failed !!! Jan 27 20:06:05 Mrds Keepalived_healthcheckers[9992]: Removing service [192.168.65.128]:80 from VS [192.168.65.200]:80 Jan 27 20:06:05 Mrds Keepalived_healthcheckers[9992]: Remote SMTP server [0.0.0.0]:25 connected. Jan 27 20:06:05 Mrds Keepalived_vrrp[9993]: VRRP_Script(chk_nginx_down) failed Jan 27 20:06:06 Mrds Keepalived_healthcheckers[9992]: SMTP alert successfully sent. Jan 27 20:06:06 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Entering FAULT STATE Jan 27 20:06:06 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Now in FAULT state VIP信息 VIP資源被搶占 |
Start nginx進程
/var/log/message日志信息 Jan 27 20:08:55 Mrds Keepalived_vrrp[9993]: VRRP_Script(chk_nginx_down) succeeded Jan 27 20:08:56 Mrds Keepalived_vrrp[9993]: Kernel is reporting: interface eth0 UP Jan 27 20:08:56 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Transition to MASTER STATE Jan 27 20:08:57 Mrds Keepalived_vrrp[9993]: VRRP_Instance(VI_1) Entering MASTER STATE Jan 27 20:08:59 Mrds Keepalived_healthcheckers[9992]: TCP connection to [192.168.65.128]:80 success. Jan 27 20:08:59 Mrds Keepalived_healthcheckers[9992]: Adding service [192.168.65.128]:80 to VS [192.168.65.200]:80 Jan 27 20:08:59 Mrds Keepalived_healthcheckers[9992]: Remote SMTP server [0.0.0.0]:25 connected. Jan 27 20:09:00 Mrds Keepalived_healthcheckers[9992]: SMTP alert successfully sent. VIP信息 因MASTER優化級最高,VIP資源被搶占回來 |
MASTER和1臺slave異常,最后一臺slave服務器是否還正常
但會發現lvs池是異常的~~~ 129的nginx應該是異常的.但lvs池沒有被剔除
關閉slave的keepalived嘗試
關閉Srds1上的keepalived后,master被正常切換到Srds2上,看來slave和master的功能還是有一定的區別的。
Master可以自動發現自己后端服務的狀態,并時刻保持lvs池的最新,但slave是沒有這個功能或者沒有這個權限的!!。
看來要想完全實現后端服務的高可用要其它方式來實現這個功能的。
原創文章,作者:stanley,如若轉載,請注明出處:http://www.www58058.com/3206