1、安装运行环境
a、curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
yum -y install erlang
b、yum install -y socat
c、下载rabbitmq rpm 并安装 rpm -ivh rabbitmq-server-3.9.15-1.el8.noarch.rpm
2、 修改hostname,hosts文件和操作命令
hostname:server-node1、server-node2、server-node3
hosts文件添加:
10.1.59.127 server-node1
 10.1.59.128 server-node2
 10.1.59.129 server-node3操作命令:
service rabbitmq-server status //查看服务状态
service rabbitmq-server start //启动服务
service rabbitmq-server restart //重启服务
 service rabbitmq-server stop //停止服务
3、复制 .erlang.cookie ,各个节点保持一致

在 /var/lib/rabbitmq 目录下,如果不存在,启动一次会自动创建,使用ls -al命令查看,可使用scp命令复制到每个节点

4、启动各个节点
5、设置 slave 节点
rabbitmqctl stop_app
rabbitmqctl reset #用来清空数据,如果主节点有数据也需要清空
rabbitmqctl join_cluster rabbit@server-node1
rabbitmqctl start_app

rabbitmqctl cluster_status 查看集群状态

[root@server-node1 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@server-node1 ...
Basics

Cluster name: rabbit@server-node1

Disk Nodes

rabbit@server-node1
rabbit@server-node2
rabbit@server-node3

Running Nodes

rabbit@server-node1
rabbit@server-node2
rabbit@server-node3

Versions

rabbit@server-node1: RabbitMQ 3.9.15 on Erlang 23.3.4.11
rabbit@server-node2: RabbitMQ 3.9.15 on Erlang 23.3.4.11
rabbit@server-node3: RabbitMQ 3.9.15 on Erlang 23.3.4.11
6、 添加集群同步策略
  • ha-mode: all,在集群中所有的节点上进行镜像
  • ha-sync-mode: automatic,在集群节点宕机重新连接后自动同步
# 添加策略
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
   
# 查看策略
rabbitmqctl list_policies
7、配置帐号
#添加用户
rabbitmqctl  add_user  admin  admin

#添加角色
rabbitmqctl  set_user_tags  admin administrator

#赋权
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

#查看用户
rabbitmqctl list_permissions
8、开启web模块
rabbitmq-plugins enable rabbitmq_management
9、部署两台 haproxy 来负载各个mq节点
# 安装
$ yum install haproxy -y

# 配置
$ vi /etc/haproxy/haproxy.cfg

# 启动
$ haproxy -f /etc/haproxy/haproxy.cfg

haproxy.cfg配置参考:

global
    log         127.0.0.1 local0 info
    maxconn     4000
    chroot      /var/lib/haproxy
    
    user        haproxy
    group       haproxy
    daemon
    nbproc      1
    pidfile     /var/run/haproxy.pid

    # turn on stats unix socket
    stats socket /var/lib/haproxy/stats

defaults
    log                     global
    mode                    tcp
    option                  tcplog
    option                  dontlognull
    option                  redispatch
    retries                 3
    maxconn                 3000

    #默认连接超时时间
    timeout     connect                 5s

    #默认客户端超时时间
    timeout     client                  1m

    #默认服务器超时时间
    timeout     server                  1m


#监听5671端口转发到rabbitmq的客户端
listen rabbitmq_cluster 
    # 定义监听地址和端口,本机的5671端口
    bind 0.0.0.0:5671
    # 配置 tcp 模式
    mode tcp
    # 简单的轮询
    balance roundrobin
    #rabbitmq集群节点配置 #inter 每隔五秒对mq集群做健康检查,2次正确证明服务器可用,
    #2次失败证明服务器不可用,并且配置主备机制
    server rabbit1 10.1.59.127:5672 check inter 5000 rise 2 fall 3
    server rabbit2 10.1.59.128:5672 check inter 5000 rise 2 fall 3
    server rabbit3 10.1.59.129:5672 check inter 5000 rise 2 fall 3
        
# 配置 haproxy web 监控,查看统计信息
listen stats
    bind *:8100
    mode http
    option httplog
    stats enable
    # 设置 haproxy 监控地址为:http://ip:8100/rabbitmq-stats
    stats uri /rabbitmq-stats
    stats refresh 10s

启动后可以使用http://ip:port/rabbitmq-stats查看节点状态

10、 在haproxy 主机上安装 Keepalived 来实现haproxy 的高可用

1、安装

$ yum install -y keepalived

2、修改配置文件

主节点

global_defs {
   # 起一个唯一的名字,不能与备机相同
   router_id Keepalived1
}

#自定义监控脚本
vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    #检查时间间隔
    interval 5
    #如果条件成立则改变权重
    # weight 2
}

vrrp_instance VI_1 {

    # 这里标记为主,备节点使用 BACKUP   
    state MASTER
    # 这里的必须和你的网卡一致
    interface ens192
    # 这里表示路由的唯一标识与备机一致
    virtual_router_id 1
    # 配置优先级
    priority 100
    #组播信息发送间隔,两个节点必须一致,默认1s
    advert_int 1   
    authentication {
        auth_type PASS
        # 配置认证密码
        auth_pass root
    }
    
    # 如果两节点的上联交换机禁用了组播,则采用 vrrp 单播通告的方式
    unicast_src_ip 10.1.59.127
    unicast_peer {
        10.1.59.128
    }
    
    #自定义监控脚本
    track_script {
        chk_haproxy
    }

    # 配置虚拟ip地址,就是开放的地址,与本机ip不同,可以设置多个
    virtual_ipaddress { 
        10.1.59.1
    }
}

备节点

global_defs {
   # 起一个唯一的名字,不能与备机相同
   router_id Keepalived2
}

#自定义监控脚本
vrrp_script chk_haproxy {
    script "/etc/keepalived/check_haproxy.sh"
    #检查时间间隔
    interval 5
    #如果条件成立则改变权重
    # weight 2
}

vrrp_instance VI_1 {

    # 这里标记为主,备节点使用 BACKUP   
    state BACKUP
    # 这里的必须和你的网卡一致
    interface ens192
    # 这里表示路由的唯一标识与备机一致
    virtual_router_id 1
    # 配置优先级
    priority 50
    #组播信息发送间隔,两个节点必须一致,默认1s
    advert_int 1   
    authentication {
        auth_type PASS
        # 配置认证密码
        auth_pass root
    }

    # 如果两节点的上联交换机禁用了组播,则采用 vrrp 单播通告的方式
    unicast_src_ip 10.1.59.128
    unicast_peer {
        10.1.59.127
    }

    #自定义监控脚本
    track_script {
        chk_haproxy
    }

    # 配置虚拟ip地址,就是开放的地址,与本机ip不同,可以设置多个
    virtual_ipaddress { 
        10.1.59.1
    }
}

检查脚本check_haproxy.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

3、启动

# 启动
$ keepalived -f /etc/keepalived/keepalived.cfg
# 或
$ service keepalived start

#查看状态
$ service keepalived status

#关闭
$ service keepalived stop

这样就可以固定使用一个虚拟ip 10.1.59.1来访问mq环境了