成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

移動云RocketMQ云原生消息隊列2.0的彈性存儲層的設計與實踐

云計算
本文介紹了基于“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

責任編輯:未麗燕 來源: 移動Labs
相關推薦

2023-10-27 11:35:18

存儲架構版本庫

2021-06-15 09:57:23

云計算云原生云開發

2020-09-18 13:09:15

云原生云安全網絡安全

2024-02-27 07:27:58

云原生推薦系統架構云原生技術棧

2021-07-13 07:52:03

云原生彈性模式

2023-08-30 16:22:03

云原生云計算

2021-08-02 09:40:57

Dapr阿里云Service Mes

2023-07-18 18:14:51

云原生軟件架構

2009-04-09 19:18:44

云存儲存儲虛擬化虛擬化

2023-01-12 15:32:46

云原生Loggie

2023-07-26 16:20:36

云原生云計算

2017-03-07 10:00:01

定義實踐DevOps

2024-08-22 18:49:23

2020-07-07 14:09:16

云原生JavaGolang

2022-06-01 11:14:22

云原生安全架構設計

2019-04-25 15:21:48

云原生開源云計算標準

2023-08-31 22:40:01

2022-08-21 07:25:09

Flink云原生K8S

2023-02-17 13:08:31

2023-07-10 15:47:05

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产探花在线精品一区二区 | 久久精品亚洲精品国产欧美 | 久久综合九九 | 亚洲激情av | 欧美三级电影在线播放 | 成人免费区一区二区三区 | 亚洲一区二区视频在线播放 | 2022国产精品| 国产精品一区二区不卡 | 日日夜夜精品免费视频 | 精品久久久久久亚洲精品 | 亚洲精品久 | 精品三区 | 色视频网站在线观看 | 久久九七 | 精品视频一区二区三区四区 | 神马久久久久久久久久 | 亚洲一区二区三区在线 | 日韩一区二区av | 欧美日韩在线免费 | 国产色在线 | 国产精品视频500部 a久久 | 精品国产18久久久久久二百 | 久久高清 | 亚洲欧美日本国产 | 亚洲天堂一区二区 | 日本视频中文字幕 | 一区二区三区欧美 | 亚洲一区二区三区免费视频 | 国产精产国品一二三产区视频 | 精品一区二区三区四区五区 | 国产精品中文字幕在线 | 91欧美 | 伊人网伊人 | 欧美日韩精品一区二区三区四区 | 亚洲瑟瑟| 国产精品一区二区三区久久久 | 国产毛片久久久久久久久春天 | 91麻豆精品国产91久久久久久 | 亚洲一区中文字幕 | 亚洲视频中文字幕 |