作者簡介:楊興祥,QingStor 顧問軟件工程師,2012 年開始先后在創(chuàng)新科、華為從事存儲相關的開發(fā)工作,在分布式存儲領域有豐富的開發(fā)經驗,目前負責 QingStor NeonIO 云原生存儲的開發(fā)工作。
NeonIO 是什么
NeonIO 是一款支持容器化部署的企業(yè)級分布式塊存儲系統(tǒng),能夠給 Kubernetes 平臺上提供動態(tài)創(chuàng)建(dynamic provisioning)持久存儲卷(persistent volume)的能力,支持 clone、snapshot、resstore、resize 等功能。
NeonIO 架構圖

NeonIO 架構如圖上所示。
- zk/etcd:提供集群發(fā)現(xiàn)、分布式協(xié)調、選 master 等服務;
- mysql:提供元數(shù)據(jù)存儲服務,如 PV 存儲卷的元數(shù)據(jù);
- center:提供邏輯管理服務,如創(chuàng)建 PV 卷,快照;
- monitor:提供監(jiān)控服務,能夠把采集監(jiān)控指標暴露給 Prometheus;
- store:存儲服務,處理應用 IO 的功能;
- portal:提供 UI 界面服務;
- CSI:提供 csi 的標準 IO 接入服務;
NeonIO 特點
易用性
(1) 組件容器化:服務組件、CSI、Portal 容器化。
(2) 支持 CSI:提供標準的 IO 接入能力,可靜態(tài)、動態(tài)創(chuàng)建 PV。
(3) UI 界面,運維方便:
- 存儲運維操作界面化、告警、監(jiān)控可視管理;
- 有基于 PV 粒度的性能監(jiān)控,如 IOPS、吞吐量,可以快速定位到熱點 PV;
- 有基于 PV 粒度的 Qos,能夠保證用戶高優(yōu)先級的服務質量;
(4) 與云原生高度融合:
- 支持 Prometheus,通過 ServiceMonitor 把 NeonIO 的采集指標暴露給 Prometheus、Grafana,進行圖形化展示;
- 同時 UI 界面可與 Prometheus 對接,展示其他云原生監(jiān)控的指標,如 node-exporter 的磁盤 IO 負載、帶寬等;
- 平臺化的運維方式,存儲的擴容、升級、災難恢復運維操作、只需要 k8s 的一些命令即可完成,不需要額外掌握過多的存儲相關的運維知識;
- 服務發(fā)現(xiàn)、分布式協(xié)調支持 etcd、元數(shù)據(jù)的管理,使用 CRD 的方式;
(5) 一鍵式部署:helm install neonio ./neonio -- namespace kube-system。
(6) 部署簡單靈活:和 Rook-Ceph 對比:
| 功能 | NeonIO | Rook-Ceph |
|---|---|---|
| Quick Start | 總共 4 步: 1.檢查確保有可給供 neonio 的設備; 2.檢查是否已經安裝 QBD; 3.添加 helm repo; 4.安裝部署:helm install neonio ./neonio --namespace kube-system |
總共 5 步: 1.檢查確保有可給供 ceph 的設備; 2.檢查是否已經安裝 RBD; 3.apt-get install -y lvm2; 4.下載代碼:git clone --single-branch --branch master https://github.com/rook/rook.git 5.cd rook/cluster/examples/kubernetes/ceph kubectl create -f crds.yaml -f common.yaml -f operator.yaml kubectl create -f cluster.yaml |
| 單機 all-in-one | helm install neonio ./neonio --namespace kube-system --set sc.rep_count=1 --set center.servers=1 -- | cd rook/cluster/examples/kubernetes/ceph kubectl create -f crds.yaml -f common.yaml -f operator.yaml kubectl create -f cluster-test.yaml 使用區(qū)別與集群部署時的另一個配置cluster-test.yaml進行部署,不能做到配置共用 |
| 節(jié)點規(guī)劃部署 | 通過對對應節(jié)點打 label | 通過修改 cluster.yaml,需要配置節(jié)點 IP 配置那些服務 |
| RDMA/TCP | helm install neonio ./neonio --namespace kube-system --set store.type=RDMA | ceph 本身支持 RDMA,rook-ceph 不支持 |
| 管理、存儲網絡分離/共有 | helm install neonio ./neonio --namespace kube-system --set store.port=eth0 --set rep_port.port=eth1 | ceph 本身 pubic、cluster 網口的分離公用,rook-ceph 適配復雜 |
高性能
(1) 全閃的分布式存儲架構
- 集群中所有節(jié)點共同承擔壓力,IO 性能隨著節(jié)點增加而線性增長;
- 存儲介質支持 NVME SSD;
- 支持 RDMA:通過高速的 RDMA 技術將節(jié)點連接;
(2) 極短的 IO 路徑:拋棄文件系統(tǒng),自研元數(shù)據(jù)管理系統(tǒng),使 IO 路徑極短

(3) 使用 HostNetwork 網絡模式

好處:
- Store CSI Pod 使用 HostNetwork,直接使用物理網絡,減少網絡層次;
- 管理網絡、前端網絡、數(shù)據(jù)同步網絡分離,避免網絡競爭;
高可用
(1) 服務組件可靠性與可用性
- 管理服務默認使用3副本Pod,副本數(shù)可以配置,推薦使用 3/5 副本,任何一 Pod 因故障無法提供服務,還有其他 Pod 提供服務;
- 使用探針檢測 Pod 服務是否可用,是否存活,檢測到 Pod 服務部可用剔除組件服務, 檢測到 Pod down 掉后重啟 Pod,使其重新啟動服務;
(2) 數(shù)據(jù)的可靠性與可用性

- Volume 分片為 Shard;
- 每個 Shard 獨立選擇存儲位置;
- 每個 Shard 的 3 個副本存儲在不同的物理節(jié)點上;
- 寫入時同步寫入 3 個副本,強一致;
- 讀取時只從主副本讀;
- 副本數(shù)按 volume 可配;
敏捷性
(1) Pod 跨節(jié)點重建高效:2000PV 的掛載/卸載 16s。
(2) 批量創(chuàng)建 PV 能力:2000PV 的創(chuàng)建 5min。
NeonIO 性能表現(xiàn)
測試平臺:NeonIO 超融合一體機集群(3 個節(jié)點,192.168.101.174 - 192.168.101.176)。
注意:所有測試均使用 NVMe SSD,卷大小 = 1TiB。性能工具:https://github.com/leeliu/dbench

圖中黃色表示的是 NeonIO,第一張圖縱坐標是 IOPS,第二張圖縱坐標是毫秒,從結果來看,無論是單副本還是 3 副本,NeonIO 在 IOPS、時延都有明顯的優(yōu)勢。
NeonIO 應用場景
- Devops 場景:批量快速創(chuàng)建/銷毀 PV 能力,2000PV 創(chuàng)建 5min。
- 數(shù)據(jù)庫場景:WEB 網站后端數(shù)據(jù)庫 MySQL 等提供穩(wěn)定的持久化存儲,提供高 IOPS、低時延。
- 大數(shù)據(jù)應用分析場景:提供超大容量,PV 可擴容到 100TB。
- 計算和存儲分離部署場景:k8s 集群 1 部署 neonio,k8s 集群 2 通過 CSI 使用 k8s 集群1的neonio存儲。
相關文章推薦
存儲大師班 | ZFS存儲池塊管理與事務模型
對象存儲手把手教四 | Bucket 生命周期管理
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!