1) RabbitMQ Master服务器配置要求
(1) 安装完成RabbitMQ程序并启动
(2) 授权并关联"/" vhost
[root@node1 ~]# rabbitmqctl add_user snowchuai password
[root@node1 ~]# rabbitmqctl set_user_tags snowchuai administrator
[root@node1 ~]# rabbitmqctl set_permissions -p / snowchuai ".*" ".*" ".*"
[root@node1 ~]# rabbitmqctl list_user_permissions snowchuai
Listing permissions for user "snowchuai"
/ .* .* .*
(3) 开启WEB UI
(4) 安装好rabbitmqadmin工具
2) 在所有RabbitMQ节点上安装RabbitMQ服务
[root@node1 ~]# pssh -h host-list.txt -i 'yum --enablerepo=epel install rabbitmq-server -y'
[root@node1 ~]# pssh -h host-list.txt -i 'systemctl enable --now rabbitmq-server'
[1] 17:55:21 [SUCCESS] root@node3.1000cc.net
[2] 17:55:21 [SUCCESS] root@node2.1000cc.net
[root@node1 ~]# pssh -h host-list.txt -i 'firewall-cmd --add-port={4369/tcp,5672/tcp,15672,tcp,25672/tcp} --permanent'
[1] 17:55:21 [SUCCESS] root@node3.1000cc.net
[2] 17:55:21 [SUCCESS] root@node2.1000cc.net
[root@node1 ~]# pssh -h host-list.txt -i 'firewall-cmd --reload'
[1] 17:55:21 [SUCCESS] root@node3.1000cc.net
[2] 17:55:21 [SUCCESS] root@node2.1000cc.net
[root@node1 ~]# pssh -h host-list.txt -i 'rabbitmq-plugins enable rabbitmq_management'
[1] 18:30:03 [SUCCESS] root@node2.1000cc.net
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
[2] 18:30:03 [SUCCESS] root@node3.1000cc.net
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@node3... started 6 plugins
Applying plugin configuration to rabbit@node2... started 6 plugins.
[root@node1 ~]# pssh -h host-list.txt -i 'systemctl restart rabbitmq-server'
3)配置Rabbit Cluster
(1) 同步cookie至其他节点
[root@node1 ~]# pscp.pssh -h host-list.txt /var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
[1] 18:01:47 [SUCCESS] root@node2.1000cc.net
[2] 18:01:47 [SUCCESS] root@node3.1000cc.net
# 此处如果第一次重启失败,可以多试几次
[root@node1 ~]# pssh -h host-list.txt -i 'systemctl restart rabbitmq-server'
[1] 18:05:36 [SUCCESS] root@node2.1000cc.net
[2] 18:05:36 [SUCCESS] root@node3.1000cc.net
(2) 停止 application
[root@node1 ~]# pssh -h host-list.txt -i 'rabbitmqctl stop_app'
[1] 18:08:27 [SUCCESS] root@node3.1000cc.net
[1] 18:08:27 [SUCCESS] root@node2.1000cc.net
root@node1 ~]# pssh -h host-list.txt -i 'rabbitmqctl reset'
[1] 18:09:39 [SUCCESS] root@node2.1000cc.net
[2] 18:09:39 [SUCCESS] root@node3.1000cc.net
(3) 将节点加入Cluster
[root@node1 ~]# pssh -h host-list.txt -i 'rabbitmqctl join_cluster rabbit@node1'
[1] 18:11:21 [SUCCESS] root@node2.1000cc.net
[2] 18:11:21 [SUCCESS] root@node3.1000cc.net
(4) 启动 application
[root@node1 ~]# pssh -h host-list.txt -i 'rabbitmqctl start_app'
[1] 18:12:27 [SUCCESS] root@node2.1000cc.net
[2] 18:12:27 [SUCCESS] root@node3.1000cc.net
(5) 验证Cluster状态
[root@node1 ~]# pssh -h host-list.txt -i 'rabbitmqctl cluster_status'
[1] 18:13:26 [SUCCESS] root@node2.1000cc.net
Cluster status of node rabbit@node2
[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]},
{running_nodes,[rabbit@node3,rabbit@node1,rabbit@node2]},
{cluster_name,<<"rabbit@node1.1000cc.net">>},
{partitions,[]},
{alarms,[{rabbit@node3,[]},{rabbit@node1,[]},{rabbit@node2,[]}]}]
[2] 18:13:26 [SUCCESS] root@node3.1000cc.net
Cluster status of node rabbit@node3
[{nodes,[{disc,[rabbit@node1,rabbit@node2,rabbit@node3]}]},
{running_nodes,[rabbit@node1,rabbit@node2,rabbit@node3]},
{cluster_name,<<"rabbit@node1.1000cc.net">>},
{partitions,[]},
{alarms,[{rabbit@node1,[]},{rabbit@node2,[]},{rabbit@node3,[]}]}]
(6) 同步队列
[root@node1 ~]# rabbitmqadmin declare queue name=cluster-queue
queue declared
(7) 设定同步队列规则
# 规则设置语法: rabbitmqctl set_policy [policy name] [Queue_Name] [Mode]
[root@node1 ~]# rabbitmqctl set_policy ha-policy "cluster-queue" '{"ha-mode":"all"}'
Setting policy "ha-policy" for pattern "cluster-queue" to "{\"ha-mode\":\"all\"}" with priority "0"
(8) 验证
[root@node1 ~]# rabbitmqadmin list queues name node policy slave_nodes state synchronised_slave_nodes
+---------------+--------------+-----------+----------------------------------+---------+----------------------------------+
| name | node | policy | slave_nodes | state | synchronised_slave_nodes |
+---------------+--------------+-----------+----------------------------------+---------+----------------------------------+
| cluster-queue | rabbit@node1 | ha-policy | ["rabbit@node2", "rabbit@node3"] | running | ["rabbit@node2", "rabbit@node3"] |
+---------------+--------------+-----------+----------------------------------+---------+----------------------------------+
(9) 访问node1.1000cc.net的WEB UI确认
|