可查看 rabbitmq官方集群方案
架构图
All data/state required for the operation of a RabbitMQ broker is replicated across all nodes. An exception to this are message queues, which by default reside on one node, though they are visible and reachable from all nodes. To replicate queues across nodes in a cluster --摘自官网
默认情况下:RabbitMQ代理操作所需的所有数据/状态都将跨所有节点复制。这方面的一个例外是消息队列,默认情况下,消息队列位于一个节点上,尽管它们可以从所有节点看到和访问
集群类型:
- 主从副本集群
- 镜像集群
本章先介绍普通副本集群
下章介绍常用的镜像集群
点击可查看: rabbitmq实战(十一)——RabbitMQ集群(镜像集群)
集群规划
node1: 192.168.226.134 mq01 master 主节点
node2: 192.168.226.135 mq02 repl1 副本节点
node3: 192.168.226.136 mq03 repl2 副本节点
1.修改三台机器主机名和ip映射
更改三台MQ节点的计算机名分别为mq0、mq1 和mq2,然后修改hosts配置文件
vi /etc/hostname //其他两台相同
mq01.localdomain
vi /etc/hosts //每台机器都加入这三行配置
192.168.226.134 mq01 //注意不能带.注意-主机名称也要更改
192.168.226.135 mq02
192.168.226.136 mq03
改完后记得reboot
重启一下机器吧,有些说可以用source命令,不过好像不生效;
2.三个机器安装rabbitmq,并同步cookie文件
在node0上执行:
先同步cookie文件到mq02
[root@localhost etc]# scp /var/lib/rabbitmq/.erlang.cookie root@mq02:/var/lib/rabbitmq/
The authenticity of host 'mq1 (192.168.226.131)' can't be established.
ECDSA key fingerprint is 67:99:45:3c:2c:0e:2e:6b:e9:2b:0c:ba:d4:0c:28:9a.
Are you sure you want to continue connecting (yes/no)? y
Please type 'yes' or 'no': yes
Warning: Permanently added 'mq1,192.168.226.131' (ECDSA) to the list of known hosts.
root@mq1's password:
.erlang.cookie
再同步cookie文件到mq03
[root@localhost etc]# scp /var/lib/rabbitmq/.erlang.cookie root@mq03:/var/lib/rabbitmq/
3.查看cookie是否一致
node1: cat /var/lib/rabbitmq/.erlang.cookie
node2: cat /var/lib/rabbitmq/.erlang.cookie
node3: cat /var/lib/rabbitmq/.erlang.cookie
4.后台启动rabbitmq所有节点执行如下命令
设置 rabbitmq分别启动节点和应用
rabbitmq-server -detached
5.启动成功访问管理界面
这一步一定要分别访问一下界面
如果访问不了,那么就是防火墙端口没开放*
此时,我在这里就是因为防火墙的问题导致耗费了大量时间
6.在从节点(node2和node3)执行加入集群命令:
1.关闭 rabbitmqctl stop_app
2.加入集群 rabbitmqctl join_cluster rabbit@mq01
3.启动服务 rabbitmqctl start_app
[root@mq02 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@mq02 ...
[root@mq02 ~]# rabbitmqctl join_cluster rabbit@mq01
Clustering node rabbit@mq02 with rabbit@mq01
[root@mq02 ~]# rabbitmqctl start_app
Starting node rabbit@mq02 ...
7.查看集群状态,任意节点执行:
[root@mq02 ~]# rabbitmqctl cluster_status
[root@mq02 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@mq02 ...
Basics
Cluster name: rabbit@mq03
Disk Nodes
rabbit@mq01
rabbit@mq02
rabbit@mq03
Running Nodes
rabbit@mq01
rabbit@mq02
rabbit@mq03
Versions
rabbit@mq01: RabbitMQ 3.8.8 on Erlang 23.0.2
rabbit@mq02: RabbitMQ 3.8.8 on Erlang 23.0.2
rabbit@mq03: RabbitMQ 3.8.8 on Erlang 23.0.2
Maintenance status
Node: rabbit@mq01, status: not under maintenance
Node: rabbit@mq02, status: not under maintenance
Node: rabbit@mq03, status: not under maintenance
...
...
看到这些信息,说明集群已成功
tips:
rabbitmqctl start_app的方式是可以有web页面的,而systemctl start rabbitmq-server是看不到界面的
8.登录管理界面,展示如下状态:
最后,如果看完对你有所帮助,不要吝啬关注 / 点赞 / 收藏哟,感谢感谢~