rabbitmq镜像模式设置策略以及高可用
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环境了