<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Rabbitmq_cluster_on_centos7</id>
	<title>Rabbitmq cluster on centos7 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.linuxsa.org/index.php?action=history&amp;feed=atom&amp;title=Rabbitmq_cluster_on_centos7"/>
	<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Rabbitmq_cluster_on_centos7&amp;action=history"/>
	<updated>2026-04-17T15:51:26Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://wiki.linuxsa.org/index.php?title=Rabbitmq_cluster_on_centos7&amp;diff=915&amp;oldid=prev</id>
		<title>Evan：​/* docker */</title>
		<link rel="alternate" type="text/html" href="https://wiki.linuxsa.org/index.php?title=Rabbitmq_cluster_on_centos7&amp;diff=915&amp;oldid=prev"/>
		<updated>2019-10-22T09:00:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;docker&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=Note=&lt;br /&gt;
Note: 另外一个docker &lt;br /&gt;
&lt;br /&gt;
[[Rabbitmq cluster on docker-compose]]&lt;br /&gt;
&lt;br /&gt;
=前提是rabbitmq安装=&lt;br /&gt;
[[Centos7安装Rabbitmq]]&lt;br /&gt;
&lt;br /&gt;
=介绍=&lt;br /&gt;
运行模式大概有3种：&lt;br /&gt;
&lt;br /&gt;
单一模式：非集群模式，单台。&lt;br /&gt;
&lt;br /&gt;
普通模式：RabbitMQ默认的集群模式。&lt;br /&gt;
&lt;br /&gt;
对于Queue来说，消息实体只存在于其中一个节点，A、B两个节点仅有相同的元数据，即队列结构。当消息进入A节点的Queue中后，consumer从B节点拉取时，RabbitMQ会临时在A、B间进行消息传输，把A中的消息实体取出并经过B发送给consumer。&lt;br /&gt;
&lt;br /&gt;
所以consumer应尽量连接每一个节点，从中取消息。即对于同一个逻辑队列，要在多个节点建立物理Queue。否则无论consumer连A或B，出口总在A，会产生瓶颈。&lt;br /&gt;
&lt;br /&gt;
该模式存在一个问题就是当A节点故障后，B节点无法取到A节点中还未消费的消息实体。&lt;br /&gt;
&lt;br /&gt;
如果做了消息持久化，那么得等A节点恢复，然后才可被消费；如果没有持久化会丢失消息。&lt;br /&gt;
&lt;br /&gt;
镜像模式：Queue同时存在多个节点，可通过改模式实现HA高可用&lt;br /&gt;
该模式解决了上述问题，其实质和普通模式不同之处在于，消息实体会主动在镜像节点间同步，而不是在consumer取数据时临时拉取。&lt;br /&gt;
&lt;br /&gt;
该模式带来的副作用也很明显，除了降低系统性能外，如果镜像队列数量过多，加之大量的消息进入，集群内部的网络带宽将会被这种同步通讯大大消耗掉。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
rabbitmq-server-3.7.7-1.el7&lt;br /&gt;
&lt;br /&gt;
=配置hosts文件=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;#039;192.168.0.202 mq01&lt;br /&gt;
192.168.0.202 mq02&amp;#039; &amp;gt;&amp;gt;/etc/hosts&lt;br /&gt;
&lt;br /&gt;
hostnamectl --static  set-hostname mq01&lt;br /&gt;
hostnamectl --static  set-hostname mq02&lt;br /&gt;
&lt;br /&gt;
#注意 这个格式是不对的 不能并列 只能有一个 &lt;br /&gt;
#192.168.0.201 master  zoo1&lt;br /&gt;
192.168.0.202   mq01&lt;br /&gt;
192.168.0.203   mq02&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
三台主机上安装的 RabbitMQ 都保证都可以正常启动,才可以进行以下操作&lt;br /&gt;
&lt;br /&gt;
停止RabbitMQ 服务&lt;br /&gt;
 systemctl stop rabbitmq-server &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=拷贝erlang.cookie =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#要先启动 不然没有cookie 文件 &lt;br /&gt;
systemctl start rabbitmq-server&lt;br /&gt;
&lt;br /&gt;
 [root@node1 ~]cat /var/lib/rabbitmq/.erlang.cookie &lt;br /&gt;
RDZZRBEWSOOIYHOABHTI&lt;br /&gt;
将cookie中的内容复制到mq02的cookie文件中。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
这里将 node1 的该文件复制到 node2、node3，由于这个文件权限是 400为方便传输，先修改权限，非必须操作，所以需要先修改 node2、node3 中的该文件权限为 777&lt;br /&gt;
#这操作太low &lt;br /&gt;
scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/&lt;br /&gt;
&lt;br /&gt;
 chmod  400    /var/lib/rabbitmq/.erlang.cookie&lt;br /&gt;
  chown -R rabbitmq:rabbitmq  /var/lib/rabbitmq/.erlang.cookie&lt;br /&gt;
&lt;br /&gt;
注意事项&lt;br /&gt;
cookie在所有节点上必须完全一样，同步时一定要注意。&lt;br /&gt;
erlang是通过主机名来连接服务，必须保证各个主机名之间可以ping通。可以通过编辑/etc/hosts来手工添加主机名和IP对应关系。如果主机名ping不通，rabbitmq服务启动会失败&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==启动rabbitmq服务==&lt;br /&gt;
 systemctl  restart   rabbitmq-server # on all  node &lt;br /&gt;
&lt;br /&gt;
在node2 mq02上停止rabbitmq应用程序，并重置（重置只是清除节点的配置，如果没有配置过，则可以省略），然后加入node1集群&lt;br /&gt;
&lt;br /&gt;
[root@mq02 rabbitmq]# rabbitmqctl stop_app&lt;br /&gt;
Stopping node rabbit@mq02 ...&lt;br /&gt;
&lt;br /&gt;
reset节点&lt;br /&gt;
[root@mq02 rabbitmq]# rabbitmqctl reset&lt;br /&gt;
Resetting node rabbit@mq02 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==加入集群 ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[root@mq02 ~]# rabbitmqctl join_cluster rabbit@mq01 &lt;br /&gt;
Clustering node rabbit@mq02 with rabbit@mq01 ...&lt;br /&gt;
&lt;br /&gt;
启动rabbitmq应用&lt;br /&gt;
[root@mq02 ~]# rabbitmqctl start_app&lt;br /&gt;
Starting node rabbit@mq02 ...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==查看集群状态==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
node2上查看集群状态&lt;br /&gt;
rabbitmqctl cluster_status&lt;br /&gt;
&lt;br /&gt;
[root@mq02 ~]# rabbitmqctl cluster_status&lt;br /&gt;
Cluster status of node rabbit@mq02 ...&lt;br /&gt;
[{nodes,[{disc,[rabbit@mq01,rabbit@mq02]}]},&lt;br /&gt;
 {running_nodes,[rabbit@mq01,rabbit@mq02]},&lt;br /&gt;
 {cluster_name,&amp;lt;&amp;lt;&amp;quot;rabbit@mq01&amp;quot;&amp;gt;&amp;gt;},&lt;br /&gt;
 {partitions,[]},&lt;br /&gt;
 {alarms,[{rabbit@mq01,[]},{rabbit@mq02,[]}]}]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
node1上查看集群状态&lt;br /&gt;
[root@mq01 ~]#  rabbitmqctl cluster_status&lt;br /&gt;
Cluster status of node rabbit@mq01 ...&lt;br /&gt;
[{nodes,[{disc,[rabbit@mq01,rabbit@mq02]}]},&lt;br /&gt;
 {running_nodes,[rabbit@mq02,rabbit@mq01]},&lt;br /&gt;
 {cluster_name,&amp;lt;&amp;lt;&amp;quot;rabbit@mq01&amp;quot;&amp;gt;&amp;gt;},&lt;br /&gt;
 {partitions,[]},&lt;br /&gt;
 {alarms,[{rabbit@mq02,[]},{rabbit@mq01,[]}]}]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==更改节点类型==&lt;br /&gt;
&lt;br /&gt;
节点有两种类型：磁盘节点和内存节点，集群中必须至少有一个磁盘节点，否则队列元数据无法写入到集群中，当磁盘节点宕掉时，集群将无法写入新的队列元数据信息。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
从上面集群状态可以看出，mq01和mq02 均为磁盘节点，可以通过命令&lt;br /&gt;
&lt;br /&gt;
还有很多好的 如下 URL &lt;br /&gt;
&lt;br /&gt;
http://blog.51cto.com/zengestudy/1885054&lt;br /&gt;
&lt;br /&gt;
运行各节点&lt;br /&gt;
rabbitmqctl stop&lt;br /&gt;
 rabbitmq-server -detached &lt;br /&gt;
&lt;br /&gt;
=other=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
组成集群&lt;br /&gt;
[root@mq01 ~] rabbitmqctl stop_app&lt;br /&gt;
&lt;br /&gt;
[root@mq02 ~]# rabbitmqctl stop_app            # 停止rabbitmq服务&lt;br /&gt;
n[root@mq02 ~]# rabbitmqctl join_cluster rabbit@mq01    # node2和node1构成集群, node2必须能通过node1的主机名ping通&lt;br /&gt;
[root@mq02 ~]# rabbitmqctl start_app            # 开启rabbitmq服务&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 查看日志&lt;br /&gt;
less /var/log/rabbitmq/rabbit@localhost.log &lt;br /&gt;
 &lt;br /&gt;
在node2 mq02上停止rabbitmq应用程序，并重置（重置只是清除节点的配置，如果没有配置过，则可以省略），然后加入node1集群&lt;br /&gt;
[root@mq02 rabbitmq]# rabbitmqctl stop_app #&lt;br /&gt;
Stopping node rabbit@mq02 ...&lt;br /&gt;
&lt;br /&gt;
reset节点&lt;br /&gt;
&lt;br /&gt;
[root@mq02 rabbitmq]# rabbitmqctl reset&lt;br /&gt;
Resetting node rabbit@mq02 ... &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=trouble shooting=&lt;br /&gt;
&lt;br /&gt;
 rabbitmqctl reset&lt;br /&gt;
&lt;br /&gt;
23:49:15.657 [error] Error when reading /var/lib/rabbitmq/.erlang.cookie: eacces&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=see also=&lt;br /&gt;
[http://blog.51cto.com/zengestudy/1885054  good-RabbitMQ集群创建]&lt;br /&gt;
&lt;br /&gt;
[https://segmentfault.com/a/1190000010702020  CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用]&lt;br /&gt;
&lt;br /&gt;
[http://blog.51cto.com/wangwq/1951185 RabbitMQ集群搭建]&lt;br /&gt;
&lt;br /&gt;
[https://segmentfault.com/a/1190000010300803 RabbitMQ 源码 集群安装]&lt;br /&gt;
&lt;br /&gt;
[https://blog.linuxeye.cn/451.html RabbitMQ集群和高可用配置]&lt;br /&gt;
&lt;br /&gt;
[https://blog.linuxeye.cn/436.html RabbitMQ启动脚本]&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/79ca08116d57 消息队列之 RabbitMQ]&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/knowledgesea/p/6535766.html Rabbitmq集群高可用部署详细good]&lt;br /&gt;
&lt;br /&gt;
[https://www.jianshu.com/p/db0f5496f0d2 RabbitMQ HA集群搭建]&lt;br /&gt;
&lt;br /&gt;
[https://www.ibm.com/developerworks/cn/opensource/os-cn-RabbitMQ/index.html 高可用 RabbitMQ 集群自动化部署解决方案]&lt;br /&gt;
&lt;br /&gt;
[http://www.ywnds.com/?p=4741 RabbitMQ两种集群模式配置管理（五）]&lt;br /&gt;
&lt;br /&gt;
[https://my.oschina.net/louxin/blog/483402 Rabbitmq集群搭建笔记]&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/qq_34021712/article/details/72633520 rabbitmq集群搭建(多机)]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://blog.csdn.net/winy_lm/article/details/81128181 Rabbitmq镜像集群部署]&lt;br /&gt;
&lt;br /&gt;
==docker 不要的了==&lt;br /&gt;
&lt;br /&gt;
[https://www.cnblogs.com/xmai/p/7493062.html  RabbitMQ:Docker环境下搭建rabbitmq集群]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://segmentfault.com/a/1190000004394741 docker搭建rabbitmq集群 has elk reis zk elk etc]&lt;br /&gt;
&lt;br /&gt;
[http://www.ywnds.com/?p=7674 Docker：搭建RabbitMQ集群]&lt;br /&gt;
&lt;br /&gt;
[[category:ops]]&lt;/div&gt;</summary>
		<author><name>Evan</name></author>
	</entry>
</feed>