在Kubernetes中使用RabbitMQ 经验分享

AI 摘要 / TL;DR

在Kubernetes中使用RabbitMQ 经验分享 来源: https://www.ucloud.cn/yun/129560.html 作者: IT那活儿 发布日期: 发布于2023 01 11 13:20 在Kubernetes中使用RabbitMQ 经验分享 点击上方“IT那活儿”,关注后了解更多内容,不管IT

来源: https://www.ucloud.cn/yun/129560.html 作者: IT那活儿 发布日期: 发布于2023-01-11 13:20

在Kubernetes中使用RabbitMQ 经验分享

点击上方“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那活儿(上海新炬王翦团队)