RabbitMQ集群搭建
2017-12-12 18:35
253 查看
一. 搭建MQ
这里选用三台主机,主机名分别是name1, name2 , name3搭建教程请参考:Linux Rabbit搭建教程
二. 设置cookie
RabbitMQ集群是通过erlang通信的,要保证每个节点的cookie是相同的。读取其中一个节点的cookie, 并复制到其他节点(节点之间通过cookie确定相互是否可通信)
erlang.cookie是什么
erlang.cookie是erlang实现分布式的必要文件,erlang分布式的每个节点上要保持相同的.erlang.cookie文件,同时保证文件的权限是400。
.erlang.cookie存放路径
官方在介绍集群的文档中提到过.erlang.cookie一般会存在这两个地址:第一个是$home/.erlang.cookie;第二个地方就是/var/lib/rabbitmq/.erlang.cookie。
如果我们使用解压缩方式安装部署的rabbitmq,那么这个文件会在home目录下,也就是home/.erlang.cookie。
如果我们使用rpm等安装包方式进行安装的,那么这个文件会在/var/lib/rabbitmq目录下。
注意:.erlang.cookie是隐藏文件,需要ll -a 才能查看到
三. 设置host
配置各节点的hosts文件,使得每个节点都包含各个节点的映射信息vim /etc/hosts
xxx.xxx.xxx.xxx name1 xxx.xxx.xxx.xxx name2 xxx.xxx.xxx.xxx name3
四. 启动
使用 -detached 参数运行各节点rabbitmq-server -detached
查看集群状态,此时还没有集群节点
rabbitmqctl cluster_status
五. 建立集群
以name1为主节点,在name2上:rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@name1 rabbitmqctl start_app
rabbitmqctl reset 是重置的意思,清空数据,绑定的集群等
name3和name2操作一样
rabbitmqctl cluster_status
输出
Cluster status of node rabbit@localhost [{nodes,[{disc,['rabbit@name1',rabbit@name2]}]}, {running_nodes,['rabbit@name1',rabbit@name2]}, {cluster_name,<<"rabbit@name1">>}, {partitions,[]}, {alarms,[{'rabbit@name1',[]},{rabbit@name2,[]}]}]
以上以两个节点为例
六. 测试
访问任意节点的http://**:15672 来查看集群信息:图略
以上以两个节点为例
七. 那些坑
[root@rabbitmqsalver2 /]# rabbitmqctl join_cluster --ram rabbit@rabbitmqmaster Clustering node rabbit@rabbitmqsalver2 with rabbit@rabbitmqmaster ... Error: unable to connect to nodes [rabbit@rabbitmqmaster]: nodedown DIAGNOSTICS =========== attempted to contact: [rabbit@name2] rabbit@rabbitmqmaster: * connected to epmd (port 4369) on name2 * epmd reports node 'rabbit' running on port 25672 * TCP connection succeeded but Erlang distribution failed * Authentication failed (rejected by the remote node), please check the Erlang cookie current node details: - node name: 'rabbitmq-cli-88@name2' - home dir: /root - cookie hash: 55WeQTsiv71JcEDq/JcE9Q==
错误原因:
- 1. 各个节点cookie不一致
- 2. .erlang.cookie 文件的权限需要保证是400
-
chmod 400 .erlang.cookie
- 3. hosts文件中需要设置所有的节点映射
- (且千万不要重复映射localhost,默认的就好)
总之有太多的坑了,踩踩就习惯了~
八. 其他
rabbit@name2作为内存节点加入到rabbit@name1的集群中rabbitmqctl join_cluster --ram rabbit@name1
不加–ram标志,默认就是磁盘节点模式
改变将节点类型从内存改为磁盘
可以使用rabbitmqctl change_cluster_node_type命令来改变节点类型
name2$ rabbitmqctl stop name2$ rabbitmqctl change_cluster_node_type disc name2$ rabbitmqctl start name3$ rabbitmqctl stop name3$ rabbitmqctl change_cluster_node_type ram name3$ rabbitmqctl start
无论何时,集群中至少要有一个磁盘节点处在运行中,以防止数据丢失。在很多情况下,RabbitMQ将会阻止创建一个仅仅有内存节点的集群,但是它不会阻止你停止或者重置所有磁盘节点,这将导致一个仅仅有内存节点的集群出现。这样做是不可取的,这会很容易丢失数据。
解散集群
当节点想要脱离集群时,需要显示地从集群中将其移除。我们首先移除rabbit@name3,需要通过如下操作才能将其从集群中移除:
name3$ rabbitmqctl stop_app name3$ rabbitmqctl reset name3$ rabbitmqctl start_app
相关文章推荐
- RabbitMQ 高可用:在 Windows 搭建镜像集群
- RabbitMQ-Windows单机集群搭建
- RabbitMQ3.6.5集群搭建和遇到的问题
- 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接
- windows单机搭建RabbitMQ集群
- RabbitMQ集群搭建与测试
- rabbitmq集群搭建
- rabbitmq集群搭建(多机)
- Rabbitmq的安装及集群环境的搭建 推荐
- docker搭建rabbitmq集群环境的方法
- RabbitMQ 系列之集群搭建
- RabbitMQ集群搭建
- RabbitMQ集群环境搭建-4
- RabbitMQ集群搭建
- RabbitMQ集群环境搭建教程收集(待实践)
- (转)CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用
- rabbitMQ 安装,集群搭建, 编码
- centos搭建rabbitmq集群
- 【rabbitmq】rabbitmq集群环境搭建
- CentOS7搭建rabbitmq集群