Rabbitmq集群修复

栏目:云苍穹知识作者:金蝶来源:金蝶云社区发布:2024-09-23浏览:1

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 /var/lib/rabbitmq/mnesia /var/lib/rabbitmq/mnesia.bak

 

2、  确认 /var/lib/rabbitmq/.erlang.cookie 文件与其他节点权限和内容一致

[root@ierp01 ~]# ls -la /var/lib/rabbitmq/.erlang.cookie

 

3、  启动故障节点

[root@ierp01 ~]# systemctl start rabbitmq-server

 

4、  停止故障节点的mq app:

[root@ierp01 ~]# rabbitmqctl stop_app

 

5、  在集群节点中将故障节点剔除:

[root@ierp02 ~]# rabbitmqctl forget_cluster_node rabbit@ierp01 (故障节点是ierp01,集群名称是rabbit@ierp01)

 

6、  将集群节点名称改名(存活的节点名):

[root@ierp02 ~]# rabbitmqctl set_cluster_name rabbit@ierp02  (故障节点是ierp01,集群名称是rabbit@ierp01)

[root@ierp02 ~]# rabbitmqctl set_cluster_name rabbit@ierp02

Cluster status of node rabbit@ierp02 ...

[{nodes,[{disc,[rabbit@ierp02,rabbit@ierp03]}]},

{running_nodes,[rabbit@ierp02,rabbit@ierp03]},

{cluster_name,<<"rabbit@ierp02">>},

{partitions,[]},

{alarms,[{rabbit@ierp02,[]},{rabbit@ierp03,[]}]}]

 

7、  故障节点重新加入到集群(新集群名):

[root@ierp01 ~]# rabbitmqctl join_cluster rabbit@ierp02

 

8、  启动故障节点app:

[root@ierp01 ~]#  systemctl start_app

查看集群状态

[root@ierp01 rabbitmq]# rabbitmqctl cluster_status

Cluster status of node rabbit@ierp01 ...

[{nodes,[{disc,[rabbit@ierp01,rabbit@ierp02,rabbit@ierp03]}]},

{running_nodes,[rabbit@ierp02,rabbit@ierp03,rabbit@ierp01]},

{cluster_name,<<"rabbit@ierp02">>},

{partitions,[]},

{alarms,[{rabbit@ierp02,[]},{rabbit@ierp03,[]},{rabbit@ierp01,[]}]}]

 

9、  设置vhosts为镜像复制模式

[root@ierp01 ~]# rabbitmqctl set_policy -p mc ha-allqueue "^"  '{"ha-mode":"all"}'

[root@ierp01 ~]# rabbitmqctl set_policy -p ierp ha-allqueue "^"  '{"ha-mode":"all"}'

 


Rabbitmq集群修复

背景在实际运维过程中,可能会出现因rabbitmq数据文件异常(损坏或丢失)导致rabbitmq服务无法启动,rabbitmq集群就此少了一个节点运行着。...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息