对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入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
在网页上查看集群的状态: