天天看點

阿裡雲下配置keepalive,利用HAVIP實作HA

包括阿裡雲在内的很多雲環境,因為不支援浮動ip廣受诟病。目前阿裡雲在vpc網絡下釋出了havip,能夠實作arp宣告ip。這樣也就讓自己搭建ha成為了可能,有幸拿到了内測權限體驗了一下。(classical網絡依然不支援)

測試環境:

阿裡雲下配置keepalive,利用HAVIP實作HA

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

配置完畢後的拓撲如下:

阿裡雲下配置keepalive,利用HAVIP實作HA

環境搭建完畢後,登陸主備ecs伺服器,分别配置nginx+keepalived

[root@nginx1 ~]# yum install nginx keepalived -y

master伺服器(nginx1)配置檔案/etc/keepalived/keepalived.conf内容以及解釋如下:

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

! 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,如下:

阿裡雲下配置keepalive,利用HAVIP實作HA

到havip控制台檢視,192.168.1.1的伺服器為主伺服器

阿裡雲下配置keepalive,利用HAVIP實作HA

這時候我們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

阿裡雲下配置keepalive,利用HAVIP實作HA

到havip控制台檢視,192.168.1.2的伺服器為主伺服器

阿裡雲下配置keepalive,利用HAVIP實作HA

重新啟動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的伺服器重新奪回了控制權,成為了為主伺服器

阿裡雲下配置keepalive,利用HAVIP實作HA

這樣就實作了阿裡雲環境下的ha切換。

實際測試,阿裡雲的多個havip可以綁定到同樣的兩台機器,可以配置多組vrrp_instance來實作雙主。或者兩台伺服器同時為兩個業務服務,避免資源浪費。同時能夠做到主備

繼續閱讀