实例列举:
queue_args("x-ha-policy":"all") //定义字典来设置额外的队列声明参数 channel.queue_declare(queue="hello-queue",argument=queue_args)如果需要设定特定的节点(以rabbit@localhost为例),再添加一个参数
queue_args("x-ha-policy":"nodes", "x-ha-policy-params":["rabbit@localhost"]) channel.queue_declare(queue="hello-queue",argument=queue_args)可以通过命令行查看那个主节点进行了同步
rabbitmqctl list_queue name slave_pids synchronised_slave_pids (二) RabbitMQ Cluster 配置 1 单机多节点部署在启动RabbitMQ节点之后,服务器默认的节点名称是Rabbit和监听端口5672,如果想在同一台机器上启动多个节点,那么其他的节点就会因为节点名称和端口与默认的冲突而导致启动失败,可以通过设置环境变量来实现,具体方法如下:
首先在机器上设置两个节点rabbit和rabbit_01
rabbitmqctl stop //先停止运行节点,再进行集群部署 RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit //设置环境变量指定端口和节点名称 rabbitmq-server -detached //后台启动节点 RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit_01 //设置环境变量指定端口和节点名称 rabbitmq-server -detached //后台启动节点或者通过添加/etc/rabbitmq/rabbitmq-env.conf文件来进行设置:
NODE_PORT=5672 NODENAME=rabbit NODE_PORT=5673 NODENAME=rabbit_01将rabbit_01节点添加到第一个集群节点rabbit中
rabbitmqctl -n rabbit_01@localhost stop_app //停止rabbit_01节点的应用 rabbitmqctl -n rabbit_01@localhost join_cluster rabbit@localhost //将rabbit_01添加到集群节点rabbit中去 rabbitmqctl cluster_status //查看集群节点的状态 rabbitmqctl -n rabbit_01@localhost start_app //启动rabbit_01节点的应用 //可以看到如下信息,说明节点添加成功,表明都是磁盘类型的节点 Cluster status of node rabbit@localhost ... [{nodes,[{disc,[rabbit@localhost,rabbit_01@localhost]}]}, {running_nodes,[rabbit@localhost]}, {cluster_name,<<"rabbit@localhost">>}, {partitions,[]}, {alarms,[{rabbit@localhost,[]}]}] 2 多机多节点部署不同于单机多节点的情况,在多机环境,如果要在cluster集群内部署多个节点,需要注意两个方面:
保证需要部署的这几个节点在同一个局域网内
需要有相同的Erlang Cookie,否则不能进行通信,为保证cookie的完全一致,采用从一个节点copy的方式
环境介绍:
RabbitMQ节点IP地址工作模式操作系统rabbitmqCluster 186.16.195.24 DISK CentOS 7.0 - 64位
rabbitmqCluster01 186.16.195.25 DISK CentOS 7.0 - 64位
rabbitmqCluster02 186.16.195.26 DISK CentOS 7.0 - 64位
cluster部署过程:
局域网配置
分别在三个节点的/etc/hosts下设置相同的配置信息
设置不同节点间同一认证的Erlang Cookie
采用从主节点copy的方式保持Cookie的一致性
使用 -detached运行各节点
rabbitmqctl stop rabbitmq-server -detached查看各节点的状态
[root@rabbitmqCluster]#rabbitmqctl cluster_status [root@rabbitmqCluster01]#rabbitmqctl cluster_status [root@rabbitmqCluster02]#rabbitmqctl cluster_status