原理:Keepalived並不跟nginx耦合,它倆徹底不是一家人可是keepalived提供一個機制:讓用戶自定義一個shell腳本去檢測用戶本身的程序,返回狀態給keepalived就能夠了nginx
#MASTER節點sql
global_defs {
}
vrrp_script chk_health { script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1" interval 1 #每隔1秒執行上述的腳本,去檢查用戶的程序ngnix weight -2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 1 priority 100 advert_int 2 authentication { auth_type PASS auth_pass 1111 } track_script { chk_health } virtual_ipaddress { 10.0.0.10/24 } notify_master "/usr/local/keepalived/sbin/notify.sh master" notify_backup "/usr/local/keepalived/sbin/notify.sh backup" notify_fault "/usr/local/keepalived/sbin/notify.sh fault" }
#添加切換通知腳本:vi /usr/local/keepalived/sbin/notify.shshell
#!/bin/bash
case "$1" in master) /usr/local/nginx/sbin/nginx exit 0 ;; backup) /usr/local/nginx/sbin/nginx -s stop /usr/local/nginx/sbin/nginx exit 0 ;; fault) /usr/local/nginx/sbin/nginx -s stop exit 0 ;; *) echo 'Usage: notify.sh {master|backup|fault}' exit 1 ;; esac
#添加執行權限:chmod +x /usr/local/keepalived/sbin/notify.sh後端
global_defs {
}
vrrp_script chk_health {
script "[[ `ps -ef | grep nginx | grep -v grep | wc -l` -ge 2 ]] && exit 0 || exit 1" interval 1 weight -2 } vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 1 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { chk_health } virtual_ipaddress { 10.0.0.10/24 } notify_master "/usr/local/keepalived/sbin/notify.sh master" notify_backup "/usr/local/keepalived/sbin/notify.sh backup" notify_fault "/usr/local/keepalived/sbin/notify.sh fault" }
#在第二臺機器上添加notify.sh腳本瀏覽器
#分別在兩臺機器上啓動keepalivedbash
service keepalived start服務器
chkconfig keepalived on網絡
1. 在兩臺(192.168.232.201和192.168.232.205) Lvs轉發服務器上安裝ipvsadm和Keepalived:yum -y install ipvsadm/keepalived oop
2. 修改配置文件:vi /etc/keepalived/keepalived.confurl
主機:Lvs+keepalived(MASTER)
global_defs { #指定keepalived在發生切換時須要發送email到的對象 notification_email { root@localhost #郵件接收者 } notification_email_from lvs@localhost #郵件發送者 smtp_server 127.0.0.1 #郵件服務器地址,如未安裝,使用本地 smtp_connect_timeout 30 router_id LVS_DEVEL } #IP漂移協議 vrrp_instance VI_1 { state MASTER #指定A節點爲主節點 備分機上設置爲BACKUP便可 interface eth0 #綁定IP漂移的網絡接口,在該接口上綁定VIP virtual_router_id 51 #VRRP組名,兩個節點的設置必須同樣 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.232.206/24 dev eth0 label eth0:1 #綁定VIP } } #只接收80端口過來的請求 virtual_server 192.168.232.206 80 { delay_loop 6 lb_algo wlc #輪循 lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP #RS服務器1 real_server 192.168.232.200 80 { weight 1 #健康檢查 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } #RS服務器2 real_server 192.168.232.204 80 { weight 1 #健康檢查 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
備機:Lvs+keepalived(BACKUP)
global_defs { #指定keepalived在發生切換時須要發送email到的對象 notification_email { root@localhost #郵件接收者 } notification_email_from lvs@localhost #郵件發送者 smtp_server 127.0.0.1 #郵件服務器地址,如未安裝,使用本地 smtp_connect_timeout 30 router_id LVS_DEVEL } #IP漂移協議 vrrp_instance VI_1 { state BACKUP #指定A節點爲主節點 備分機上設置爲BACKUP便可 interface eth0 #綁定IP漂移的網絡接口,在該接口上綁定VIP virtual_router_id 51 #VRRP組名,兩個節點的設置必須同樣 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.232.206/24 dev eth0 label eth0:1 #綁定VIP } } #只接收80端口過來的請求 virtual_server 192.168.232.206 80 { delay_loop 6 lb_algo wlc #輪循 lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP #RS服務器1 real_server 192.168.232.200 80 { weight 1 #健康檢查 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } #RS服務器2 real_server 192.168.232.204 80 { weight 1 #健康檢查 HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
3. 啓動兩臺Lvs轉發服務器的Keepalived服務:service keepalived start
4.經過ifconfig命令查看主從Lvs轉發服務器的網絡接口:
5.查看地址和端口號:ipvsadm -Ln
6.使用瀏覽器進行訪問:http://192.168.232.206:80/
7.主機掛掉:init 6