RabbitMQ 集群安装
一般是3个节点部署集群的 RabbitMQ
注:需要先使用 rpm 在节点上先安装 RabbitMQ 程序。(erlang 及 RabbitMQ 的 rpm 包请参考 versions 目录下关于 erlang 及 RabbitMQ 的 nos 下载地址)
获取并安装 RabbitMQ 软件
yum -y install centos-release-rabbitmq-38.noarch
yum -y install rabbitmq-server
配置
hosts 配置
修改或确认3个节点的主机名能够进行 DNS 解析
10.0.0.1 node1
10.0.0.2 node2
10.0.0.3 node3
node1 配置
- /etc/rabbitmq/rabbitmq.conf
management.tcp.ip = 0.0.0.0 management.tcp.port = 15672
- /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 RABBITMQ_LOG_BASE=/data/rabbitmq/logs RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
- 写入数据需要修改目录权限
mkdir -p /data/rabbitmq/logs mkdir -p /data/rabbitmq/data chown -R rabbitmq /data/rabbitmq systemctl enable rabbitmq-server systemctl start rabbitmq-server
- 创建管理员
rabbitmqctl add_user root root -n rabbit1@node1 rabbitmqctl set_user_tags root administrator -n rabbit1@node1 rabbitmqctl set_permissions -p / root ".*" ".*" ".*" -n rabbit1@node1
- 启动插件
rabbitmq-plugins enable rabbitmq_management rabbitmq-plugins enable rabbitmq_mqtt rabbitmq-plugins enable rabbitmq_web_mqtt
使用 rabbitmq-plugins list
检查指定的插件是否已启用。
node2 配置
- /etc/rabbitmq/rabbitmq.conf
management.tcp.ip = 0.0.0.0 management.tcp.port = 15672
- /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit2 RABBITMQ_LOG_BASE=/data/rabbitmq/logs RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
- 写入数据需要修改目录权限
mkdir -p /data/rabbitmq/logs mkdir -p /data/rabbitmq/data chown -R rabbitmq /data/rabbitmq systemctl enable rabbitmq-server systemctl start rabbitmq-server
- 创建管理员
rabbitmqctl add_user root root -n rabbit2@node2 rabbitmqctl set_user_tags root administrator -n rabbit2@node2 rabbitmqctl set_permissions -p / root ".*" ".*" ".*" -n rabbit2@node2
- 启动插件:
rabbitmq-plugins enable rabbitmq_management rabbitmq-plugins enable rabbitmq_mqtt rabbitmq-plugins enable rabbitmq_web_mqtt
使用 rabbitmq-plugins list
检查指定的插件是否已启用。
node3 配置
- /etc/rabbitmq/rabbitmq.conf
management.tcp.ip = 0.0.0.0 management.tcp.port = 15672
- /etc/rabbitmq/rabbitmq-env.conf
RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit3 RABBITMQ_LOG_BASE=/data/rabbitmq/logs RABBITMQ_MNESIA_BASE=/data/rabbitmq/data
- 写入数据需要修改目录权限
mkdir -p /data/rabbitmq/logs mkdir -p /data/rabbitmq/data chown -R rabbitmq /data/rabbitmq systemctl enable rabbitmq-server systemctl start rabbitmq-server
创建管理员
rabbitmqctl add_user root root -n rabbit3@node3 rabbitmqctl set_user_tags root administrator -n rabbit3@node3 rabbitmqctl set_permissions -p / root ".*" ".*" ".*" -n rabbit3@node3
- 启动插件
rabbitmq-plugins enable rabbitmq_management rabbitmq-plugins enable rabbitmq_mqtt rabbitmq-plugins enable rabbitmq_web_mqtt
使用 rabbitmq-plugins list
检查指定的插件是否已启用。
创建集群
在 node1 节点上执行
- 复制 cookie
编辑 RabbitMQ 的 cookie 文件,以确保各个节点的 cookie 文件使用的是同一个值。
读取 node1 的 cookie 文件,复制内容到 node2 及 node3。cookie 文件一般存放在 ~/.erlang.cookie
或 /var/lib/rabbitmq/.erlang.cookie
。
scp /var/lib/rabbitmq/.erlang.cookie node2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie node3:/var/lib/rabbitmq/.erlang.cookie
ssh node2 "systemctl restart rabbitmq-server"
ssh node3 "systemctl restart rabbitmq-server"
- 创建集群
rabbitmqctl -n rabbit2@node2 stop_app
rabbitmqctl -n rabbit2@node2 reset
rabbitmqctl -n rabbit2@node2 join_cluster rabbit1@node1
rabbitmqctl -n rabbit2@node2 start app
rabbitmqctl -n rabbit3@node3 stop_app
rabbitmqctl -n rabbit3@node3 reset
rabbitmqctl -n rabbit3@node3 join_cluster rabbit1@node1
rabbitmqctl -n rabbit3@node3 start app
- 查看集群状态
rabbitmqctl -n rabbit1@node1 cluster_status