rabbitmq集群搭建_mongodb集群搭建

rabbitmq集群搭建_mongodb集群搭建docker单容器部署创建桥接网络,用于容器间通信$dockernetworkcreatemq-network首先启动3个rabbitmq容器$dockerrun–namerabbit01\ -eRABBITMQ_SERVER_ADDITIONAL_ERL_ARGS=”-setcookieCOUBJLKLQCIAPKIQZGGJ”\ –hostnamerabbit01–networkmq-network\ -p5672:5672-p1567

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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 <value>" 
$ 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

image-20220502153636527

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

image-20220502153729116

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

image-20220502154356949

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

# on rabbit2
rabbitmqctl stop_app

image-20220502153844782

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

? 参考资料

  1. RabbitMQ集群搭建

  2. 集群搭建-官方文档

  3. docker部署rabbitmq集群

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • mysql取得当前时间的函数_oracle数据库时间戳函数

    mysql取得当前时间的函数_oracle数据库时间戳函数介绍MySQL获取当前时间的now()、sysdate()函数,以及获取当前版本的version()函数

  • 关于cBridge2.0,你不能错过的关键信息(三)!

    关于cBridge2.0,你不能错过的关键信息(三)!上篇ELI5短文中我们讨论了cBridge2.0如何解决「自管」流动性模型中与状态守卫者网络(SGN)的协调问题。今天我们来继续讨论自管模型的最后一个话题:cBridge2.0的设计如何利用SGN为非托管桥接系统中的「作恶问题」提供有史以来第一个解决方案。那么什么是「作恶」呢?首先我们要知道,在cBridge2.0自管桥接模型中,对于桥接节点和用户来说,跨链交易的发生总是需要两个步骤,其顺序如下: 用户的第1步:向源链上的桥接节点进行「时间锁定」的转账,发起转账的用户…

  • 关于记忆化搜索

    关于记忆化搜索转载自:http://blog.csdn.net/urecvbnkuhbh_54245df/article/details/5847876记忆化搜索: 算法上依然是搜索的流程,但是搜索到的一些解用动态规划的那种思想和模式作一些保存。一般说来,动态规划总要遍历所有的状态,而搜索可以排除一些无效状态。更重要的是搜索还可以剪枝,可能剪去大量不必要的状态,因此在空间开销上往往比动

  • 深度学习-10:人工智能简史及三剑客

    深度学习-10:人工智能简史及三剑客深度学习-10:人工智能简史及三剑客CSDN专栏:机器学习&amp;amp;深度学习(理论/实践)1人工智能简史深度学习理论的突破和深度学习硬件加速能力的突破,使AI在模式识别、无人驾驶、智力游戏领域取得空前的成功。学术界和工业界全力以赴掀起人工智能的新一轮热潮。各大互联网巨头纷纷成立人工智能研究中心,唯恐在新一轮人工智能的竞赛被无情淘汰。如今,机器学习的应用已遍及人工智能的各个分支,如专…

  • tomcat java_maven和java有什么区别

    tomcat java_maven和java有什么区别缓存什么是缓存[Cache]存在内存中的临时数据将用户经常查询的数据放在缓存(内存)中,用户去查询数据的时候就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。为什么使用缓存减少和数据库的数据交换次数,较少系统开销,提高系统效率什么样的数据库能使用缓存经常查询并且不经常改变的数据Mybatis缓存MyBatis 内置了一个强大的事务性查询缓存机制,它可以非常方便地配置和定制。默认情况下,只启用了本地的会话缓存,它仅

  • 开了一把奥地利站

    开了一把奥地利站

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号