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


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

包括阿里雲在內的很多雲環境,因為不支持浮動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來實現雙主。或者兩台服務器同時為兩個業務服務,避免資源浪費。同時能夠做到主備


文件下載地址


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM