部署环境准备
192.168.81.128 rabbitmq-1
192.168.81.129 rabbitmq-2
192.168.81.130 rabbitmq-3
首先创建挂载目录(三个节点都创建)
systemctl stop firewalld && setenforce 0 关闭防火墙和selinux
mkdir /data/rabbitmq -p
cd /data/rabbitmq/ && vim hosts 编写hosts文件
192.168.81.128 rabbitmq-1
192.168.81.129 rabbitmq-2
192.168.81.130 rabbitmq-3
节点1启动
docker run -itd --net host --name rabbitmq-1 --hostname rabbitmq-1 --log-opt max-size=30m --log-opt max-file=3 -v /data/rabbitmq:/var/lib/rabbitmq -v /data/rabbitmq/hosts:/etc/hosts -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='zjiosjdiojafodja' docker.io/library/rabbitmq:3.11.28-management
-d`: 表示以分离模式运行容器。
--net host`: 使用宿主机网络模式,容器将与宿主机共享网络命名空间。
--name rabbitmq-1`: 为容器指定名称为 `rabbitmq-1`。
--hostname: 指定容器主机名为 `rabbitmq-1`。
--log-opt max-size=30m`: 设置日志文件的最大大小为 30MB。
--log-opt max-file=3`: 设置存储的日志文件数量上限为 3 个。
-v /data/rabbitmq:/var/lib/rabbitmq:z`: 将宿主机上的 `/data/rabbitmq` 目录挂载到容器内的 `/var/lib/rabbitmq` 目录。
-v /data/rabbitmq/hosts:/etc/hosts`: 将宿主机上的 `/data/rabbitmq/hosts` 文件挂载到容器内的 `/etc/hosts` 文件。
-e RABBITMQ_DEFAULT_USER=admin`: 设置 RabbitMQ 默认用户的用户名为 `admin`。
-e RABBITMQ_DEFAULT_PASS=admin`: 设置 RabbitMQ 默认用户的密码为 `admin`。
-e RABBITMQ_ERLANG_COOKIE='zjiosjdiojafodja' `: 设置Erlang Cookie 的值为在 RabbitMQ 集群中用于节点之间的身份验证和通信。
节点1启动后把.erlang.cookie文件发送到2/3节点,用于节点之间的身份验证和通信。
scp /data/rabbitmq/.erlang.cookie 192.168.81.129:/data/rabbitmq/
scp /data/rabbitmq/.erlang.cookie 192.168.81.130:/data/rabbitmq/
节点2启动
docker run -itd --net host --name rabbitmq-2 --hostname rabbitmq-1 --log-opt max-size=30m --log-opt max-file=3 -v /data/rabbitmq:/var/lib/rabbitmq -v /data/rabbitmq/hosts:/etc/hosts -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin-e RABBITMQ_ERLANG_COOKIE='zjiosjdiojafodja' docker.io/library/rabbitmq:3.11.28-management
节点3启动
docker run -itd --net host --name rabbitmq-3 --hostname rabbitmq-3 --log-opt max-size=30m --log-opt max-file=3 -v /data/rabbitmq:/var/lib/rabbitmq -v /data/rabbitmq/hosts:/etc/hosts -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_COOKIE='zjiosjdiojafodja' docker.io/library/rabbitmq:3.11.28-management
在 RabbitMQ 集群中节点可以分为磁盘节点和内存节点
磁盘节点:
磁盘节点存储队列的持久化消息和元数据。
当队列中的消息过多时,磁盘节点能够有效地处理消息的持久化和存储,因为它们依赖于磁盘而不是内存。
磁盘节点适用于需要长时间保留大量消息的情况,以及对消息持久性要求较高的场景。
内存节点:
内存节点主要存储队列的非持久化消息和元数据。
内存节点使用RAM存储消息,因此对于那些需要快速响应时间和低延迟的应用场景非常有用。
内存节点适用于对性能要求较高,但不需要持久化所有消息的场景。可以分为磁盘节点和内存节点
可以按照需求来配置节点加入的方式
rabbitmqctl join_cluster rabbit@rabbitmq-1 这样是以磁盘节点的方式加入
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1 这样是以内存节点的方式加入
启动节点2加入集群
docker exec -it rabbitmq-2 /bin/bash
rabbitmqctl stop_app 停止rabbitmq
rabbitmqctl reset 重置节点状态
rabbitmqctl join_cluster rabbit@rabbitmq-1 加入集群
rabbitmqctl 命令行工具
join_cluster 节点加入集群的命令
rabbit@rabbitmq-1 集群中已存在的节点 rabbit是节点名称 rabbitmq-1 主机名
rabbitmqctl start_app 启动服务
启动节点3加入集群
docker exec -it rabbitmq-3 /bin/bash
rabbitmqctl stop_app 停止rabbitmq
rabbitmqctl reset 重置节点状态
rabbitmqctl join_cluster rabbit@rabbitmq-1 加入集群
rabbitmqctl join_cluster --ram rabbit@rabbitmq-1 节点3可以尝试用内存节点加入
rabbitmqctl start_app 启动服务
来到节点1查看集群状态
docker exec -it rabbitmq-1 /bin/bash
rabbitmqctl cluster_status 查看集群状态
访问web页面查看集群状态
192.168.81.128:15672 用户名admin密码admin
可以看到三个节点都是正常的,到这集群就部署好了。