前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >rabbitmq集群搭建_mongodb集群搭建

rabbitmq集群搭建_mongodb集群搭建

作者头像
全栈程序员站长
发布2022-10-01 10:32:11
1.3K0
发布2022-10-01 10:32:11
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

docker 单容器部署

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

代码语言:javascript
复制
$ docker network create mq-network

首先启动 3个 rabbitmq 容器

代码语言:javascript
复制
$ 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 <value>" 
代码语言:javascript
复制
$ 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
代码语言:javascript
复制
$ 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 文件至容器中

代码语言:javascript
复制
# 假设当前目录中已经有.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 手动创建集群

代码语言:javascript
复制
# 进入容器终端
$ docker exec -it rabbit02 bash
# 简化写法
$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit01 && rabbitmqctl start_app

# rabbit03 同理

Docker Swarm 部署

初始化 docker swarm

代码语言:javascript
复制
docker swarm init 

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

代码语言:javascript
复制
docker network create \
  --driver overlay \
  rabbitmq_network

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

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

使用 docker service

代码语言:javascript
复制
$ 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 手动创建集群

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

# on rabbit3
同理

简化写法

代码语言:javascript
复制
# 简化写法
rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@7bdb16ce5c21
image-20220502153636527
image-20220502153636527

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

image-20220502153729116
image-20220502153729116

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

image-20220502154356949
image-20220502154356949

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

代码语言:javascript
复制
# on rabbit2
rabbitmqctl stop_app
image-20220502153844782
image-20220502153844782

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

📘 参考资料

  1. RabbitMQ集群搭建
  2. 集群搭建-官方文档
  3. docker部署rabbitmq集群
  4. Docker Swarm 部署 RabbitMQ 集群—【通过配置文件】

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/195067.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月11日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker 单容器部署
  • Docker Swarm 部署
  • 📘 参考资料
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档