热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Kubernetes中使用RabbitMQ经验分享

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

点击上方“IT那活儿”,关注后了解更多内容,不管IT什么活儿,干就完了!!!

在实际工作中我们常常遇见部署各类中间件服务,例如Redis、etcd、memcache、RabbitMQ等,通过Kubernetes部署这些中间件,极大的提高了运维效率,本文是针对RabbitMQ在工作中的小结。

前提条件
要完成本文后续的操作还需要以下条件:
  • Kubernetes 1.19+
  • Helm 3.2.0+
  • PV provisioner support in the underlying infrastructure

安装Chart

helm install ops-test   --set auth.username=celery,auth.password=celery,auth.erlangCOOKIE=secretCOOKIE,persistence.storageClass=rook-cephfs-sc,replicaCount=3,persistence.size=1Gi bitnami/rabbitmq

1. 参数说明
  • auth.username  设置用户名
  • auth.password  设置密码
  • auth.erlangCOOKIE 设置erlang COOKIE
  • persistence.storageClass 设置数据存储
  • replicaCount 设置副本数
详细参数请访问:
rabbitmq 8.29.0 · bitnami/bitnami (artifacthub.io)

2. 扩容

副本数增加到10个。

helm upgrade ops-test --set auth.username=celery,auth.password=celery,auth.erlangCOOKIE=secretCOOKIE,persistence.storageClass=alicloud-nas-sp,replicaCount=10 bitnami/rabbitmq

3. 缩容

副本数缩减到5个。

helm upgrade ops-test --set auth.username=celery,auth.password=celery,auth.erlangCOOKIE=secretCOOKIE,persistence.storageClass=alicloud-nas-sp,replicaCount=5 bitnami/rabbitmq

注意:当队列(Queues)类型是仲裁队列(Quorum Queues)时,要先删除member。
使用命令:

rabbitmq-queues delete_member [-p ]  

注意不要使Member太低,太低可能会导致仲裁队列故障。
4. 检查状态
安装成功后等待集群创建成功,可通过以下两种方式检查运行状态:

方式一:web方式

kubectl port-forward --address 0.0.0.0 --namespace default svc/ops-test-rabbitmq 15672:15672

访问 15672,通过webui访问管理页面。

方式二:命令行方式

kubectl exec -it ops-test-rabbitmq-2 bin/bashrabbitmqctl cluster_status

配置镜像队列
默认集群中的Queue只存在于它所创建的那个节点上,如果该节点挂了将会造成数据的丢失;使用镜像队列将会在所有其他节点上创建同样的队列,发送数据时所有的队列都会有消息。可以通过设置策略来设置镜像队列。
设置策略时有两个关键参数:ha-mode和ha-params。

1. 设置策略
登录集群中的任意节点,执行以下命令:

rabbitmqctl set_policy ha-all "^" '{"ha-mode":"exactly","ha-params":4,"ha-sync-mode":"automatic"}'

2. Queues详情
点进一个ops13, 在Detail标签中,Node是当前提供服务的主节点,Mirrors是副本节点,因为"ha-params"参数值为4,所以会有1个主节点,3副本节点。当Node节点出现问题时会从Mirrors中选举一个mirror成为新的Node,提供服务。
3. 故障切换
当Node失效后会从Mirrors中选择一个节点充当Node节点。

配置仲裁队列
仲裁队列(Quorum Queues)是RabbitMQ3.8.0版本的新的队列类型,它基于Raft共识算法实现的持久的FIFO队列。
仲裁队列类型是持久的镜像队列的一种替代方法,主要目标是解决集群中的数据安全。
1. 创建仲裁队列
在3.8.0版本可以使用。声明仲裁队列和声明普通队列方法一样,只需要把x-queue-type设置为quorum即可。
仲裁队列适用数据安全性很高的场景(例如订单系统、选举系统等)。
在创建队列的时候添加以下参数:

"x-queue-type": "quorum", # 声明队列类型为仲裁队列"x-quorum-initial-group-size": 5 # 声明仲裁队列组成员数量,(默认为3,也是最小值),建议成员数量为奇数

添加成员:

rabbitmq-queues add_member [-p ]  

删除成员:

rabbitmq-queues delete_member [-p ]  

2. Queues详情

登陆管理页面,找到队列类型是quorum的队列,在Detail标签中可以看到当前队列的member成员、Online成员和Leader节点。

3. 故障切换

当Leader 节点出现故障不能提供服务时会从所有Online节点中选择一个成为新的Leader节点。
如果Online节点不多时,可以添加member成员:

rabbitmq-queues add_member [-p ]  

当member成员不可用时,可以删除成员:

rabbitmq-queues delete_member [-p ]  



本文作者:王玉坤

本文来源:IT那活儿(上海新炬王翦团队)



推荐阅读
  • Ansibleplaybook roles安装redis实例(学习笔记二十九)
    1、相关redis参数:2、templatesredis.conf配置相关参数:daemonizeyespidfilevarrunredis_{{red ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • c语言\n不换行,c语言printf不换行
    本文目录一览:1、C语言不换行输入2、c语言的 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • Iamtryingtocreateanarrayofstructinstanceslikethis:我试图创建一个这样的struct实例数组:letinstallers: ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
author-avatar
闹剧-豆腐渣_141
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有