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 21:07
下一篇 2015-04-14 23:36

相關推薦

  • LVS-fwm&persistence

    Evernote Export 1、LVS-fwm fwm:FireWall Mark        在netfilter上給報文打標記;mangle表;        ipvsadm -A|E -t|u|f service-address [-s scheduler] &nbs…

    Linux干貨 2016-12-01
  • 如何理解云計算中IaaS、PaaS和SaaS?很簡單,就像吃貨想吃披薩了…

                                                      &nbsp…

    2015-04-17
  • Linux命令幫助及history命令的使用

    1.Linux命令幫助的獲取詳解 在Linux中獲取命令幫助時,內部命令和外部命令的獲取方式是有區別的: 即  (1)內部命令:#help COMMAND ?            #man bash  (2)外部命令:<1> # COMMAND –hel…

    Linux干貨 2016-08-05
  • 加密·解密·PKI詳解及如何創建私有CA

    加密解密技術基礎: 安全的目標:   保密性:confidentiality 確保通信信息不被任何無關的人看到 完整性:integrity 實現通信雙方的報文不會產生信息丟失 數據完整性 系統完整性 可用性:availability 通信任何一方產生的信息應當對授權實體可用 攻擊類型:   威脅保密性的攻擊:竊聽、通信…

    2017-05-30
  • KVM部署及簡單使用

    KVM特點 KVM必須在具備Intel VT或AMD-V功能的x86平臺上運行。KVM包含一個為處理器提供底層虛擬化,可加載的核心模塊kvm.ko(kvm-intel.ko或kvm-AMD.ko)。使用一個經過修改的QEMU(qemu-kvm),作為虛擬機上層控制和界面。 由于KVM僅是一個簡單的虛擬化模塊,所以它的內存管理沒有自我實現,需借助于Linux內…

    Linux干貨 2016-02-14
  • 第一周 N28

    作業一

    2017-12-03
欧美性久久久久