偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

CubeFS - 新一代云原生存儲系統(tǒng)

云計(jì)算 云原生
CubeFS 作為一個云原生的分布式存儲平臺,提供了多種訪問協(xié)議,因此其應(yīng)用場景也非常廣泛,CubeFS 是一種新一代云原生存儲系統(tǒng),支持 S3、HDFS 和 POSIX 等訪問協(xié)議,支持多副本與糾刪碼兩種存儲引擎,為用戶提供多租戶、 多 AZ 部署以及跨區(qū)域復(fù)制等多種特性。

CubeFS 是一種新一代云原生存儲系統(tǒng),支持 S3、HDFS 和 POSIX 等訪問協(xié)議,支持多副本與糾刪碼兩種存儲引擎,為用戶提供多租戶、 多 AZ 部署以及跨區(qū)域復(fù)制等多種特性。

CubeFS 作為一個云原生的分布式存儲平臺,提供了多種訪問協(xié)議,因此其應(yīng)用場景也非常廣泛,下面簡單介紹幾種比較典型的應(yīng)用場景

  • 大數(shù)據(jù)分析:兼容 HDFS 協(xié)議,為 Hadoop 生態(tài)(如 Spark、Hive)提供統(tǒng)一存儲底座,為計(jì)算引擎提供無限的存儲空間以及大帶寬的數(shù)據(jù)存儲能力。
  • 深度訓(xùn)練/機(jī)器學(xué)習(xí):作為分布式并行文件系統(tǒng),支撐 AI 訓(xùn)練、模型存儲及分發(fā)、IO 加速等需求。
  • 容器共享存儲:容器集群可以將容器鏡像的配置文件或初始化加載數(shù)據(jù)存儲在 CubeFS 上,在容器批量加載時實(shí)時讀取。多 Pod 間通過 CubeFS 共享持久化數(shù)據(jù),在 Pod 故障時可以進(jìn)行快速故障切換。
  • 數(shù)據(jù)庫&中間件:為數(shù)據(jù)庫應(yīng)用如 MySQL、ElasticSearch、ClickHouse 提供高并發(fā)、低時延云盤服務(wù),實(shí)現(xiàn)徹底的存算分離。
  • 在線服務(wù):為在線業(yè)務(wù)(如廣告、點(diǎn)擊流、搜索)或終端用戶的圖、文、音視頻等內(nèi)容提供高可靠、低成本的對象存儲服務(wù)。
  • 傳統(tǒng) NAS 上云:替換線下傳統(tǒng)本地存儲及 NAS,助力 IT 業(yè)務(wù)上云。

特性

CubeFS 具有眾多特性,包括:

多協(xié)議

兼容 S3、POSIX、HDFS 等多種訪問協(xié)議,協(xié)議間訪問可互通

  • POSIX 兼容:兼容 POSIX 接口,讓上層應(yīng)用的開發(fā)變得極其簡單,就跟使用本地文件系統(tǒng)一樣便捷。此外,CubeFS 在實(shí)現(xiàn)時放松了對 POSIX 語義的一致性要求來兼顧文件和元文件操作的性能。
  • 對象存儲兼容:兼容 AWS 的 S3 對象存儲協(xié)議,用戶可以使用原生的 Amazon S3 SDK 管理 CubeFS 中的資源。
  • Hadoop 協(xié)議兼容:兼容 Hadoop FileSystem 接口協(xié)議,用戶可以使用 CubeFS 來替換 HDFS,做到上層業(yè)務(wù)無感。

雙引擎

支持多副本及糾刪碼兩種引擎,用戶可以根據(jù)業(yè)務(wù)場景靈活選擇

  • 多副本存儲引擎:副本之間的數(shù)據(jù)為鏡像關(guān)系,通過強(qiáng)一致的復(fù)制協(xié)議來保證副本之間的數(shù)據(jù)一致性,用戶可以根據(jù)應(yīng)用場景靈活的配置不同副本數(shù)。
  • 糾刪碼存儲引擎:糾刪碼引擎具備高可靠、高可用、低成本、支持超大規(guī)模(EB)的特性,根據(jù)不同 AZ 模型可以靈活選擇糾刪碼模式。

多租戶

支持多租戶管理,提供細(xì)粒度的租戶隔離策略

可擴(kuò)展

可以輕松構(gòu)建 PB 或者 EB 級規(guī)模的分布式存儲服務(wù),各模塊可水平擴(kuò)展

高性能

支持多級緩存,針對小文件特定優(yōu)化,支持多種高性能的復(fù)制協(xié)議

  • 元數(shù)據(jù)管理:元數(shù)據(jù)集群為內(nèi)存元數(shù)據(jù)存儲,在設(shè)計(jì)上使用兩個 B-Tree(inodeBTree 與 dentryBTree)來管理索引,進(jìn)而提升元數(shù)據(jù)訪問性能;
  • 強(qiáng)一致副本協(xié)議 :CubeFS 根據(jù)文件寫入方式的不同采用不同的復(fù)制協(xié)議來保證副本間的數(shù)據(jù)一致性。(如果文件按照順序?qū)懭耄瑒t會使用主備復(fù)制協(xié)議來優(yōu)化 IO 吞吐量;如果是隨機(jī)寫入覆蓋現(xiàn)有文件內(nèi)容時,則是采用一種基于 Multi-Raft 的復(fù)制協(xié)議,來確保數(shù)據(jù)的強(qiáng)一致性);
  • 多級緩存:糾刪碼卷支持多級緩存加速能力,針對熱點(diǎn)數(shù)據(jù),提供更高數(shù)據(jù)訪問性能:
  • 本地緩存:可以在 Client 機(jī)器上同機(jī)部署 BlockCache 組件,將本地磁盤作為本地緩存. 可以不經(jīng)過網(wǎng)絡(luò)直接讀取本地 Cache, 但容量受本地磁盤限制;
  • 全局緩存:使用副本組件 DataNode 搭建的分布式全局 Cache, 比如可以通過部署客戶端同機(jī)房的 SSD 磁盤的 DataNode 作為全局 cache, 相對于本地 cache, 需要經(jīng)過網(wǎng)絡(luò), 但是容量更大, 可動態(tài)擴(kuò)縮容,副本數(shù)可調(diào)。

云原生

基于 CSI 插件可以快速地在 Kubernetes 上使用 CubeFS。

整體架構(gòu)

整體上 CubeFS 由元數(shù)據(jù)子系統(tǒng)(Metadata Subsystem)、數(shù)據(jù)子系統(tǒng)(Data Subsystem)和資源管理節(jié)點(diǎn)(Master)以及對象網(wǎng)關(guān)(Object Subsystem)組成,可以通過 POSIX/HDFS/S3 接口訪問存儲數(shù)據(jù)。

資源管理節(jié)點(diǎn)

由多個 Master 節(jié)點(diǎn)組成,負(fù)責(zé)異步處理不同類型的任務(wù),如管理數(shù)據(jù)分片與元數(shù)據(jù)分片(包括創(chuàng)建、刪除、更新以及一致性檢查等),檢查數(shù)據(jù)節(jié)點(diǎn)或者元數(shù)據(jù)節(jié)點(diǎn)的健康狀態(tài),維護(hù)管理卷信息等

Master 節(jié)點(diǎn)可以有多個,節(jié)點(diǎn)之間通過 Raft 算法保證元數(shù)據(jù)的一致性,并且持久化到 RocksDB 中。

元數(shù)據(jù)子系統(tǒng)

由多個 Meta Node 節(jié)點(diǎn)組成,多個元數(shù)據(jù)分片(Meta Partition)和 Raft 實(shí)例(基于 Multi-Raft 復(fù)制協(xié)議)組成,每個元數(shù)據(jù)分片表示一個 Inode 范圍元數(shù)據(jù),其中包含兩棵內(nèi)存 B-Tree 樹:inode BTree 與 dentry BTree。

元數(shù)據(jù)實(shí)例最少需要 3 個,支持水平擴(kuò)容。

數(shù)據(jù)子系統(tǒng)

分為副本子系統(tǒng)和糾刪碼子系統(tǒng),兩種子系統(tǒng)可同時存在,也都可單獨(dú)存在:

  • 副本子系統(tǒng)由 DataNode 組成,每個節(jié)點(diǎn)管理一組數(shù)據(jù)分片,多個節(jié)點(diǎn)的數(shù)據(jù)分片構(gòu)成一個副本組;
  • 糾刪碼子系統(tǒng)(Blobstore)主要由 BlobNode 模塊組成,每個節(jié)點(diǎn)管理一組數(shù)據(jù)塊,多個節(jié)點(diǎn)的數(shù)據(jù)塊構(gòu)成一個糾刪碼條帶。

數(shù)據(jù)節(jié)點(diǎn)支持水平擴(kuò)容。

對象子系統(tǒng)

由對象節(jié)點(diǎn)(ObjectNode)組成,提供了兼容標(biāo)準(zhǔn) S3 語義的訪問協(xié)議,可以通過 Amazon S3 SDK 或者是 s3cmd 等工具訪問存儲資源。

邏輯上的概念,由多個元數(shù)據(jù)和數(shù)據(jù)分片組成,從客戶端的角度看,卷可以被看作是可被容器訪問的文件系統(tǒng)實(shí)例。從對象存儲的角度來看,一個卷對應(yīng)著一個 bucket。一個卷可以在多個容器中掛載,使得文件可以被不同客戶端同時訪問。

安裝

CubeFS 的安裝方式有很多,包括 Docker、YUM 等等,由于我們這里直接直接在 Kubernetes 上使用,因此我們可以通過 Helm 來安裝 CubeFS,各組件會直接使用宿主機(jī)網(wǎng)絡(luò),使用 hostPath 將磁盤映射到容器中。

在 Kubernetes 集群中部署 CubeFS 可以按照下圖所示的架構(gòu)進(jìn)行部署:

CubeFS 目前由這四部分組成:

  • Master:資源管理節(jié)點(diǎn),負(fù)責(zé)維護(hù)整個集群的元信息,部署為 StatefulSet 資源。
  • DataNode:數(shù)據(jù)存儲節(jié)點(diǎn),需要掛載大量磁盤負(fù)責(zé)文件數(shù)據(jù)的實(shí)際存儲,部署為 DaemonSet 資源。
  • MetaNode:元數(shù)據(jù)節(jié)點(diǎn),負(fù)責(zé)存儲所有的文件元信息,部署為 DaemonSet 資源。
  • ObjectNode:負(fù)責(zé)提供轉(zhuǎn)換 S3 協(xié)議提供對象存儲的能力,無狀態(tài)服務(wù),部署為 Deployment 資源。

在部署之前,我們需要擁有一個至少有 3 個節(jié)點(diǎn)(最好 4 個以上,可以容災(zāi))的 Kubernetes 集群,且集群版本需要大于等于 1.15。

$ kubectl get nodes
NAME     STATUS   ROLES           AGE   VERSION
master   Ready    control-plane   46d   v1.28.7
node1    Ready    <none>          46d   v1.28.7
node2    Ready    <none>          46d   v1.28.7

首先我們需要給節(jié)點(diǎn)打上各自的標(biāo)簽,標(biāo)明這臺機(jī)器要在 CubeFS 集群中承擔(dān)的角色:

由于我們這里只有 3 個節(jié)點(diǎn),所以需要這些節(jié)點(diǎn)承擔(dān)一些共同的角色。

  • Master 節(jié)點(diǎn),至少三個,建議為奇數(shù)個:
kubectl label node master component.cubefs.io/master=enabled
kubectl label node node1 component.cubefs.io/master=enabled
kubectl label node node2 component.cubefs.io/master=enabled
  • MetaNode 元數(shù)據(jù)節(jié)點(diǎn),至少 3 個,奇偶無所謂:
kubectl label node master component.cubefs.io/metanode=enabled
kubectl label node node1 component.cubefs.io/metanode=enabled
kubectl label node node2 component.cubefs.io/metanode=enabled
  • Datanode 數(shù)據(jù)節(jié)點(diǎn),至少 3 個,奇偶無所謂:
kubectl label node master component.cubefs.io/datanode=enabled
kubectl label node node1 component.cubefs.io/datanode=enabled
kubectl label node node2 component.cubefs.io/datanode=enabled
  • ObjectNode 對象存儲節(jié)點(diǎn),可以按需進(jìn)行標(biāo)記,不需要對象存儲功能的話也可以不部署這個組件:
kubectl label node node1 component.cubefs.io/objectnode=enabled
kubectl label node node2 component.cubefs.io/objectnode=enabled
  • CSI 組件,用于在 Kubernetes 中使用 CubeFS,需要在所有節(jié)點(diǎn)上部署:
kubectl label node node1 component.cubefs.io/csi=enabled
kubectl label node node2 component.cubefs.io/csi=enabled

CubeFS 安裝時會根據(jù)這些標(biāo)簽通過 nodeSelector 進(jìn)行匹配,然后在機(jī)器創(chuàng)建起對應(yīng)的 Pod。

接下來我們就可以通過 Helm 來安裝 CubeFS 了,首先我們需要將 CubeFS 的 Helm Chart 下載到本地:

git clone https://github.com/cubefs/cubefs-helm
cd cubefs-helm

然后根據(jù)自身環(huán)境定制 values 文件,比如下面是一個簡單的 values 文件:

# cubefs-values.yaml
component:
  master: true
  datanode: true
  metanode: true
  objectnode: false
  client: false
  csi: true
  monitor: false
  ingress: true

image:
  # 3.3.0 版本之前會出現(xiàn) /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 錯誤
  server: cubefs/cfs-server:v3.3.0
  client: cubefs/cfs-client:v3.3.0
  csi_driver: cnych/cubefs-cfs-csi-driver:3.2.0.150.0
  csi_provisioner: cnych/csi-provisioner:v2.2.2
  csi_attacher: cnych/csi-attacher:v3.4.0
  csi_resizer: cnych/csi-resizer:v1.3.0
  driver_registrar: cnych/csi-node-driver-registrar:v2.5.0

master:
  # The replicas of master component, at least 3, recommend to be an odd number
  replicas: 3
  tolerations:
    - key: "node-role.kubernetes.io/control-plane"
      operator: "Exists"
      effect: "NoSchedule"
  resources:
    enabled: true
    requests:
      memory: "512Mi"
      cpu: "500m"
    limits:
      memory: "512Mi"
      cpu: "500m"

metanode:
  total_mem: "4000000000"
  tolerations:
    - key: "node-role.kubernetes.io/control-plane"
      operator: "Exists"
      effect: "NoSchedule"
  resources:
    enabled: true
    requests:
      memory: "512Mi"
      cpu: "500m"
    limits:
      memory: "512Mi"
      cpu: "500m"

datanode:
  # DataNode 要使用的磁盤,可以掛載多塊
  # 格式: 掛載點(diǎn):保留的空間
  # 保留的空間: 單位字節(jié),當(dāng)磁盤剩余空間小于該值時將不會再在該磁盤上寫入數(shù)據(jù)
  disks:
    - /data0:10000000000
  tolerations:
    - key: "node-role.kubernetes.io/control-plane"
      operator: "Exists"
      effect: "NoSchedule"
  resources:
    enabled: true
    requests:
      memory: "512Mi"
      cpu: "500m"
    limits:
      memory: "512Mi"
      cpu: "500m"

csi:
  driverName: csi.cubefs.com
  logLevel: error
  kubeletPath: /var/lib/kubelet
  controller:
    tolerations: []
    nodeSelector:
      component.cubefs.io/csi: "enabled"
  node:
    tolerations: []
    nodeSelector:
      component.cubefs.io/csi: "enabled"
    resources:
      enabled: true
      requests:
        memory: "512Mi"
        cpu: "500m"
      limits:
        memory: "512Mi"
        cpu: "500m"

  storageClass:
    setToDefault: false
    reclaimPolicy: "Delete"

# CSI 客戶端配置
provisioner:
  # Kubelet 的主目錄
  kubelet_path: /var/lib/kubelet

然后使用如下命令進(jìn)行 CubeFS 部署:

helm upgrade --install cubefs -n cubefs-system ./cubefs-helm/cubefs -f cubefs-values.yaml --create-namespace

部署完成后可以使用命令 kubectl get pods -n cubefs-system 等待所有組件狀態(tài)變?yōu)?Running 即可:

$ kubectl get pods -n cubefs-system
NAME                                  READY   STATUS     RESTARTS   AGE
cfs-csi-controller-66cdbb664f-pqkp6   4/4     Running    0          28m
cfs-csi-node-966t9                    2/2     Running    0          25m
cfs-csi-node-9f4ts                    2/2     Running    0          25m
datanode-4zfhc                        1/1     Running    0          28m
datanode-blc8w                        1/1     Running    0          28m
datanode-ldj72                        1/1     Running    0          28m
master-0                              1/1     Running    0          28m
master-1                              1/1     Running    0          23m
master-2                              1/1     Running    0          23m
metanode-5csgt                        1/1     Running    0          7m31s
metanode-jvqnl                        1/1     Running    0          7m31s
metanode-vpjtj                        1/1     Running    0          7m31s

各個組件的關(guān)鍵日志會在容器標(biāo)準(zhǔn)輸出中輸出。

此外還會自動創(chuàng)建一個 StorageClass 對象,可以通過 kubectl get sc 查看:

$ kubectl get sc
NAME         PROVISIONER                                   RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
cfs-sc       csi.cubefs.com                                Delete          Immediate           true                   29m

測試

現(xiàn)在我們有了一個可用的 StorageClass 對象了,接下來可以創(chuàng)建一個 PVC 對象來測試 CubeFS 的存儲功能。如下所示:

# cubefs-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cubefs-pvc
  namespace: default
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: cfs-sc

上面的 PVC 對象中我們通過 storageClassName 指定了使用的 StorageClass 名稱,這里是 cfs-sc,這個名稱需要和我們之前創(chuàng)建的 StorageClass 名稱一致,這樣就會根據(jù) cubefs-sc 中定義的參數(shù)來創(chuàng)建存儲卷。當(dāng)我們在編寫 pvc yaml 主要注意一下參數(shù):

  • metadata.name:pvc 的名稱,可以按需修改,同一個 namespace 下 pvc 名稱是唯一的,不允許有兩個相同的名稱。
  • metadata.namespace:pvc 所在的命名空間,按需修改
  • spec.resources.request.storage:pvc 容量大小。
  • storageClassName:這是 storage class 的名稱。如果想知道當(dāng)前集群有哪些 storageclass,可以通過命令 kubectl get sc 來查看。

這里直接應(yīng)用這個 yaml 文件即可:

kubectl apply -f cubefs-pvc.yaml

執(zhí)行命令完成后,可以通過命令 kubectl get pvc -n 命名空間 來查看對應(yīng) pvc 的狀態(tài),Pending 代表正在等待,Bound 代表創(chuàng)建成功。

$ kubectl get pvc
NAME         STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
cubefs-pvc   Bound    pvc-53cc95b7-8a05-43f8-8903-f1c6f7b11c05   5Gi        RWO            cfs-sc         3s

如果 PVC 的狀態(tài)一直處于 Pending,可以通過命令查看原因:

kubectl describe pvc -n 命名空間 PVC 名稱

如果報(bào)錯消息不明顯或者看不出錯誤,則可以使用 kubectl logs 相關(guān)命令先查看 csi controller pod 里面的 csi-provisioner 容器的報(bào)錯信息,csi-provisioner 是 k8s 與 csi driver 的中間橋梁,很多信息都可以在這里的日志查看。

如果 csi-provisioner 的日志還看不出具體問題,則使用 kubectl exec 相關(guān)命令查看 csi controller pod 里面的 cfs-driver 容器的日志,它的日志放在容器里面的 /cfs/logs 下。

這里不能使用 Kubectl logs 相關(guān)命令是因?yàn)?cfs-driver 的日志并不是打印到標(biāo)準(zhǔn)輸出,而其它幾個類似 csi-provisioner 的 sidecar 容器的日志是打印到標(biāo)準(zhǔn)輸出的,所以可以使用 kubectl logs 相關(guān)命令查看。

有了 PVC 則接下來就可以在應(yīng)用中掛載到指定目錄了,比如我們這里有一個如下所示的示例:

# cfs-csi-demo.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cfs-csi-demo
  namespace: default
spec:
  selector:
    matchLabels:
      app: cfs-csi-demo-pod
  template:
    metadata:
      labels:
        app: cfs-csi-demo-pod
    spec:
      nodeSelector:
        component.cubefs.io/csi: enabled
      containers:
        - name: cfs-csi-demo
          image: nginx:1.17.9
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 80
              name: "http-server"
          volumeMounts:
            - mountPath: "/usr/share/nginx/html"
              mountPropagation: HostToContainer
              name: mypvc
      volumes:
        - name: mypvc
          persistentVolumeClaim:
            claimName: cubefs-pvc

上面的資源清單中我們將一個名稱為 cubefs-pvc 的 PVC 掛載到 cfs-csi-demo 容器里面的 /usr/share/nginx/html 下。

同樣直接創(chuàng)建這個資源清單即可:

kubectl apply -f cfs-csi-demo.yaml

創(chuàng)建完成后可以通過 kubectl get pods 查看 Pod 的狀態(tài):

$ kubectl get pods -owide
NAME                                      READY   STATUS    RESTARTS       AGE   IP           NODE    NOMINATED NODE   READINESS GATES
cfs-csi-demo-5d456c8d97-sjsvw             1/1     Running   0              78s   10.0.1.85    node1   <none>           <none>

我們可以直接通過往 /usr/share/nginx/html 目錄寫入文件來測試 CubeFS 的存儲功能:

$ kubectl exec -it cfs-csi-demo-5d456c8d97-sjsvw -- /bin/bash
root@cfs-csi-demo-5d456c8d97-sjsvw:/# echo "Hello, CubeFS" > /usr/share/nginx/html/index.html
root@cfs-csi-demo-5d456c8d97-sjsvw:/#

然后我們可以將這個 Pod 刪除重建,然后查看是否還有這個文件:

$ kubectl delete pod cfs-csi-demo-5d456c8d97-sjsvw
$ kubectl get pods
NAME                                      READY   STATUS    RESTARTS       AGE
cfs-csi-demo-5d456c8d97-c245z             1/1     Running   0              3m22s
$ kubectl exec -it cfs-csi-demo-5d456c8d97-c245z -- ls /usr/share/nginx/html
index.html
$ kubectl exec -it cfs-csi-demo-5d456c8d97-c245z -- cat /usr/share/nginx/html/index.html
Hello, CubeFS

如果能夠看到 Hello, CubeFS 則說明 CubeFS 的存儲功能正常。

責(zé)任編輯:姜華 來源: k8s技術(shù)圈
相關(guān)推薦

2015-05-06 15:51:09

OceanStor 1新一代高端存儲系統(tǒng)華為

2017-11-01 09:07:05

2009-04-14 21:45:33

LinuxUbuntu系統(tǒng)服務(wù)器

2015-05-06 11:00:35

存儲華為OceanStor

2023-02-22 18:07:53

新華三

2009-03-11 13:02:20

存儲虛擬化數(shù)據(jù)中心

2017-10-19 16:21:02

SCM存儲技術(shù)

2025-03-17 10:38:30

2015-05-06 10:04:53

華為存儲/高端存儲

2023-03-09 22:00:25

2013-10-10 09:39:36

Windows SerHyper-v微軟

2018-03-29 15:50:48

華為

2015-06-23 15:46:56

高端存儲濟(jì)南華為

2017-05-15 08:56:05

NVMeTier 0存儲

2009-07-09 18:03:54

開源云計(jì)算開發(fā)

2020-09-24 14:19:18

騰訊云大數(shù)據(jù)Apache

2023-01-12 15:32:46

云原生Loggie

2009-04-14 19:36:31

Vmware虛擬化云存儲

2012-05-29 09:23:42

虛擬化微軟私有云

2013-07-03 09:49:21

云計(jì)算數(shù)據(jù)中心
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號