阿里雲下配置keepalive,利用HAVIP實現HA

注:這篇文章參考網絡,有些稱呼都變了,好比阿里雲上的如今是彈性ipnginx

包括阿里雲在內的不少雲環境,由於不支持浮動IP廣受詬病。目前阿里雲在VPC網絡下發布了HAVIP,可以實現arp宣告IP。這樣也就讓本身搭建HA成爲了可能,有幸拿到了內測權限體驗了一下。(classical網絡依然不支持)
測試環境:
1
2
3
4
5
6	VPC:192.168.1.0/24
ECS:
nginx1:192.168.1.1
nginx2:192.168.1.2
HAVIP:192.168.1.3
綁定到havip的公網EIP:121.43.187.37
配置完畢後的拓撲以下:

環境搭建完畢後,登錄主備ECS服務器,分別配置nginx+keepalived
[root@Nginx1 ~]# yum install nginx keepalived –y
MASTER服務器(nginx1)配置文件/etc/keepalived/keepalived.conf內容以及解釋以下:
! Configuration File for keepalived 
#配置global_defs,主要用於標示機器,以及故障時通知
global_defs {   
   router_id Nginx1 
}
#配置vrrp_script,主要用於健康檢查,以及檢查失敗後執行的動做。
vrrp_script chk_nginx { 
#健康檢查腳本,當腳本返回值不爲0時認爲失敗
    script "/etc/keepalived/ck_ng.sh" 
#檢查頻率,如下配置每2秒檢查1次
    interval 2 
#當檢查失敗後,將vrrp_instance的priority減少5
    weight -5 
#連續監測失敗3次,才認爲真的健康檢查失敗。並調整優先級
    fall 3 
#連續監測2次成功,就認爲成功。但不調整優先級
    rise 2 
}
 
#定義對外提供服務的VIP vrrp_instance配置
vrrp_instance VI_1 { 
#指定vrrp_instance的初始狀態,是MASTER仍是BackUP主要仍是看優先級。
    state MASTER 
#指定vrrp_instance綁定的網卡,最終會經過指定的網卡宣告VIP
    interface eth0 
#發送心跳包的源IP,可以使用綁定的網卡IP,也能夠使用本服務器上的其餘IP
    unicast_src_ip 192.168.1.1 
#至關於VRID,用於在一個網內區分組播,須要組播域內內惟一。
    virtual_router_id 55 
#本機的優先級,VRID相同的機器中,優先級最高的會被選舉爲MASTER
    priority 101 
#心跳間隔,下面配置,MASTER會每隔1秒發送一個報文高職組內其餘機器,本身還活着。
    advert_int 1 
#定義主從的驗證方式以及密碼,通常使用PASS(最長8位,超過了只會識別前8位做爲密碼)
    authentication { 
        auth_type PASS 
        auth_pass aliyun 
    } 
#VIP,在阿里雲下就是剛纔建立的HAVIP
    virtual_ipaddress { 
    192.168.1.3 
        } 
#本vrrp_instance所引用的腳本配置,名稱就是vrrp_script 定義的容器名
  track_script { 
       chk_nginx
    } 
}
BACKUP服務器(nginx2)的配置須要修改:
state MASTER改成  state BACKUP
unicast_src_ip 192.168.1.1改成backup服務器實際的IP unicast_src_ip 192.168.1.2
priority 101改小一些,好比    priority 100

其它保持一致便可

爲了實現nginx服務異常的時候可以自動切換,須要本身寫一個腳本,腳本沒有硬性的要求,可以實現目標便可,這裏 監控nginx進程數爲例:


vim /etc/keepalived/ck_ng.sh
#!/bin/bash
#檢查nginx進程是否存在
count=$(ps -C nginx --no-heading|wc -l)
#進程數等於0的時候
if [ "${count}" = "0" ]; then
#嘗試啓動一次nginx,中止2秒後再次檢測
    service nginx start
    sleep 2
   count=$(ps -C nginx --no-heading|wc -l)
    if [ "${count}" = "0" ]; then
#若是啓動沒成功,就殺掉keepalive觸發主備切換
        /etc/init.d/keepalived stop
    fi
fi
#增長腳本的執行權限
chmod +x vim /etc/keepalived/ck_ng.sh


#分別啓動nginx1和nginx2的nginx&keepalived服務:
[root@Nginx1 ~]# /etc/init.d/nginx start;/etc/init.d/keepalived start
Starting nginx:                                            [  OK  ]
Starting keepalived:                                       [  OK  ]

測試:
NGINX1/192.168.1.1的priority 爲101,NGINX2/192.168.1.2的priority爲100,這時候訪問HAVIP綁定的EIP:http://121.43.187.37/能夠看到訪問到了服務器NGINX1, 
到HAVIP控制檯查看,192.168.1.1的服務器爲主服務器
這時候咱們KILL掉nginx1服務器的nginx服務
查看日誌,發送了移除VIP的報文:

Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) sending 0 priority
 Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_vrrp[25019]: VRRP_Instance(VI_1) removing protocol VIPs.
Oct 23 17:20:01 iZ239aqzdi7Z Keepalived_healthcheckers[25018]: Netlink reflector reports IP 192.168.1.3 removed

這時候訪問http://121.43.187.37/,能夠看到訪問自動切換到了NGINX2
到HAVIP控制檯查看,192.168.1.2的服務器爲主服務器
從新啓動nginx1的nginx和keepalive服務
查看日誌能夠看到keepalive從新發送了IP宣告的報文
Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Entering MASTER STATE
 Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) setting protocol VIPs.
Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3
Oct 23 17:22:14 iZ239aqzdi7Z Keepalived_healthcheckers[25609]: Netlink reflector reports IP 192.168.1.3 added
Oct 23 17:22:19 iZ239aqzdi7Z Keepalived_vrrp[25610]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.1.3

從新訪問http://121.43.187.37/測試,從新訪問到了服務器NGINX1,到HAVIP控制檯查看,192.168.1.1的服務器從新奪回了控制權,成爲了爲主服務器
這樣就實現了阿里雲環境下的HA切換。
實際測試,阿里雲的多個HAVIP能夠綁定到一樣的兩臺機器,能夠配置多組vrrp_instance來實現雙主。或者兩臺服務器同時爲兩個業務服務,避免資源浪費。同時可以作到主備
相關文章
相關標籤/搜索