移动云RocketMQ云原生消息队列2.0的弹性存储层的设计与实践

移动云RocketMQ云原生消息队列2.0的弹性存储层的设计与实践

作者:王维、胡宗棠 2022-09-07 21:43:34

云计算 本文介绍了基于“CSI + LVM”云原生容器存储技术及RocketMQ消息队列在容器存储上的设计与实践,其中实现了基于“CSI +LVM”的容器存储,支持本地卷的动态创建、动态扩缩容、磁盘IO速率限制、拓扑支持等基本功能,同时为移动云云原生消息中间件提供了一种采用本地卷作为容器存储方式。

作者|王维,中国移动云能力中心IaaS产品部rpc产品组研发工程师,主要负责消息队列云原生方向的设计与研发工作

胡宗棠,中国移动云能力中心laaS产品部消息队列&rpc团队的负责人,主要负责消息队列、rpc、配置管理等云原生中间件的架构设计与技术研发工作

1.背景介绍

移动云RocketMQ消息队列产品线,基于kubernetes组件和自定义Operator,在完成全面云原生化后,增加诸多云原生特性,比如一键化部署集群、极致弹性扩缩容和业务无感知热升级/热迁移等。同时,云原生化升级也导致RocketMQ面临多项挑战:

  • RocketMQ的Broker Pod节点是有状态的服务,在Broker Pod漂移后如何保证写入本地磁盘的消息数据同步迁移;
  • 基于(1)的问题,在移动云RocketMQ云原生消息队列 1.0的架构中,我们采用了Ceph/GlusterFS存储方案来解决该问题。但该方案带来的问题是:外部存储系统的引入,不仅增加了部署/运维的人力成本,而且使得消息队列服务架构复杂化;
  • RocketMQ消息队列集群的吞吐量受限于磁盘IO读写速率,相较于直接采用宿主机磁盘存储,引入Ceph/GlusterFS或者其他第三方存储系统会直接影响RocketMQ的性能;

基于上述问题,RocketMQ研发团队在移动云RocketMQ云原生消息队列2.0的架构设计中,基于“CSI + LVM”云原生容器存储技术,结合自研的Operator组件,在RocketMQ消息队列具备极致弹性扩缩等云原生特性的同时,能够承载万亿级数据洪峰,为移动云上客户的业务系统提供低延迟、高并发、高可靠的分布式消息队列云服务。

2.概念概述

1.CSI

CSI[1](Container Storage Interface )即容器存储接口,是Kubernetes 目前主推的存储扩展方式。该方式为容器编排系统定义了标准的接口,使得开发者可以更灵活方便的将第三方存储系统与容器工作负载集成。

开发者通过实现CSI 规定的RPC接口(CSI Identity、CSI Controller、CSI Node),即下图中Custom Components部分,协同社区提供的辅助Sidecar容器(External Components),与Kubernetes 核心组件进行交互,从而实现对自定义容器存储的管理。

(图片出处 [2])

External Components 是一系列由社区Storage sig小组维护的辅助容器,主要包括如下:

​External-provisioner 

用于实现持久卷(PersistentVolume)的创建、删除等功能

External-attacher 

用于实现持久卷的附着、分离功能

External-snapshotter

用于实现持久卷快照、备份恢复功能

External-resizer

用于实现持久卷的扩容缩容功能

Node-driver-registrar

使用kubelet插件机制向所在节点的kubelet注册用户开发的CSI 驱动信息

Livenessprobe

用于辅助用户CSI插件实现健康检查功能​

这些不同功能的Sidecar容器,由开发者根据自己实际需要选择使用。更详细的使用可以查看官方文档[3]

Custom Components 需要开发者自己实现,由三组RPC接口集合组成,来实现对存储卷整个生命周期的管理。

Identity Service负责对外暴露插件信息,开发者实现的存储插件必须实现该操作集,其中GetPluginCapabilities 根据用户实际实现的RPC操作返回对应的集合。

Controller Service包含一些卷的创建,删除、快照等操作。同样的,用户可以根据实际需要的功能选择性实现接口。实现Controller Service的插件可以根据自身实际需要选择不同的部署方式,通常会使用Deployment 部署单个或少量节点。

Node Service包含一些节点管理的接口。其负责需要和宿主机打交道的操作,例如挂载卸载存储卷等操作,通常会以DaemonSet的方式部署。

2.LVM 

LVM (Logical Volume Manager)即逻辑卷管理器,通过将多个物理分区/硬盘从逻辑上组合成一个更大的虚拟硬盘,从而实现对硬盘容量的弹性管理。

(图片出处 [4])

以下是LVM中的几个概念

PV 物理卷(Physical Volume)

通常对应一个普通分区或硬盘;

VG 卷组(Volume Group)

由若干个物理卷组成,卷组可以动态添加或者移除物理卷;

PE 物理扩展块(Physical Extend)

PE是LVM的最小存储单位,类似文件系统block;

LV 逻辑卷(Logical Volume)

从卷组中分割出部分空间,形成逻辑卷。用户格式化后挂载文件系统使用;

如下以一个实际使用例子列举部分命令

序号

LVM存储操作命令

说明

1

pvcreate /dev/sdb /dev/sdc

创建物理卷

2

vgcreate vg1 /dev/sdb /dev/sdc

创建卷组 

3

lvcreate -L 2G -n lv1 vg1

创建逻辑卷

4

mkfs -t xfs /dev/vg1/lv1

格式化逻辑卷

5

mount /mount/test /dev/vg1/lv1

挂载使用卷

6

lvextend -L +2G /dev/vg1/lv1

逻辑卷扩容

借助LVM,用户可以根据实际业务需求申请逻辑卷,之后同样也可以按需进行扩/缩容,从而可以实现用户对磁盘空间的按需申请、扩容缩容等需求。

3.基于“CSI+LVM”的RocketMQ消息队列容器存储层设计

通过实现CSI规范,同时借助LVM的能力,即可利用宿主机本地磁盘构建出一个简单的容器存储驱动,实现动态创建卷、对卷的扩缩容等功能。此外,为解决Broker Pod漂移带来的问题,我们在创建PV时添加亲和性,使其绑定原来的Node,由于RocketMQ消息队列集群本身就是采用分布式高可用架构。所以,在某些场景中,屏蔽一定的Pod漂移能力,并不会给RocketMQ消息队列的高可用带来什么影响。

上图展示了移动云消息队列存储部分的架构,其中蓝色部分是由我们实现的CSI插件部分

RocketMQ Operator 

遵循Kubernetes 的资源和控制器理念,通过拓展RocketMQ相关资源(CRD),以实现对RocketMQ集群生命周期的管理。

LVolume

用于整个流程管理存储的自定义资源对象(CRD)。

CSI-Controller-Plugin 

主要实现了CreateVolume、DeleteVolume、ControllerExpandVolume接口,负责LVolume的创建等。

CSI-Node-Plugin

主要实现了NodePublishVolume、NodeUnpublishVolume、NodeExpandVolume操作,内部通过调用LVM命令管理LV(逻辑卷)、PV(物理卷)、VG(卷组)资源,通过使用Cgroup 限制卷读写速率。

下面介绍下主要创建流程:

  1. 用户发起创建消息队列后会由RocketMQ Operator创建需要的Kubernetes 资源,其中包括指定StorageClassName的PVC、Pod资源;
  2. KubeScheduler调度PVC到指定节点后进入到Provision阶段;
  3. 0Sidecar容器 External-provisioner监听到PVC后调用同Pod中的ControllerPugin的CreateVolume接口;
  4. ControllerPlugin收到CreateVolume进行一些验证后,创建LVolume对象,用于记录需要创建的卷信息,而后返回成功给External-provisioner;
  5. External-provisioner根据返回结果创建PV对象,添加节点亲和性,并和PVC进行绑定;
  6. 由于我们不需要对卷Attach,故通过设置CSIDriver的AttachRequired属性为false跳过Attach阶段,而后kubeScheduler调度Pod到指定节点后进入mount阶段;
  7. Kubelet监听到绑定到自身节点的Pod后调用NodePlugin的NodePublishVolume接口;
  8. NodePlugin收到NodePublishVolume请求后通过调用lvm命令创建逻辑卷,并将卷mount到Pod的指定目录;
  9. 而后NodePlugin根据LVolume中的相关信息设置Cgroup限制磁盘读写IO速率;
  10. 至此主要流程结束;

4.总结

本文介绍了基于“CSI + LVM”云原生容器存储技术及RocketMQ消息队列在容器存储上的设计与实践,其中实现了基于“CSI +LVM”的容器存储,支持本地卷的动态创建、动态扩缩容、磁盘IO速率限制、拓扑支持等基本功能,同时为移动云云原生消息中间件提供了一种采用本地卷作为容器存储方式。

引用链接

1.CSI规范https://github.com/container-storage-interface/spec

2.CSI图片出处https://kingjcy.github.io/post/cloud/paas/base/kubernetes/k8s-store-csi/

3.CS文档https://kubernetes-csi.github.io/docs/introduction.html

4.LVM图片出处https://www.cnblogs.com/fzhelpdesk/p/16189915.html

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/278190.html<

(0)
管理的头像管理
上一篇2025-05-11 11:34
下一篇 2025-05-11 11:35

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注