首页天道酬勤rabbitmq脱离集群,rabbitmq集群需要几台机器

rabbitmq脱离集群,rabbitmq集群需要几台机器

张世龙 05-12 07:53 25次浏览

一 普通集群

以以下两台服务器为例

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 ]

rabbitmq集群架构,rabbitmq集群搭建