Rabbitmq集群修复

背景
在实际运维过程中,可能会出现因rabbitmq数据文件异常(损坏或丢失)导致rabbitmq服务无法启动,rabbitmq集群就此少了一个节点运行着。如果rabbitmq服务数据无法修复,由于使用的vhost是设置了镜像复制模式,其他节点数据仍然存在,所以不用太关心故障节点的数据(一般消息组件也都会有消息补偿机制)。此时可以清理故障节点,并重新加入集群。
Rabbitmq集群修复过程
首先通过rabbitmqctl cluster_status命令判断故障节点是否为集群主节点(集群名节点)
情况1、故障节点不是集群主节点(集群名节点)
下面查看日志说明:故障节点是集群主节点(集群名节点)
故障节点是ierp03,运行中的节点是ierp01、ierp02,集群名节点是rabbit@ierp01。
[root@ierp02 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@ierp02 ...
[{nodes,[{disc,[rabbit@ierp01,rabbit@ierp02]}]},
{running_nodes,[rabbit@ierp01,rabbit@ierp02]},
{cluster_name,<<"rabbit@ierp01">>},
{partitions,[]},
{alarms,[{rabbit@ierp03,[]},{rabbit@ierp02,[]}]}]
修复过程:
1、 挪走故障节点 /var/lib/rabbitmq/mnesia 数据
[root@ierp03 ~]# mv /var/lib/rabbitmq/mnesia /var/lib/rabbitmq/mnesia.bak
2、 确认 /var/lib/rabbitmq/.erlang.cookie 文件与其他节点权限和内容一致
[root@ierp03 ~]# ls -la /var/lib/rabbitmq/.erlang.cookie
3、 启动故障节点
[root@ierp03 ~]# systemctl start rabbitmq-server
4、 停止故障节点的mq app:
[root@ierp03 ~]# rabbitmqctl stop_app
5、 在集群节点中将故障节点剔除:
[root@ierp02 ~]# rabbitmqctl forget_cluster_node rabbit@ierp03 (故障节点是ierp03,集群名称是rabbit@ierp01)
6、 故障节点重新加入集群:
[root@ierp03 ~]# rabbitmqctl join_cluster rabbit@ierp01
7、 启动故障节点app:
[root@ierp03 ~]# systemctl start_app
查看集群状态
[root@ierp03 rabbitmq]# rabbitmqctl cluster_status
Cluster status of node rabbit@ierp03 ...
[{nodes,[{disc,[rabbit@ierp01,rabbit@ierp02,rabbit@ierp03]}]},
{running_nodes,[rabbit@ierp02,rabbit@ierp03,rabbit@ierp01]},
{cluster_name,<<"rabbit@ierp01">>},
{partitions,[]},
{alarms,[{rabbit@ierp02,[]},{rabbit@ierp03,[]},{rabbit@ierp01,[]}]}]
8、 设置vhosts为镜像复制模式
[root@ierp03 ~]# rabbitmqctl set_policy -p mc ha-allqueue "^" '{"ha-mode":"all"}'
[root@ierp03 ~]# rabbitmqctl set_policy -p ierp ha-allqueue "^" '{"ha-mode":"all"}'
情况2、故障节点是集群主节点(集群名节点)
下面查看日志说明:故障节点是集群主节点(集群名节点)
故障节点是ierp01,运行中的节点是ierp02、ierp03,集群名节点是rabbit@ierp01。
[root@ierp02 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@ierp02 ...
[{nodes,[{disc,[rabbit@ierp02,rabbit@ierp03]}]},
{running_nodes,[rabbit@ierp03,rabbit@ierp02]},
{cluster_name,<<"rabbit@ierp01">>},
{partitions,[]},
{alarms,[{rabbit@ierp03,[]},{rabbit@ierp02,[]}]}]
修复过程:
1、 挪走故障节点 /var/lib/rabbitmq/mnesia 数据
[root@ierp01 ~]# mv /v
Rabbitmq集群修复
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



