摘要

主要是的实现RabbitMQ集群的构建工作。将详细的讲述集群构建的过程和步骤。

Docker的安装

RabbitMQ的安装

RabbitMQ集群安装

docker rabbitmq 设置用户名 docker部署rabbitmq集群_Docker

 使用Docker构建RabbitMQ高可用负载均衡集群大概分为三个步骤:

  1. 启动多个(3个为例)RabbitMQ,构建RabbitMQ集群,并配置为镜像模式。
  2. 使用HAProxy做负载均衡。
  3. 使用KeepAlived实现高可用。

1在一台上安装多个rabbitMQ的镜像文件

1)启动多个RabbitMQ节点

服务器ip

端口

hostname

管理界面地址

192.168.25.128

5672

my-rabbit1

192.168.25.128:15672

192.168.25.128

5673

my-rabbit2

192.168.25.128:15673

192.168.25.128

5674

my-rabbit3

192.168.25.128:15674

docker run -d --hostname my-rabbit1 --name rabbit1 -p 5672:5672 -p 15672:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.8.0-beta.4-management

docker run -d --hostname my-rabbit2 --name rabbit2 -p 5673:5672 -p 15673:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link rabbit1:my-rabbit1 rabbitmq:3.8.0-beta.4-management

docker run -d --hostname my-rabbit3 --name rabbit3 -p 5674:5672 -p 15674:15672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' --link rabbit1:my-rabbit1 --link rabbit2:my-rabbit2 rabbitmq:3.8.0-beta.4-management


注意:由于Erlang节点间通过认证Erlang cookie的方式来允许互相通信,所以RABBITMQ_ERLANG_COOKIE必须设置为相同的。启动完成之后,使用docker ps命令查看运行情况,确保RabbitMQ都已经启动。

docker rabbitmq 设置用户名 docker部署rabbitmq集群_docker_02

2)加入集群节点

内存节点和磁盘节点的选择:

每个RabbitMQ节点,要么是内存节点,要么是磁盘节点。内存节点将所有的队列、交换器、绑定、用户等元数据定义都存储在内存中;而磁盘节点将元数据存储在磁盘中。单节点系统只允许磁盘类型的节点,否则当节点重启以后,所有的配置信息都会丢失。如果采用集群的方式,可以选择至少配置一个节点为磁盘节点,其余部分配置为内存节点,,这样可以获得更快的响应。所以本集群中配置节点1位磁盘节点,节点2和节点3位内存节点。

集群中的第一个节点将初始元数据代入集群中,并且无须被告知加入。而第2个和之后加入的节点将加入它并获取它的元数据。要加入节点,需要进入Docker容器,重启RabbitMQ。


设置节点1:

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

设置节点2:

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

设置节点3:

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


节点设置完成之后,在浏览器访问192.168.25.128:15672、192.168.25.128:15673和192.168.25.128:15674中任意一个,都会看到RabbitMQ集群已经创建成功。

docker rabbitmq 设置用户名 docker部署rabbitmq集群_Docker_03

3)配置镜像队列

镜像队列工作原理:在非镜像队列的集群中,消息会路由到指定的队列。当配置为镜像队列之后,消息除了按照路由规则投递到相应的队列外,还会投递到镜像队列的拷贝。也可以想象在镜像队列中隐藏着一个fanout交换器,将消息发送到镜像的队列的拷贝。

进入任意一个RabbitMQ节点,执行如下命令:


rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'


可以设置镜像队列,"^"表示匹配所有队列,即所有队列在各个节点上都会有备份。在集群中,只需要在一个节点上设置镜像队列,设置操作会同步到其他节点。

查看集群的状态:


rabbitmqctl cluster_status


 HAProxy负载均衡

2在多台上安装多个rabbitMQ的镜像文件

RabbitMQ HA proxy均衡负载

RabbitMQ KeepAlived配置

RabbtiMQ的文件集合

docker rabbitmq 设置用户名 docker部署rabbitmq集群_Docker_04