3台物理机使用docker搭建rabbitmq镜像集群

4 篇文章 0 订阅

一、准备3台linux机器

内核版本在3.10以上,三台机器的IP地址为 10.10.10.1 、10.10.10.2   、10.10.10.3

二、配置三台机器的hosts

10.10.10.1       dockerrabbitmqhostname1  rabbit1
10.10.10.2       dockerrabbitmqhostname2  rabbit2
10.10.10.3       dockerrabbitmqhostname3  rabbit3

配置hosts命令

sudo vim hosts

配置完hosts需要重启网络

/etc/init.d/network restart

三、使用docker搭建rabbitmq

1、创建目录

创建该目录用途是做docker中rabbitmq目录映射

/app/rabbitmq

2、在10.10.10.1机器上执行如下

1)运行如下命令启动镜像

需要在3台linux上都运行,注意 --name 和 --hostname两个需要修改成对应内容,参照二中配置的hosts

命令运行期间需要输入 y 并继续,如果有出现失败很有可能是网络原因,继续尝试即可,如有必要需删除创建失败的容器。

sudo docker run -d --net host --name rabbit1  --hostname dockerrabbitmqhostname1 --log-opt max-size=100m --log-opt max-file=1000 -v /app/rabbitmq:/var/lib/rabbitmq -v /app/rabbitmq/rabbitmq:/etc/rabbitmq  -e RABBITMQ_DEFAULT_USER=jiaogg -e RABBITMQ_DEFAULT_PASS=jiaogg123 -e RABBITMQ_ERLANG_COOKIE='rabbitcookietest'  rabbitmq:3.8.9-management

命令讲解:

-d :后台运行rabbitmq

--net :详见docker的4种网络模式

--name :容器的名字

--hostname :配置的本机的host的名字

--log-opt max-size=100m :日志大小分隔限制

--log-opt max-file=1000 :保留1000个日志文件

-v /app/rabbitmq:/var/lib/rabbitmq -v /app/rabbitmq/rabbitmq:/etc/rabbitmq :docker中rabbitmq的文件映射到物理机

-e RABBITMQ_DEFAULT_USER=jiaogg -e RABBITMQ_DEFAULT_PASS=jiaogg123 :指定rabbitmq服务的登陆用户名和密码

 -e RABBITMQ_ERLANG_COOKIE='rabbitcookietest'  :指定集群通信的cookie,此cookie配置3台机器必须一模一样

 rabbitmq:3.8.9-management :使用的rabbitmq的版本

命令运行成功后执行如下命令查看容器列表

docker ps 
或者 
docker ps -a

-a 可以查看所有的正在运行和没有运行的镜像列表

通过docker ps -a 命令可以看到如下列表

关键列信息讲解:

CONTAINER ID :镜像id(比较重要)

IMAGE : 镜像信息

CREATED :创建时长

STATUS : 运行状态和时长

PORTS :端口号

NAMES :镜像名字(比较重要)

2)运行如下命令配置镜像

需要在3台都运行已下命令,注意容器ID,一行一行命令执行

docker exec -it 容器id /bin/bash

rabbitmq-plugins enable rabbitmq_management

以上开启管理后台插件之后需要通过管理页面创建一个叫 push 的vhost

rabbitmqctl set_policy mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues 
rabbitmqctl set_policy mirroredpolicy "push.exchange$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges 

rabbitmqctl set_policy -p push  mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
rabbitmqctl set_policy -p push  mirroredpolicy "push.exchange$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges

exit

命令讲解:

docker exec -it 容器id /bin/bash :进入某个ID的容器

rabbitmq-plugins enable rabbitmq_management : 开启管理后台插件

rabbitmqctl set_policy mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues  :配置 默认的vhost:“/”中的以“push.queue”结尾的队列为镜像队列

rabbitmqctl set_policy mirroredpolicy "push.exchanges$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges :配置 默认的vhost:“/”中的以“push.exchanges”结尾的交换机为镜像交换机(可不指定交换机为镜像

rabbitmqctl set_policy -p push  mirroredpolicy "push.queue$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues:配置 自己创建的vhost:“push”中的以“push.queue”结尾的队列为镜像队列

rabbitmqctl set_policy -p push  mirroredpolicy "push.exchange$" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges:配置 自己创建的vhost:“push”中的以“push.exchanges”结尾的交换机为镜像交换机(可不指定交换机为镜像

"ha-sync-mode":"automatic" 当集群中某台down掉了,会自动同步该台的数据,否则需要手动resync

exit : 退出容器

注:

如果要配置所有的队列皆为镜像队列则使用如下命令

docker exec -it 容器id /bin/bash

rabbitmq-plugins enable rabbitmq_management

以上开启管理后台插件之后需要通过管理页面创建一个叫 push 的vhost

rabbitmqctl set_policy mirroredpolicy  "^"  '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues 
rabbitmqctl set_policy mirroredpolicy  "^"  '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges 

rabbitmqctl set_policy -p push  mirroredpolicy  "^"  '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to queues
rabbitmqctl set_policy -p push  mirroredpolicy  "^"  '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to exchanges

exit

3)加入集群

在10.10.10.2机器上执行如下命令

sudo docker exec -it rabbit2 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@dockerrabbitmqhostnameM1
rabbitmqctl start_app
exit

在10.10.10.3机器上执行如下命令

sudo docker exec -it rabbit3 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@dockerrabbitmqhostnameM1
rabbitmqctl start_app
exit

该集群中机器全部是磁盘节点,如需创建内存节点可以使用如下命令

rabbitmqctl join_cluster --ram  rabbit@dockerrabbitmqhostnameM1

三、登陆管理后台

由于三台机器都开启了管理后台插件,所以三台机器都登陆,用户名:jiaogg、密码:jiaogg123,URL:10.10.10.1:17652、10.10.10.2:17652、10.10.10.3:17652

在其中一台机器上创建交换机和队列之后可以在其他两台机器的管理页面上也可以看到创建的交换机和队列

在其中一台机器上发送消息后,在其他两台机器上都可以收到消息

番外篇

先用命令 docker ps -a 查看节点信息(CONTAINER ID   和 NAMES)

docker exec -it 节点id或者name /bin/bash  进入容器

1、查看集群状态

 rabbitmqctl cluster_status 

2、剔除集群的某个节点

rabbitmqctl  -n 集群id或者名字  forget_cluster_node 被踢出的节点id或者名字

3、停止某个节点

rabbitmqctl stop_app

4、删除某个容器

删除前需要停止节点服务

docker rm  节点id或者名字

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,以下是用 Docker 搭建 RabbitMQ 集群的步骤: 1. 首先,确保已经安装了 DockerDocker Compose。 2. 在本地创建一个新的文件夹,用于存储 RabbitMQ 的配置文件和数据。 3. 在该文件夹创建一个名为 docker-compose.yml 的文件,并将以下内容复制到该文件: ``` version: '3' services: rabbitmq-node1: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node1 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" ports: - "5672:5672" - "15672:15672" volumes: - ./data/node1:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node1 rabbitmq-node2: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node2 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" volumes: - ./data/node2:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node2 rabbitmq-node3: image: rabbitmq:3.8-management-alpine hostname: rabbitmq-node3 environment: RABBITMQ_ERLANG_COOKIE: "secret_cookie" RABBITMQ_DEFAULT_USER: "admin" RABBITMQ_DEFAULT_PASS: "admin" volumes: - ./data/node3:/var/lib/rabbitmq - ./config/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf networks: rabbitmq-network: aliases: - rabbitmq-node3 networks: rabbitmq-network: driver: bridge ``` 该文件定义了一个 RabbitMQ 集群,由三个节点组成。每个节点都有一个名称、一个主名、一个环境变量(Erlang cookie、默认用户名和密码)、端口映射、数据卷和网络别名。该文件还定义了一个网络,用于连接三个节点。 4. 在该文件夹创建一个名为 config 的文件夹,并在其创建一个名为 rabbitmq.conf 的文件。将以下内容复制到该文件: ``` cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config cluster_formation.classic_config.nodes.1 = rabbit@rabbitmq-node1 cluster_formation.classic_config.nodes.2 = rabbit@rabbitmq-node2 cluster_formation.classic_config.nodes.3 = rabbit@rabbitmq-node3 ``` 该文件定义了 RabbitMQ 集群的配置,包括节点发现方式和节点列表。 5. 在该文件夹创建一个名为 data 的文件夹,用于存储 RabbitMQ 节点的数据。 6. 在终端导航到该文件夹,并运行以下命令: ``` 回复:搭建rabbitmq集群需要使用Docker,可以参考Docker官方文档:https://docs.docker.com/engine/examples/rabbitmq/。好的,以下是如何使用Docker搭建RabbitMQ集群的步骤: 1. 首先,确保您已经在本地安装了Docker,并且已经在命令行登录到了Docker。 2. 在命令行输入以下命令,以在Docker下载和运行RabbitMQ镜像: ``` docker run -d --name rabbitmq-node1 -p 5672:5672 -p 15672:15672 rabbitmq:3.8-management ``` 这将下载最新版本的RabbitMQ,并将其运行在Docker容器。这里我们指定了两个端口,一个用于AMQP通信(5672),另一个用于Web管理界面(15672)。 3. 等待RabbitMQ容器启动后,您可以使用以下命令在另一个容器运行第二个RabbitMQ节点: ``` docker run -d --name rabbitmq-node2 -p 5673:5672 -p 15673:15672 --link rabbitmq-node1:rabbit1 rabbitmq:3.8-management ``` 这将启动第二个RabbitMQ容器,并将其链接到第一个容器,以便它们可以互相通信。请注意,我们使用了不同的端口(5673和15673),以便避免与第一个节点的端口冲突。 4. 接下来,您可以使用以下命令启动第三个节点: ``` docker run -d --name rabbitmq-node3 -p 5674:5672 -p 15674:15672 --link rabbitmq-node1:rabbit1 --link rabbitmq-node2:rabbit2 rabbitmq:3.8-management ``` 同样,我们指定了不同的端口,并将此容器链接到前两个容器,以创建一个RabbitMQ集群。 5. 等待第三个节点启动后,您可以使用以下命令检查集群状态: ``` docker exec -it rabbitmq-node1 rabbitmqctl cluster_status ``` 这将显示集群所有节点的状态。 恭喜!您已经成功地在Docker部署了一个RabbitMQ集群

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值