rabbitmq实战(四)——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代理操作所需的所有数据/状态都将跨所有节点复制。这方面的一个例外是消息队列,默认情况下,消息队列位于一个节点上,尽管它们可以从所有节点看到和访问
集群类型:
- 主从副本集群
- 镜像集群
本章先介绍普通副本集群
下章介绍常用的镜像集群
点击可查看:
集群规划
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) cant 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@mq1s 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是看不到界面的
