使用docker容器对RabbitMQ单机部署集群,要求一主二从

该文详细描述了如何使用Docker创建RabbitMQ集群,包括设置容器连接,通过命令行进行集群配置,如停止应用、重置、加入集群,以及检查集群状态。同时,文中还介绍了如何添加和设置具有管理员权限的用户。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、创建容器并建立连接

主myrabbit1:

docker run -d --hostname rabbit1 --name myrabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' -p 15672:15672 -p 5672:5672 rabbitmq:3.11-management

从myrabbit2要连接myrabbit1:

docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.11-management

从mytabbit3要连接myrabbit1和myrabbit2: 

docker run -d --hostname rabbit3 --name myrabbit3 -p 15674:15672 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.11-management

查看是否部署成功:

二、进入容器配置集群

先进入容器1,将容器重置:

docker exec -it myrabbit1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

 同样的方式再去配置2和3,但是2和3要加入1的集群,以1为主节点,23为从节点:

docker exec -it myrabbit2 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit

参数“–ram”表示设置为内存节点,忽略此参数默认为磁盘节点。

docker exec -it myrabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit1
rabbitmqctl start_app
exit

都配置好了以后可以再去rabbit1中看一下是否形成集群:

docker exec -it myrabbit1 bash
rabbitmqctl cluster_status
exit

可以看到结果是:

xzd@xzd-virtual-machine:~$ docker exec -it myrabbit1 bash
root@rabbit1:/# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbit1 ...

Basics

Cluster name: rabbit@rabbit1
Total CPU cores available cluster-wide: 4

Disk Nodes

rabbit@rabbit1

RAM Nodes

rabbit@rabbit2
rabbit@rabbit3

Running Nodes

rabbit@rabbit1
rabbit@rabbit2
rabbit@rabbit3

Versions

rabbit@rabbit1: RabbitMQ 3.11.11 on Erlang 25.3
rabbit@rabbit2:   on Erlang 
rabbit@rabbit3:   on Erlang 

CPU Cores

Node: rabbit@rabbit1, available CPU cores: 4
Node: rabbit@rabbit2, available CPU cores: 0
Node: rabbit@rabbit3, available CPU cores: 0

Maintenance status

Node: rabbit@rabbit1, status: not under maintenance
Node: rabbit@rabbit2, status: unknown
Node: rabbit@rabbit3, status: unknown

Alarms

(none)

Network Partitions

(none)

Listeners

Node: rabbit@rabbit1, interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: rabbit@rabbit1, interface: [::], port: 15692, protocol: http/prometheus, purpose: Prometheus exporter API over HTTP
Node: rabbit@rabbit1, interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: rabbit@rabbit1, interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0

Feature flags

Flag: classic_mirrored_queue_version, state: enabled
Flag: classic_queue_type_delivery_support, state: enabled
Flag: direct_exchange_routing_v2, state: enabled
Flag: drop_unroutable_metric, state: enabled
Flag: empty_basic_get_metric, state: enabled
Flag: feature_flags_v2, state: enabled
Flag: implicit_default_bindings, state: enabled
Flag: listener_records_in_ets, state: enabled
Flag: maintenance_mode_status, state: enabled
Flag: quorum_queue, state: enabled
Flag: stream_queue, state: enabled
Flag: stream_single_active_consumer, state: enabled
Flag: tracking_records_in_ets, state: enabled
Flag: user_limits, state: enabled
Flag: virtual_host_metadata, state: enabled

说明已经完成了集群部署!

我们也可以进入到RabbitMQ可视化界面查看一下:

找到IP地址:http://192.168.235.132:15672/#/

用户名:guest 密码:guest

进入可以查看已经形成了集群 

 

三、【额外】设置一下管理员账号 

设置管理员账号目的是设置一个可以获取全部权限。

如果是完成第二步后,下面任意一个机子部署就好了,所有都能设置上去。

docker exec -it myrabbit1 bash
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
exit

docker exec -it myrabbit2 bash
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
exit

docker exec -it myrabbit3 bash
rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
exit

### 如何使用 Docker 安装 RabbitMQ 的最佳实践 #### 创建挂载目录 为了确保数据持久化以及便于管理配置文件,在宿机上创建专用的挂载目录是非常重要的。例如,可以在 Linux 系统中执行以下命令来创建并授权个专门用于 RabbitMQ 数据存储的目录[^2]。 ```bash sudo mkdir -p /usr/local/docker/rabbitmq && sudo chmod 777 /usr/local/docker/rabbitmq ``` 此操作不仅提供了安全的数据保存路径,还允许容器内的 RabbitMQ 进程能够正常读写这些数据。 #### 部署单机RabbitMQ 启动 RabbitMQ 容器可以通过 `docker run` 命令完成。下面是个典型的运行命令示例: ```bash docker run -d \ --name rabbitmq-server \ -p 5672:5672 \ -p 15672:15672 \ -v /usr/local/docker/rabbitmq/data:/var/lib/rabbitmq \ -v /usr/local/docker/rabbitmq/log:/var/log/rabbitmq \ rabbitmq:management ``` 上述命令中的参数解释如下: - `-d`: 后台模式运行容器- `--name rabbitmq-server`: 设置容器名称为 `rabbitmq-server`。 - `-p 5672:5672`: 将 RabbitMQ 默认消息端口映射到本地。 - `-p 15672:15672`: 映射 Web 管理界面端口至本机。 - `-v ...`: 使用之前创建的挂载目录分别绑定日志和数据卷[^1]。 #### 初始化与重置 RabbitMQ 节点 如果需要初始化或者重新配置某个 RabbitMQ 实例,则可通过进入容器内部执行相关命令实现。比如停止应用、清除状态再重启服务等操作可按如下方式处理[^3]: ```bash docker exec -it myrabbit1 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl start_app exit ``` #### 构建高可用集群环境 对于生产环境中构建多节点组成的 RabbitMQ 高可用集群来说,除了单独部署多个实例外还需要让它们彼此之间形成协作关系。假设已经存在名为 `myrabbit1` 和 `myrabbit2` 的两个节点,那么新增加第三个节点 (`myrabbit3`) 加入该集群的具体方法如下所示[^4]: ```bash docker exec -it myrabbit3 bash rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster --ram rabbit@rabbit1 rabbitmqctl start_app exit ``` 以上步骤展示了从基础安装到高级集群搭建整个过程中涉及的关键环节和技术要点。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值