0、节点信息
ip主机 | 主机名 | 角色 |
192.168.2.13 | mq1 | 初始节点,磁盘存储 |
192.168.2.14 | mq2 | 内存节点 |
192.168.2.15 | mq3 | 内存节点 |
1、集群中至少存在一个磁盘节点才能真正实现持久化;
2、磁盘节点和内存节点的区别就是存储的介质不同,一个是存储在磁盘,一个是存储在内存;同时,他们的访问速度也不同,内存节点读取效率是大于磁盘节点的;
3、集群数据的存储位置:/var/lib/rabbitmq/mnesia/
1、安装rabbitmq
mq1的rabbitmq在上篇中已经安装好了,mq2和mq3两个节点单机rabbitmq的安装过程略…
参考上篇
安装单机后先不配置rabbitmq_management插件
2、配置hosts
编辑每个节点的 /etc/hosts 文件
192.168.2.13 mq1
192.168.2.14 mq2
192.168.2.15 mq3
3、配置 cookie
复制初始主节点的 erlang.cookie
(在mq1初始主节点上执行,复制给其他两个节点)
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.2.14:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.2.15:/var/lib/rabbitmq/.erlang.cookie
4、加入集群
(在mq2和mq3上执行)
rabbitmqctl stop_app # 暂停rabbitmq服务
rabbitmqctl join_cluster --ram rabbit@mq1 # 以内存节点的身份加入集群
或者
rabbitmqctl join_cluster rabbit@mq1 # 以磁盘节点的身份加入集群
rabbitmqctl start_app # 开启rabbitmq服务
查看集群状态:
rabbitmqctl cluster_status
从状态中可以看到这个集群有几个节点,哪些是磁盘节点,哪些是内存节点,以及节点运行的状态;
5、其他
——退出集群
方法一:使用 rabbitmqctl forget_cluster_node 命令,剔除mq3。
# mq3上执行(先停止)
[root@mq3 src]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@mq3 ...
# mq1上执行(将mq3剔除)
[root@mq1 rabbitmq]# rabbitmqctl forget_cluster_node rabbit@mq3
Removing node rabbit@mq3 from the cluster
方法二:使用 rabbitmqctl reset 命令,mq2退出集群。
[root@mq2 rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@mq2 ...
[root@mq2 rabbitmq]# rabbitmqctl reset
Resetting node rabbit@mq2 ...
——修改集群节点类型
退出节点,再重新加入集群的时候选择是磁盘节点还是内存节点;
附录一:集群简述
每一个节点,不管是磁盘存储还是内存存储,都具备全部的队列、消息数据;即,每一个节点都是一个单独的出入口,这样可以提高整体的吞吐量;
如果集群里只有一个磁盘节点,这个节点挂了,会发生什么?此时消息路由机制仍可正常进行(可以正常投递和消费消息),但是不能做如下事:
● create queues
● create exchanges
● create bindings
● add users
● change permissions
● add or remove cluster nodes
所以,考虑到高可用性,推荐在集群里保持2个磁盘节点,这样一个挂了,另一个还可正常工作。但上述最后一点,往集群里增加或删除节点,要求2个磁盘节点同时在线
如果不做队列持久化、消息持久化,那么当队列所在的节点宕掉后,数据就会全部丢失;
即便做了队列和消息的持久化,也需要队列所在的节点恢复启动后才可以使用;