docker搭建rabbitmq集群

一、简介

最近项目中又开始使用rabbitmq了,此处简单记录一下如何使用docker来搭建一个rabbitmq集群

二、需求

在一个云服务器上,使用docker搭建2个节点的集群,此处搭建基于镜像模式集群,而不是一般集群模式。

节点主机名容器名数据卷用户名密码management portamqp port磁盘类型
节点一node1rabbitmq01rabbitmq-01rabbitmqrabbitmq15672:156725672:5672disc
节点二node2abbitmq02rabbitmq-02rabbitmqrabbitmq15673:156725673:5672ram

其中: 节点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集群注意事项

  1. 容器中的数据是保存在 /var/lib/rabbitmq 目录中,因此为了容器中的数据不丢失,需要自建创建数据挂在目录,或数据卷(volume)。
  2. --hostname 指定docker容器的主机名
  3. RABBITMQ_DEFAULT_USER 指定rabbitmq用户名
  4. RABBITMQ_DEFAULT_PASS 指定rabbitmq密码
  5. 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

到此我们的集群搭建完毕。

posted @ 2019-11-09 16:13  huan1993  阅读(47)  评论(0编辑  收藏  举报