Docker之RabbitMQ部署
Docker之RabbitMQ部署:高可用消息队列服务
核心部署命令
docker run -id \
--name=rabbitmq \
-v /home/rabbit:/var/lib/rabbitmq \
--restart unless-stopped \
-p 15672:15672 \
-p 5672:5672 \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
rabbitmq:management
参数详解
端口映射
端口 | 协议 | 用途 |
---|---|---|
5672 | AMQP | 消息通信主端口 |
15672 | HTTP | 管理控制台端口 |
关键配置项
参数 | 说明 | 必要性 |
---|---|---|
-v /home/rabbit | 数据持久化目录 | 必选 |
--restart unless-stopped | 异常退出时自动重启 | 推荐 |
-e RABBITMQ_DEFAULT_USER | 管理员用户名 | 必选 |
-e RABBITMQ_DEFAULT_PASS | 管理员密码 | 必选 |
rabbitmq:management | 带管理插件的镜像 | 必选 |
访问验证
控制台访问:
- 地址:
http://服务器IP:15672
- 账号:admin/admin
- 地址:
命令行验证:
docker exec -it rabbitmq rabbitmqctl list_users
生产环境配置建议
1. 配置文件挂载(推荐)
-v /home/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
示例配置文件:
# 内存限制
vm_memory_high_watermark.absolute = 2GB
# 磁盘预警
disk_free_limit.absolute = 5GB
# 集群配置
cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
cluster_formation.classic_config.nodes.1 = rabbit@node1
2. 网络优化
--network mynet \
--hostname rabbit1 \
-e RABBITMQ_NODENAME=rabbit@rabbit1
3. 资源限制
--memory=2g \
--cpus=1
常用管理命令
用户管理
# 添加用户
docker exec rabbitmq rabbitmqctl add_user user1 pass1
# 设置权限
docker exec rabbitmq rabbitmqctl set_permissions -p / user1 ".*" ".*" ".*"
队列监控
# 查看队列列表
docker exec rabbitmq rabbitmqctl list_queues
# 查看连接数
docker exec rabbitmq rabbitmqctl list_connections
数据备份方案
# 备份数据目录
tar -czvf rabbitmq_backup.tar.gz /home/rabbit
# 恢复数据
docker stop rabbitmq
tar -xzvf rabbitmq_backup.tar.gz -C /home/
docker start rabbitmq
高可用部署方案
1. 集群部署
# 节点1
docker run ... -e RABBITMQ_ERLANG_COOKIE='secret' ...
# 节点2
docker run ... -e RABBITMQ_ERLANG_COOKIE='secret' ...
2. 镜像队列配置
docker exec rabbitmq rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
常见问题解决
Q:控制台无法访问?
# 检查插件是否启用
docker exec rabbitmq rabbitmq-plugins list
# 手动启用管理插件
docker exec rabbitmq rabbitmq-plugins enable rabbitmq_management
Q:磁盘空间不足?
# 清理消息
docker exec rabbitmq rabbitmqctl purge_queue queue_name
# 重置节点(慎用)
docker exec rabbitmq rabbitmqctl reset
Q:内存占用过高?
# 调整内存阈值
docker exec rabbitmq rabbitmqctl set_vm_memory_high_watermark 0.6
此部署方式:
- 带Web管理界面的消息队列服务
- 持久化的消息存储
- 完善的用户权限系统
- 易于扩展的集群架构
提示:生产环境建议定期执行rabbitmqctl status
监控服务状态