RabbitMQ多服务器节点集群架构配置

对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消息从A中取出,并经过B发送给消费者。

        应用场景:该模式各适合于消息无需持久化的场合,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化,只能等故障节点恢复。

 

安装前题条件:

vim /etc/rabbitmq/enable_plugins :删除文件中的内容。

查看hosts文件是否配置完善,相互是否可以ping通

查看相关端口是否被占用,如若占用kill掉

如果已经集群,那么要查看所有集群中的/var/lib/rabbitmq/.erlang.cookie是否一致。

chown rabbitmq.rabbitmq /var/lib/rabbitmq/.erlang.cookie

chmod 0400 /var/lib/rabbitmq/.erlang.cookie

如果不存在上述文件,echo $HOME ,打开此文件夹,查看cookie文件是否一致。

重启电脑,防止缓存数据配置未更新过来。

 

服务器拓扑:

IP                主机名

172.16.1.6     node6

172.16.1.10    node10                   

RabbitMQ版本:

RabbitMQ 3.1.5, Erlang R14B04

服务器版本:

[root@node10 chapter-6]# cat /etc/redhat-release

CentOS release 6.9 (Final)

[root@node10 chapter-6]# uname -a

Linux node10 2.6.32-696.el6.x86_64 #1 SMP Tue Mar 2119:29:05 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

 

注意事项:

1)每个节点的erlangcookie须相同,可以在启动服务器加setcookie参数设置相同的参数,也可以在home目录下设置相同的.erlang.cookie文件。

[root@node10 ~]# cat .erlang.cookie

ATMPHYMBIMLZIHKHGAAA

在另一台服务器上配置相面的cookie

[root@node6 ~]# cat .erlang.cookie

ATMPHYMBIMLZIHKHGAAA

 

2)节点间应该能相互解析,可以通过修改/etc/hosts文件实现

[root@node10 ~]# cat /etc/hosts

172.16.1.10  node10

172.16.1.6  node6

 

[root@node6 ~]# cat /etc/hosts

172.16.1.6 node6

172.16.1.10 node10

 

 

目标:

将node6中的节点加入到node10的集群中:

1.在node10节点上清空配置

[root@node10 ~]# rabbitmqctl -n rabbit@node10 stop_app

Stopping node rabbit@node10 ...

...done.

[root@node10 ~]# rabbitmqctl -n rabbit@node10 reset

Resetting node rabbit@node10 ...

...done.

[root@node10 ~]# rabbitmqctl -n rabbit@node10 start_app

Starting node rabbit@node10 ...

...done.

 

2.在node6中清空配置:

[root@node6 ~]# rabbitmqctl -n rabbit@node6 stop_app

Stopping node rabbit@node6 ...

...done.

[root@node6 ~]# rabbitmqctl -n rabbit@node6 reset

Resetting node rabbit@node6 ...

...done.

[root@node6 ~]# rabbitmqctl -n rabbit@node6 start_app

Starting node rabbit@node6 ...

...done.

 

3.将node6加入到node10中

[root@node6 ~]# rabbitmqctl -n rabbit@node6 stop_app

Stopping node rabbit@node6 ...

...done.

 

[root@node6 rabbitmq]# rabbitmqctl -n rabbit@node6join_cluster rabbit@node10

Clustering node rabbit@node6 with rabbit@node10 ...

...done.

[root@node6 rabbitmq]# rabbitmqctl -n rabbit@node6start_app

Starting node rabbit@node6 ...

...done.

 

查看集群的状态:

在node6上查看:

[root@node6 rabbitmq]# rabbitmqctl -n rabbit@node6cluster_status

Cluster status of node rabbit@node6 ...

[{nodes,[{disc,[rabbit@node10,rabbit@node6]}]},

{running_nodes,[rabbit@node10,rabbit@node6]},

{partitions,[]}]

...done.

在node10上查看:

[root@node10 rabbitmq]#  rabbitmqctl -nrabbit@node10  cluster_status

Cluster status of node rabbit@node10 ...

[{nodes,[{disc,[rabbit@node10,rabbit@node6]}]},

{running_nodes,[rabbit@node6,rabbit@node10]},

{partitions,[]}]

...done.

 

 

修改节点类型,将硬盘型节点修改成内存型节点(默认加入的是硬盘型节点)

 

将node6节点修改成内存节点:

没有修改前的类型是硬盘型节点:

[root@node6 rabbitmq]# rabbitmqctl -n rabbit@node6cluster_status

Cluster status of node rabbit@node6 ...

[{nodes,[{disc,[rabbit@node10,rabbit@node6]}]},

{running_nodes,[rabbit@node10,rabbit@node6]},

{partitions,[]}]

...done.

 

[root@node6 ~]# rabbitmqctl  stop_app

Stopping node rabbit@node6 ...

...done.

[root@node6 ~]# rabbitmqctl change_cluster_node_type ram

Turning rabbit@node6 into a ram node ...

...done.

[root@node6 ~]# rabbitmqctl  start_app

Starting node rabbit@node6 ...

...done.

修改完成后node6变成了内存型节点

[root@node6 ~]# rabbitmqctl cluster_status

Cluster status of node rabbit@node6 ...

[{nodes,[{disc,[rabbit@node10]},{ram,[rabbit@node6]}]},

{running_nodes,[rabbit@node10,rabbit@node6]},

{partitions,[]}]

...done.


 

 

打个监控管理器:rabbitmq-plugins enable  rabbitmq_management

      service rabbitmq-server restart

 

在网页上查看集群的状态:

http://172.16.1.6:15672/#/

http://172.16.1.10:15672/#/

 


 

 

 




分割线
打赏
YWSOS.COM 平台代运维解决方案
 评论
 发表评论
姓   名:

Powered by AKCMS