docker搭建rabbitmq集群
docker搭建rabbitmq集群
一、简介
最近项目中又开始使用rabbitmq了,此处简单记录一下如何使用docker来搭建一个rabbitmq集群。
二、需求
在一个云服务器上,使用docker搭建2个节点的集群,此处搭建基于镜像模式
集群,而不是一般集群模式。
节点 | 主机名 | 容器名 | 数据卷 | 用户名 | 密码 | management port | amqp port | 磁盘类型 |
---|---|---|---|---|---|---|---|---|
节点一 | node1 | rabbitmq01 | rabbitmq-01 | rabbitmq | rabbitmq | 15672:15672 | 5672:5672 | disc |
节点二 | node2 | abbitmq02 | rabbitmq-02 | rabbitmq | rabbitmq | 15673:15672 | 5673:5672 | ram |
其中: 节点2加入节点1,构成集群
三、集群注意事项
1、节点(nodes
)的名称定义
在 rabbitmq 集群中,节点的名称
一般是有前缀
和主机名
这2部分组成,在一个集群中
,节点的名称不可重复
,必须是唯一的。
eg:
rabbit@node1
|- rabbit ===> 前缀
|- node1 ===> 主机名
2、集群中,节点的主机名必须要能互相都能访问
3、rabbitmq集群是基于erlang的,而erlang集群是通过magic cookie来通讯的,在 rabbitmq 中,需要保证 .erlang.cookie 的文件里面的值必须是一致的,且该文件的权限是600。该cookie文件的生成应该是在集群部署阶段。
4、端口访问
1、15672:一般是访问控制台或http api 的端口
2、5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS
5、集群节点类型
在集群中存在2中类型的节点,磁盘(disc)
节点和内存(ram)
节点。
1、磁盘节点所有的数据都是存在磁盘上
2、内存节点的数据是存在内存中,但不是所有的数据都是存在内存中的
,比如:消息只会存在索引等。
3、在一个集群中至少
需要一个
磁盘(disc)
节点
6、新的节点加入已经存在的集群时,节点必须要reset
7、使用docker建rabbitmq集群注意事项
- 容器中的数据是保存在
/var/lib/rabbitmq
目录中,因此为了容器中的数据不丢失,需要自建创建数据挂在目录,或数据卷(volume
)。 --hostname
指定docker容器的主机名RABBITMQ_DEFAULT_USER
指定rabbitmq用户名RABBITMQ_DEFAULT_PASS
指定rabbitmq密码RABBITMQ_ERLANG_COOKIE
指定cookie的值,集群中该值必须要一致
四、使用docker构建集群步骤
1、创建数据卷
docker volume create rabbitmq-01
docker volume create rabbitmq-02
2、启动2个rabbitmq容器
1、节点一启动命令
docker run -d --hostname node1 --name rabbitmq-01 -p 15672:15672 \
-p 5672:5672 -e RABBITMQ_DEFAULT_USER=rabbitmq -e \
RABBITMQ_DEFAULT_PASS=rabbitmq -e RABBITMQ_ERLANG_COOKIE='aabbccddeeffgg' \
-v rabbitmq-01:/var/lib/rabbitmq rabbitmq:3.8.0-management
2、节点二启动命令
docker run -d --hostname node2 --name rabbitmq-02 -p 15673:15672 \
-p 5673:5672 -e RABBITMQ_DEFAULT_USER=rabbitmq \
-e RABBITMQ_DEFAULT_PASS=rabbitmq \
-e RABBITMQ_ERLANG_COOKIE='aabbccddeeffgg' --link rabbitmq-01:node-1 \
-v rabbitmq-02:/var/lib/rabbitmq rabbitmq:3.8.0-management
3、将 node2 加入到 node1 集群中
1、node1 下执行如下命令
docker exec -it rabbitmq-01 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
2、node2 下执行如下命令
ocker exec -it rabbitmq-02 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@node1
rabbitmqctl start_app
4、配置镜像队列
在任何一个节点上执行如下命令:
rabbitmqctl set_prolich ha-all "^" '{"ha-mode":"all"}'
表示在默认的vhout(/)上队列/交换机/绑定等数据都是同步的。
5、镜像队列配置规则参考
https://www.rabbitmq.com/ha.html
到此我们的集群搭建完毕。
本文来自博客园,作者:huan1993,转载请注明原文链接:https://www.cnblogs.com/huan1993/p/15416146.html