单个服务器部署多个rabbitmq
前情提要
真实部署环境是机房环境,不能携带手机,所以需要进行提前演练,我使用的docker镜像的方式进行构建。docker的环境搭建详见:两台服务器搭建三个节点-CSDN博客
rabbitmq的安装
加载指定的依赖文件
# 删除容器,重新构建(保证纯净)
docker stop demo-container
docker rm demo-container
#使用镜像启动容器
docker run -itd --name demo-container --privileged --volume /sys/fs/cgroup:/sys/fs/cgroup:ro kylin-with-systemd:v10-sp3 /usr/lib/systemd/systemd
# copy文件到容器
docker cp rabitmq.zip demo-container:/home
# 进入容器
docker exec -it demo-container bashcd /home
unzip rabitmq.zip
cd rabitmq
rpm包的安装
# 安装 Erlang 和 RabbitMQ 的所有依赖(强制安装)
rpm -ivh --force --nodeps *.rpm
# 查看是否成功安装rabbitmq服务
systemctl list-unit-files --type=service |grep rabbitmq
# 查看rabbitmq的启动脚本位置。(我的是:/usr/lib/systemd/system/rabbitmq-server.service)
find / -name "rabbitmq-server.service"
配置文件的配置
创建工作目录
ll /var/lib |grep rabbit
cp -rp /var/lib/rabbitmq /var/lib/rabbitmq3
cp -rp /var/lib/rabbitmq /var/lib/rabbitmq2
cp -rp /var/lib/rabbitmq /var/lib/rabbitmq1
编辑启动脚本文件
不明原因导致的使用配置文件启动失败。
nodeName整个集群内不能重复,@后面的域名必须能通过ping可达。
vim /usr/lib/systemd/system/rabbitmq-server-3.service
[Unit]
Description=RabbitMQ03 broker
After=network.target epmd@0.0.0.0.socket
Wants=network.target epmd@0.0.0.0.socket[Service]
Type=notify
User=rabbitmq
Group=rabbitmq
NotifyAccess=all
TimeoutStartSec=3600
WorkingDirectory=/var/lib/rabbitmq3
Environment="RABBITMQ_BASE=/var/lib/rabbitmq3"
Environment="HOME=/var/lib/rabbitmq3"
Environment="RABBITMQ_DIST_PORT=25673"
Environment="RABBITMQ_NODE_PORT=5673"
Environment="RABBITMQ_MANAGEMENT_PORT=15673"
Environment="RABBITMQ_NODENAME=rabbit03@localhost"
Environment="RABBITMQ_MNESIA_BASE=/var/lib/rabbitmq3/mnesia"
Environment="RABBITMQ_LOG_BASE=/var/lib/rabbitmq3/logs"
# Environment="RABBITMQ_CONFIG_FILE=/var/lib/rabbitmq3/config/rabbitmq"
ExecStart=/usr/lib/rabbitmq/bin/rabbitmq-server
ExecStop=/usr/lib/rabbitmq/bin/rabbitmqctl -n rabbit03@localhost stop
ExecStop=/bin/sh -c "while ps -p $MAINPID >/dev/null 2>&1; do sleep 1; done"[Install]
WantedBy=multi-user.target
启动命令
systemctl daemon-reload
systemctl stop rabbitmq-server-3.service
systemctl start rabbitmq-server-3.service
systemctl status rabbitmq-server-3.servicesystemctl start rabbitmq-server-3.service
systemctl start rabbitmq-server-2.service
systemctl start rabbitmq-server-1.service
# 查看节点运行情况:
rabbitmqctl rabbit03@localhost cluster_status
集群组建
同步erlang的cookie文件
#组建集群:RabbitMQ 集群依赖 Erlang 集群,而 Erlang 集群通过 Cookie 进行通信认证,所以要保证所有机器的 .erlang.cookie 内容一致,且为只读权限
systemctl stop rabbitmq-server-3.service
systemctl stop rabbitmq-server-2.service
systemctl stop rabbitmq-server-1.servicechown -R rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
chmod 400 /var/lib/rabbitmq/.erlang.cookie
cp rabbitmq/.erlang.cookie rabbitmq2/.erlang.cookie
cp rabbitmq/.erlang.cookie rabbitmq1/.erlang.cookie
cp rabbitmq/.erlang.cookie rabbitmq3/.erlang.cookiesystemctl start rabbitmq-server-1.service
systemctl start rabbitmq-server-2.service
systemctl start rabbitmq-server-3.service
其他节点加入主节点
# 节点02 加入03主节点(因为node被重命名,必须加-n 启动脚本的nodeName)
# 停止app
rabbitmqctl -n rabbit02@localhost stop_app
# 重置
rabbitmqctl -n rabbit02@localhost reset# 加入节点
rabbitmqctl -n rabbit02@localhost join_cluster rabbit03@localhost# 启动节点
rabbitmqctl -n rabbit02@localhost start_app# 节点01 加入03主节点
rabbitmqctl -n rabbit01@localhost stop_app
rabbitmqctl -n rabbit01@localhost reset
rabbitmqctl -n rabbit01@localhost join_cluster rabbit03@localhost
rabbitmqctl -n rabbit01@localhost start_app# 验证集群启动状态
rabbitmqctl -n rabbit@localhost cluster_status