keepalived+haproxy搭建高可用服务

在此之前,我已经用docker部署了mysql、mycat、haproxy。现在要支持高可用,还需要部署keepalived。如果也把keepalived部署到docker容器里,那么配置的虚拟vip就是容器里的ip,而不是宿主机上的,是无法通过外网访问的。所以我直接在宿主机上部署keepalived服务。

1、安装keepalived服务。

apt-get install keepalived -y

2、keepalived默认配置文件是/etc/keepalived/keepalived.conf,但该文件不存在,需要新建。

vim /etc/keepalived/keepalived.conf

内容如下:

#keepalived配置文件
global_defs {
    router_id NodeA                 #路由ID, 主备的ID不能相同
    notification_email {
        xxx@xxx.com
    }
    notification_email_from xxx@xxx.com
    smtp_server 127.0.0.1
    smtp_connect_timeout 30
    vrrp_skip_check_adv_addr
    #在keepalived的服务器上配合使用nginx或haproxy时,需要把这一项注掉,否则VIP ping不通,80端口也无法正常访问
    # vrrp_strict 
    vrrp_garp_interval 0
    vrrp_gna_interval 0
}

#自定义监控脚本
vrrp_script chk_haproxy {
        script "/etc/keepalived/check_haproxy.sh"
        interval 5
        weight -10
}

vrrp_instance VI_1 {
        state MASTER #Master为主机,备机设为BACKUP
        interface ens160        #指定网卡(宿主机真实网卡,ip a查看)
        virtual_router_id 1
        priority 100            #优先级,BACKUP机器上的优先级要小于这个值
        advert_int 1            #设置主备之间的检查时间,单位为s
        authentication {        #定义验证类型和密码,主备需相同
                auth_type PASS
                auth_pass ruijie
        }
        track_script {
                chk_haproxy     #ha存活监控脚本
        }
        virtual_ipaddress {     #VIP地址,可为多个。如果有需要可以部署双机双VIP
           192.168.10.199   #必须和宿主机在同一个网段,我的宿主机是192.168.10.46
        }
}

 

3、上面的配置内容中有个执行脚本,/etc/keepalived/check_haproxy.sh需要新建。

vim /etc/keepalived/check_haproxy.sh

内容如下:

#!/bin/bash


# 查看进程是否存在
exist=`docker inspect --format '{{.State.Running}}' haproxy`

if [ "${exist}" != "true" ]; then
    #service keepalived stop
    /etc/init.d/keepalived stop
fi
 

4、把check_haproxy.sh脚本文件设置为可执行。

chmod +x /etc/keepalived/check_haproxy.sh

5、service keepalived start

6、下面在另一台宿主机上也如此操作,不过这个是设为备机。

和之前的主机配置不同的地方只有两处,都是在keepalived.conf文件里。

router_id NodeB          #路由ID, 主备的ID不能相同

state BACKUP          #Master为主机,备机设为BACKUP

其他的都一样。

7、执行ip a命令,可以在主机上看到指定网卡ens160里面有了虚拟ip地址192.168.10.199

8、停止主机的keepalived服务,看看虚拟ip是否转移到了备机上了。部署没问题的话,会成功转移到备机。

9、重启主机的keepalived服务,看看虚拟ip是否回到了主机。

10、假设虚拟ip现在主机上,停掉主机上的haproxy,根据检测脚本,keepalived服务也会被停止,这时候虚拟ip应该又成功转移到备机了。

至此,高可用搭建完成。

 

上一篇:Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)


下一篇:在OPNsense防火墙上使用HAProxy和“Let’s Encrypt”来续订SSL证书