rabbitmq脱离集群,rabbitmq集群需要几台机器
一 普通集群
以以下两台服务器为例
IP :172.16.9.8主机名称: rabbit mq1 (主) ) ) ) ) ) ) ) ) )。
IP :172.16.9.9主机名称: rabbit mq2 (slave ) ) ) ) ) )。
1 .修改主机文件
编辑、添加/etc/hosts文件
172.16.9.8 rabbit MQ 1172.16.9.9将hostnamehostnamectlset-hostnamerabbitmq1(对应名称) cookie的内容分别复制到两台机器上
要打开文件,必须首先将服务器上的/var/lib/rabbit MQ/. Erlang.cookie内容复制到172.16.9.9
cd /var/lib/rabbimq
scp.Erlang.cookie root @ 172.16.9.9:/var/lib/rabbit MQ/. Erlang.cookie
赋予权限
chmod 600 .erlang.cookie
chownrabbitmq : rabbit MQ/var/lib/rabbit MQ/. Erlang.cookie
3 .服务器配置
运行主服务:
如果rabbitmqctlstop _ apprabbitmqctlresetrabbitmqctlstart _ app无法启动,请尝试重新启动hosts文件
运行节点服务:
rabbitmqctlstop _ apprabbitmqctlresetrabbitmqctljoin _ cluster-- ram rabbit @ rabbit mq1 (-ram表示内存节点) rabitmqctlstarararar
4 .如果节点列表包含自身,则它是磁盘节点。 RabbitMQ群集中必须至少存在一个磁盘节点。
现在,运行主节点上的脚本,等待运行完成,然后运行服务节点上的脚本。 请不要弄错顺序
运行完成后,在每台计算机上检查节点的状态
rabbitmqctlcluster_status将消息队列写入其中一个群集节点,并将其复制到另一个节点。
对Queue来说,消息实体只存在于一个节点上,而a、b两个节点具有相同的元数据,即队列结构。 在消息进入a节点的队列后,当consumer从b节点抽取时,RabbitMQ临时在a、b之间进行消息转发,取出a中的消息实体并通过b发送给consumer。
因此,consumer必须尽可能连接所有节点并从中提取消息。 也就是说,针对同一逻辑队列,在多个节点上建立物理队列。 否则,即使消费者带你去A或B,出口也总是在A,会出现瓶颈。
该模型存在的问题是,在a节点故障后,b节点无法获取未在a节点上消耗的消息实体。 进行信息持久化时,等待a节点恢复后再进行消耗; 如果没有持续化,如果没有……
二 设置镜像队列策略
配置上述RabbitMQ默认群集模式不能保证队列的高可用性。 可以将交换机、绑定等复制到群集中的任何节点,但不会复制队列的内容。 此模式可解决某些节点的压力,但队列节点关闭后,队列将不可用,只能等待重新启动。 因此,要确保队列节点在停机或出现故障时正常使用,必须将队列内容复制到群集中的每个节点,并创建镜像队列以使用负载平衡器。
在普通群集中的任何节点上启用策略时,策略会自动同步到群集节点
rabbitmqctl set_policy -p vhost名称ha-all ' ^ ' ' { ' ha-mode ' : ' all ' }此命令在名为“/”的vhost中创建策略。 策略名称为ha-all,策略名称为“
例如,rabbitmqctlset _ policy-pewmsinfoha-all ' ^ message ' { ' ha-mode ' 3360 ' all ' }
注意:必须根据自己修改“^消息”规则。 表达式为“^”,因为它同步“消息”的第一个队列名称,并且在配置时使用它适用于所有队列
set_policy的使用方法如下。
set _ policy [-pvhostpath ] { name } { pattern } { definition } [ priority ]