RabbitMQ进阶——Haproxy配置负载均衡+Keepalived实现高可靠性

306 阅读3分钟

这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

前言

大家好,我是程序猿小白 GW_gw,很高兴能和大家一起学习进步。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要带大家了解如何在Centos7中使用Haproxy配置RabbitMQ的负载均衡,并且使用Keepalived来实现高可靠性。

使用Haproxy和Keepalive实现高可用和负载均衡

1. 安装并配置Haproxy

在各节点分别安装:

yum -y install haproxy

修该各节点的haproxy.cfg文件

vim /etc/haproxy/haproxy.cfg
​
在配置文件最后添加如下内容:
​
### haproxy 监控页面地址是:http://192.168.44.251:9188/status
listen admin_stats
    bind *:9188  #绑定端口9188
    mode http    #配置http模式
    log 127.0.0.1 local3 err
    stats refresh 60s   #每60秒更新监控数据
    stats uri /status 
    stats realm welcome login\ Haproxy
    stats auth admin:123456  #监控页面的用户名和密码
    stats hide-version
    stats admin if TRUE
​
### rabbitmq 集群配置,转发到
listen rabbitmq_cluster
    bind *:5673 #对外暴露端口
    mode tcp  #配置tcp模式
    balance roundrobin #采用轮询算法,也可以使用其他算法,读者可自行了解
    server node1 192.168.44.251:5672 check inter 2000 rise 2 fall 3 weight 1
    server node2 192.168.44.252:5672 check inter 2000 rise 2 fall 3 weight 1

如果rabbitmq节点和haproxy安装在同一台机器上,改变对外暴露接口,避免和rabbitmq抢占端口。

参数解释:

# inter 3000 健康检查时间间隔为3秒
# rise 3 检测3次才认为是正常的
# fall 3 失败3次才认为是不可用的
# weight 1 权重

启动haproxy

haproxy -f /etc/haproxy/haproxy.cfg

访问http://192.168.44.251:9188/status测试:

image-20220603200942009

2. 安装并配置Keepalived

虽然我们使用了负载均衡,但是如果haoproxy的节点故障,就算rabbitmq服务没问题我们也访问不了,所以我们使用Keepalived来实现故障转移。一个为主机master、一个为备机backup,当主机故障时,VIP(虚拟IP)会漂移到备机上。

下载keepalived:

yum -y install keepalived

修改配置文件:

vim /etc/keepalived/keepalived.conf

节点1和节点2的内容基本一致,内容在下面给出。

节点1修改内容如下:

global_defs {
   # 路由id,主备节点不能相同
   router_id rabbit-1
}
​
# 自定义监控脚本
vrrp_script chk_haproxy {
    # 脚本位置
    script "/etc/keepalived/haproxy_check.sh" 
    # 脚本执行的时间间隔
    interval 5 
    weight 10
}
​
vrrp_instance VI_1 {
    # Keepalived的角色,MASTER 表示主节点,BACKUP 表示备份节点
    state MASTER  
    # 指定监测的网卡,可以使用 ifconfig 进行查看,我这里是ens32,每个人可能不同。
    interface ens32
    # 虚拟路由的id,主备节点需要设置为相同
    virtual_router_id 1
    # 优先级,主节点的优先级需要设置比备份节点高
    priority 100 
    # 设置主备之间的检查时间,单位为秒 
    advert_int 1 
    # 定义验证类型和密码
    authentication { 
        auth_type PASS
        auth_pass 123456
    }
​
    # 调用上面自定义的监控脚本
    track_script {
        chk_haproxy
    }
​
    virtual_ipaddress {
        # 虚拟IP地址(VIP)
        192.168.44.251 
    }
}

节点2修改内容如下:

global_defs {
   # 路由id,主备节点不能相同    
   router_id rabbit-2  
}
​
vrrp_script chk_haproxy {
    script "/etc/keepalived/haproxy_check.sh" 
    interval 5 
    weight 10
}
​
vrrp_instance VI_1 {
    # BACKUP 表示备份节点
    state BACKUP 
    interface ens32
    virtual_router_id 1
    # 优先级,备份节点要比主节点低
    priority 50 
    advert_int 1 
    authentication { 
        auth_type PASS
        auth_pass 123456
    }
    
    track_script {
        chk_haproxy
    }
​
    virtual_ipaddress {
        # 虚拟IP地址(VIP)
        192.168.44.251  
    }
}

在指定位置创建haproxy状态检测脚本,脚本内容如下:

# 创建检测脚本
vim /etc/keepalived/haproxy_check.sh
#!/bin/bash
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
haproxy -f /etc/haproxy/haproxy.cfg
fi
sleep 2
if [ $(ps -C haproxy --no-header | wc -l) -eq 0 ];then
service keepalived stop
fi

启动服务:

#先启动两个haproxy节点
haproxy -f /etc/haproxy/haproxy.cfg
#先启动主机keepalived,后启动备机keeplived
systemctl start keepalived

3. 在SpringBoot中使用

配置文件:

# 配置haproxy负载均衡
spring:
  rabbitmq:
    host: 192.168.44.251
    port: 5673
    username: admin
    password: 123456

小结

以上就是如何在Centos7中配置RabbitMQ的负载均衡,并且使用Keepalived来实现高可靠性。希望能对读者有所帮助,如有不正之处,欢迎留言指正。