keepalived實現nginx的高可用-實戰可用

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.confslave

# ansible keepalived -m copy  -a 'src=/etc/keepalived/keepalived.conf dest=/etc/keepalived'

01.png

修改優化級和狀態

! 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
    }
}

重啟slavemasterkeepalived

# ansible keepalived -m command -a "service keepalived restart"

02.png

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

keepalived實現nginx的高可用-實戰可用

VIP信息

keepalived實現nginx的高可用-實戰可用

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

keepalived實現nginx的高可用-實戰可用

VIP信息

keepalived實現nginx的高可用-實戰可用

改造為檢測nginx進程


修改master配置

keepalived實現nginx的高可用-實戰可用

Stop nginx進程

keepalived實現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

09.png

VIP信息

VIP資源被搶占

10.png

Start nginx進程

11.png

/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資源被搶占回來

12.png

MASTER1slave異常,最后一臺slave服務器是否還正常

keepalived實現nginx的高可用-實戰可用

但會發現lvs池是異常的~~~ 129nginx應該是異常的.lvs池沒有被剔除

keepalived實現nginx的高可用-實戰可用

關閉slavekeepalived嘗試

關閉Srds1上的keepalived,master被正常切換到Srds2,看來slavemaster的功能還是有一定的區別的。

Master可以自動發現自己后端服務的狀態,并時刻保持lvs池的最新,slave是沒有這個功能或者沒有這個權限的!!。

看來要想完全實現后端服務的高可用要其它方式來實現這個功能的。

15.png

原創文章,作者:stanley,如若轉載,請注明出處:http://www.www58058.com/3206

(0)
stanleystanley
上一篇 2015-04-14
下一篇 2015-04-14

相關推薦

  • 第三周作業

    1、列出當前系統上所有已經登錄的用戶的用戶名,注意:同一個用戶登錄多次,則只顯示一次即可。       首先用who命令列出當前系統上所有登陸用戶,然后使用cut命令以空格為分隔符取出第一列,再使用sort排序并去除重復的行        …

    Linux干貨 2017-01-18
  • 8-15作業

    1、寫個腳本,實現以下三角形    *   ***  ***** ******* #!/bin/bash # read -p " input a number : " n for l&nbs…

    Linux干貨 2016-08-21
  • 【社招】【小米-北京】運維開發工程師

    【社招】【小米-北京】運維開發工程師 【工作地點】北京市海淀區安寧莊東路72號科利源大廈 【薪酬福利】15k-30k 期權獎勵、六險一金、水果花茶、班車、健身房、食堂 【投遞方式】郵件主題“崗位+姓名”發送至lipengcheng3@xiaomi.com   崗位職責: 提高系統運維的自動化,主要包括運維平臺、PaaS、監控系統,自動化部…

    Linux干貨 2017-07-28
  • linux基礎1

    linux基礎

    Linux干貨 2018-03-08
  • AIX 6.1 硬件基本管理

    查看整體的硬件信息:          # prtconf #將所有系統信息輸出到屏幕上顯示          # lsdev -C #查看硬件設備信息及其工作狀態 注:硬件的設備通常為2 種狀態,"availiable"表示設備可用,de…

    Linux干貨 2015-10-18
  • N25-第二周博客作業

    1.linux上的文件管理命令:   cp命令:copy                 源文件;目標文件;  單源復制:cp [option]… [-T]  SOURCE DEST       &…

    Linux干貨 2016-12-12
欧美性久久久久