栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

RabbitMQ 集群搭建

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

RabbitMQ 集群搭建

docker 单容器部署

创建桥接网络,用于容器间通信

$ docker network create mq-network

首先启动 3个 rabbitmq 容器

$ docker run --name rabbit01 
	-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie COUBJLKLQCIAPKIQZGGJ" 
	--hostname rabbit01 --network mq-network 
	-p 5672:5672 -p 15672:15672 
	-d rabbitmq:3.9-management
# -e ... 通过环境变量指定 cookie,其格式为:"-setcookie "	
$ docker run --hostname  rabbit02 --name rabbit02 
	-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie COUBJLKLQCIAPKIQZGGJ" 
	--network mq-network 
	-p 5673:5672 -p 15673:15672 
	-d rabbitmq:3.9-management
$ docker run --hostname rabbit03 --name rabbit03 
	-e RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS="-setcookie COUBJLKLQCIAPKIQZGGJ" 
	--network mq-network 
	-p 5674:5672 -p 15674:15672 
	-d rabbitmq:3.9-management

然后需要复制一份 .erlang.cookie 文件至容器中

# 假设当前目录中已经有.erlang.cookie 文件,内容为:COUBJLKLQCIAPKIQZGGJ

$ docker cp .erlang.cookie rabbit01:/var/lib/rabbitmq/
$ docker cp .erlang.cookie rabbit02:/var/lib/rabbitmq/
$ docker cp .erlang.cookie rabbit03:/var/lib/rabbitmq/

❗️ 注意:环境变量 RABBITMQ_SERVER_ADDITIONAL_ERL_ARGS 和 .erlang.cookie 文件两处都需要修改,否则会使 rabbitmqctl 工具不可用,无法创建集群。

使用 rabbitmqctl 手动创建集群

# 进入容器终端
$ docker exec -it rabbit02 bash
# 简化写法
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit01 && rabbitmqctl start_app

# rabbit03 同理
Docker Swarm 部署

初始化 docker swarm

docker swarm init 

创建 rabbitmq 集群容器间访问的网络

docker network create 
  --driver overlay 
  rabbitmq_network

使用 docker secrets,创建指定的 erlang cookie

# .eralng.cookie 文件自己创建,或者复制一个 rabbitmq 容器内的
$ cat .erlang.cookie | docker secret create my-erlang-cookie -

使用 docker service

$ docker service create --container-label rabbit --replicas 3 
    --name rabbitmq-cluster 
    -p 5672:5672 -p 15672:15672 
    --network rabbitmq-network 
#    --hostname="rabbit-{{.Task.ID}}" 
    --secret source=my-erlang-cookie,target=/var/lib/rabbitmq/.erlang.cookie,uid=999,gid=999,mode=0600 
    rabbitmq:3.9-management

# --hostname 指定 hostname,可以通过占位符指定,否则就是随机字符串
# --network 指定网络     
# 指定 uid,gid,mode 是为了让rabbitmq 可以正确的读取 .eralng.cookie 文件
# uid,gid 分别是rabbitmq 用户id和用户组id,根据mode指定访问文件权限

通过 rabbitmqctl 手动创建集群

# 显示服务名为 rabbitmq-cluster 的 service 中所有容器 
docker service ps rabbitmq-cluster
# 进入容器终端,rabbit1
docker exec -it rabbitmq-cluster.1.rzxlu3oksqchjthknse7mk3b2 bash
# 说明:7bdb16ce5c21 是 rabbit1的主机名(hostname)
# on rabbit2
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@7bdb16ce5c21 --ram
rabbitmqctl start_app

# on rabbit3
同理

简化写法

# 简化写法
rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@7bdb16ce5c21

因为在docker服务构建过程中,使用了端口映射,可以从docker节点的物理机ip直接进行访问,http://yourip:16572

设置集群策略后,集群中节点将会同步数据 —> 参考

破坏性测试,关闭其中一个 rabbitmq 节点

# on rabbit2
rabbitmqctl stop_app

Exchanges 和 Queues 不会丢失,通过其他 rabbitmq 节点仍然可以完成工作。

 参考资料
  1. RabbitMQ集群搭建

  2. 集群搭建-官方文档

  3. docker部署rabbitmq集群

  4. Docker Swarm 部署 RabbitMQ 集群—【通过配置文件】

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/854602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号