RabbitMQ Clusterhtml
1安装准备node
单节点MQ的安装参考其余文档,此处仅以两个节点为例,多个节点也如法炮制。cookie
² 已经安装好rabbitmq的两个单节点rabbitmq-broker2、rabbitmq-broker3。app
² 保证两台机器上的rabbitmq为后台启动状态。ide
² 安装erlang、rabbitmq版本一致。不然,版本不一致会出现问题。spa
2 .erlang.cookie拷贝orm
.erlang.cookie该文件通常存放在安装用户目录下,如:/home/sca_bj/.erlang.cookie。从rabbitmq-broker2机器上将其拷贝到rabbitmq-broker3目录下。server
3配置前查看状态htm
rabbitmqctl cluster_statusrabbitmq
状态以下:
Cluster status of node 'sca@rabbitmq-broker3' ...
[{nodes,[{disc,['sca@rabbitmq-broker3']}]},
{running_nodes,['sca@rabbitmq-broker3']},
{cluster_name,<<"sca@ocdata09">>},
{partitions,[]}]
...done.
4 join cluster
将rabbitmq-broker3加入到rabbitmq-broker2中,在rabbitmq-broker3上操做
² rabbitmqctl stop_app
² rabbitmqctl join_cluster root@rabbitmq-broker2
² rabbitmqctl start_app
5查看加入后的状态
rabbitmqctl cluster_status
² 配置cluster后状态以下:
Cluster status of node 'sca@rabbitmq-broker3' ...
[{nodes,[{disc,['root@rabbitmq-broker2','sca@rabbitmq-broker3']}]},
{running_nodes,['root@rabbitmq-broker2','sca@rabbitmq-broker3']},
{cluster_name,<<"root@ocdata07">>},
{partitions,[]}]
...done.
² 中止rabbitmq-broker2上的MQ
rabbitmqctl stop
² 在rabbitmq-broker3查看状态
rabbitmqctl cluster_status
Cluster status of node 'sca@rabbitmq-broker3' ...
[{nodes,[{disc,['root@rabbitmq-broker2','sca@rabbitmq-broker3']}]},
{running_nodes,['sca@rabbitmq-broker3']},
{cluster_name,<<"root@ocdata07">>},
{partitions,[]}]
² 再将rabbitmq-broker2从新启动
rabbitmq-server -detached
² 也能够经过界面管理端来查看其状态
6 RAM集群节点
咱们默认配置的disk 集群节点,大的集群也能够RAM集群节点。
在rabbitmq-broker3操做
² rabbitmqctl stop_app
² rabbitmqctl join_cluster --ram root@rabbitmq-broker2
² rabbitmqctl start_app
7去除节点的方法
移除rabbitmq-broker3,在rabbitmq-broker3上操做
² rabbitmqctl stop_app
² rabbitmqctl reset
² rabbitmqctl start_app
或者在rabbitmq-broker2上操做
² rabbitmqctl stop_app
² rabbitmqctl forget_cluster_node sca@rabbitmq-broker3
² 此时rabbitmq-broker2还会认为和rabbitmq-broker3成集群状态,这时
rabbitmqctl start_app会报错
Removing node 'sca@rabbitmq-broker3' from cluster ...
Error: {offline_node_no_offline_flag,"You are trying to remove a node from an offline node. That is dangerous, but can be done with the --offline flag. Please consult the manual for rabbitmqctl for more information."}
² 继续执行命令
rabbitmqctl reset
² rabbitmqctl start_app
注意:整个集群的启动和中止顺序恰好相反
8普通集群的弊端
Queues的消息只存在于被建立的那台机器上。
对于publish,客户端任意链接集群的一个节点,转发给建立queue的节点存储消息的全部信息;对于consumer,客户端任意链接集群中的一个节点,若是数据不在该节点中,则从存储该消息data的节点拉取。可见当存储有queue内容的节点失效后,只要等待该节点恢复后,queue中存在的消息才能够获取消费的到。显然增长集群的节点,能够提升整个集群的吞吐量,可是在高可用方面要稍微差一些。
附加:Rabbitmq HA:http://www.rabbitmq.com/clustering.html