penglongli / blog

18 stars 1 forks source link

使用 Docker 搭建一个 RabbitMQ 集群 #75

Open penglongli opened 6 years ago

penglongli commented 6 years ago

参考文章:

概念

环境

使用 Docker 来跑 RabbitMQ 非常简单,五分钟即可起来一个集群,下边是环境相关:

主机名 IP
host-1 10.104.179.111
host-2 10.104.145.201
host-3 10.104.92.38

然后我们分别修改三台机器的 hosts,增加下映射:

10.104.179.111 host-1
10.104.145.201 host-2
10.104.92.38   host-3

简单的验证办法,在机器上ping host-3 能 PING 通即为正常

然后,记得安装 Docker,国内的 Docker 源推荐阿里云的。本文基于的 Docker 版本如下:

root@host-1:~# docker --version
Docker version 17.12.0-ce, build c97c6d6

顺便把安装 Docker 写了一下:

https://github.com/penglongli/blog/issues/80

步骤

第一步,在三台机器上分别启起来一个 RabbitMQ 容器:

# HOST-1
docker run -it -d --net=host --name rabbit-node-1 \
  -e RABBITMQ_NODENAME=rabbit@host-1 \
  -e RABBITMQ_ERLANG_COOKIE=sw2w5e9wer7wer738234sdfsd8234234 \
  -e RABBITMQ_HIPE_COMPILE=1 \
  rabbitmq:3.6-management

# HOST-2
docker run -it -d --net=host --name rabbit-node-2 \
  -e RABBITMQ_NODENAME=rabbit@host-2 \
  -e RABBITMQ_ERLANG_COOKIE=sw2w5e9wer7wer738234sdfsd8234234 \
  -e RABBITMQ_HIPE_COMPILE=1 \
  rabbitmq:3.6-management

# HOST-3
docker run -it -d --net=host --name rabbit-node-3 \
  -e RABBITMQ_NODENAME=rabbit@host-3 \
  -e RABBITMQ_ERLANG_COOKIE=sw2w5e9wer7wer738234sdfsd8234234 \
  -e RABBITMQ_HIPE_COMPILE=1 \
  rabbitmq:3.6-management

注意一下,上边的几个参数:

第二步,在容器内调用 rabbitmqctl 创建集群

为 Host-2 执行如下操作:

注意: 开启三台机器上的防火墙端口:4369/5672/15672/25672

root@host-2:/home/ubuntu# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
9192f1f7d8ce        rabbitmq:3.6-management   "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes                            rabbit-node-2

root@host-2:/home/ubuntu# docker exec -it 9192f1f7d8ce bash

root@host-2:/# rabbitmqctl stop_app
Stopping rabbit application on node 'rabbit@host-2'

root@host-2:/# rabbitmqctl reset
Resetting node 'rabbit@host-2'

root@host-2:/# rabbitmqctl join_cluster rabbit@host-1
Clustering node 'rabbit@host-2' with 'rabbit@host-1'

root@host-2:/# rabbitmqctl start_app
Starting node 'rabbit@host-2'

# 查看集群状态,可以发现集群中目前有两个节点
root@host-2:/# rabbitmqctl cluster_status
Cluster status of node 'rabbit@host-2'
[{nodes,[{disc,['rabbit@host-1','rabbit@host-2']}]},
 {running_nodes,['rabbit@host-1','rabbit@host-2']},
 {cluster_name,<<"rabbit@localhost">>},
 {partitions,[]},
 {alarms,[{'rabbit@host-1',[]},{'rabbit@host-2',[]}]}]

为 Host-3 执行如下操作

root@host-3:/home/ubuntu# docker ps
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS               NAMES
b7defa87cba2        rabbitmq:3.6-management   "docker-entrypoint.s…"   8 minutes ago       Up 8 minutes                            rabbit-node-3

root@host-3:/home/ubuntu# docker exec -it b7defa87cba2 bash

root@host-3:/# rabbitmqctl stop_app
Stopping rabbit application on node 'rabbit@host-3'

root@host-3:/# rabbitmqctl reset
Resetting node 'rabbit@host-3'

root@host-3:/# rabbitmqctl join_cluster rabbit@host-1
Clustering node 'rabbit@host-3' with 'rabbit@host-1'

root@host-3:/# rabbitmqctl start_app
Starting node 'rabbit@host-3'

# 查看集群状态,可以发现目前集群中有三个节点
root@host-3:/# rabbitmqctl cluster_status
Cluster status of node 'rabbit@host-3'
[{nodes,[{disc,['rabbit@host-1','rabbit@host-2','rabbit@host-3']}]},
 {running_nodes,['rabbit@host-1','rabbit@host-2','rabbit@host-3']},
 {cluster_name,<<"rabbit@localhost">>},
 {partitions,[]},
 {alarms,[{'rabbit@host-1',[]},{'rabbit@host-2',[]},{'rabbit@host-3',[]}]}]

综上,集群我们就搭建好了

其它