Ceph 三節點架構:3-Node All-in-One Lab Baseline
分類:architecture
架構決策:3 台對稱節點,每台承載 MON + MGR + OSD,並將 public / cluster network 分離
概述
使用三台 x86 VM 在 Azure 上架設 Ceph v19.2.2 Cluster。本文採用 3-node all-in-one Ceph lab baseline 架構:每台節點都同時承載 MON、MGR、OSD,並透過雙 NIC 分離 public network 與 cluster network,適合實驗測試環境。
架構圖
graph TB
subgraph Azure["Azure Cloud"]
subgraph PublicNet["Public/OS Network — shared-node-subnet (10.10.10.0/24)"]
direction LR
PUB1["10.10.10.21"]
PUB2["10.10.10.22"]
PUB3["10.10.10.23"]
end
subgraph ClusterNet["Cluster/Sync Network — mansion-ceph-cluster-subnet (172.10.10.0/24)"]
direction LR
CLU1["172.10.10.21"]
CLU2["172.10.10.22"]
CLU3["172.10.10.23"]
end
subgraph Node1["ceph-node-01 (Standard_D4s_v4)"]
MON1[MON]
MGR1[MGR]
OSD1A[OSD.0]
OSD1B[OSD.1]
DISK1A["64 GiB Data Disk 1"]
DISK1B["64 GiB Data Disk 2"]
OSD1A --> DISK1A
OSD1B --> DISK1B
end
subgraph Node2["ceph-node-02 (Standard_D4s_v4)"]
MON2[MON]
MGR2[MGR]
OSD2A[OSD.2]
OSD2B[OSD.3]
DISK2A["64 GiB Data Disk 1"]
DISK2B["64 GiB Data Disk 2"]
OSD2A --> DISK2A
OSD2B --> DISK2B
end
subgraph Node3["ceph-node-03 (Standard_D4s_v4)"]
MON3[MON]
MGR3[MGR]
OSD3A[OSD.4]
OSD3B[OSD.5]
DISK3A["64 GiB Data Disk 1"]
DISK3B["64 GiB Data Disk 2"]
OSD3A --> DISK3A
OSD3B --> DISK3B
end
PUB1 -.-> Node1
PUB2 -.-> Node2
PUB3 -.-> Node3
CLU1 -.-> Node1
CLU2 -.-> Node2
CLU3 -.-> Node3
Node1 -- "MON quorum" --> Node2
Node2 -- "MON quorum" --> Node3
Node3 -- "MON quorum" --> Node1
OSD1A -. "replication (cluster net)" .-> OSD2A
OSD2B -. "replication (cluster net)" .-> OSD3A
OSD3B -. "replication (cluster net)" .-> OSD1B
end
Admin((Admin)) -- "SSH / ceph CLI" --> PUB1
Client((Client)) -- "RBD mount" --> PublicNet
節點規格表
節點基本配置
| 節點名稱 | VM 規格 | vCPU | RAM | OS Disk | OSD Disks | Public IP (shared-node-subnet) | Cluster IP (mansion-ceph-cluster-subnet) |
|---|---|---|---|---|---|---|---|
ceph-node-01 |
Standard_D4s_v4 | 4 | 16 GiB | 64 GiB | 64 GiB x2 | 10.10.10.21 | 172.10.10.21 |
ceph-node-02 |
Standard_D4s_v4 | 4 | 16 GiB | 64 GiB | 64 GiB x2 | 10.10.10.22 | 172.10.10.22 |
ceph-node-03 |
Standard_D4s_v4 | 4 | 16 GiB | 64 GiB | 64 GiB x2 | 10.10.10.23 | 172.10.10.23 |
💡 設計考量: Standard_D4s_v4 提供穩定 CPU 效能,避免 Burstable 系列對 MON 與 OSD 的效能影響
元件分配表
每台節點承載的 Ceph 元件相同:
| 元件類型 | 數量 | 功能 | 資源消耗 |
|---|---|---|---|
| MON | 1 | 維護 cluster map,參與 quorum | ~0.2–0.5 vCPU |
| MGR | 1 | Dashboard、監控、編排(主動/待命) | ~0.3–0.7 vCPU |
| OSD | 2 | 儲存資料與 replication | ~0.5–1.5 vCPU per OSD |
| 合計 | ~2.0–4.5 vCPU per node |
⚠️ OSD 是 Ceph 最消耗資源的元件,每個 OSD 需獨立磁碟與足夠 CPU/RAM
網路配置
雙網路分離
| 網路類型 | Subnet 名稱 | CIDR | 用途 | 流量特性 |
|---|---|---|---|---|
| Public Network(共用) | shared-node-subnet |
10.10.10.0/24 | SSH、Ceph 管理、Client 存取、MON 通訊 | 管理流量、Client I/O |
| Cluster Network(Ceph 專屬) | mansion-ceph-cluster-subnet |
172.10.10.0/24 | OSD replication、backfill、recovery | 大量資料傳輸 |
💡
shared-node-subnet由 KubeVirt lab 建立並共用,KubeVirt K8s 節點佔用 10.10.10.10-12,Ceph 節點使用 10.10.10.21-23。mansion-ceph-cluster-subnet為 Ceph 專屬,由 Ceph Phase 0 在同一mansion-shared-vnet中建立。
IP 分配表
| 節點 | Public/OS IP(shared-node-subnet) | Cluster/Sync IP(mansion-ceph-cluster-subnet) |
|---|---|---|
ceph-node-01 |
10.10.10.21 | 172.10.10.21 |
ceph-node-02 |
10.10.10.22 | 172.10.10.22 |
ceph-node-03 |
10.10.10.23 | 172.10.10.23 |
💡 網路分離優勢: 將 OSD replication 流量與管理/Client 流量隔離,避免 backfill/recovery 影響前端效能
儲存配置
磁碟配置
每台節點共 3 顆磁碟:
| 磁碟類型 | 大小 | 用途 | 備註 |
|---|---|---|---|
| OS Disk | 64 GiB | 作業系統與 Ceph 軟體 | Premium SSD |
| OSD Data Disk 1 | 64 GiB | OSD 資料儲存 | 獨立磁碟 |
| OSD Data Disk 2 | 64 GiB | OSD 資料儲存 | 獨立磁碟 |
⚠️ 生產環境建議: 使用更大容量 data disk(512GB–4TB),並考慮獨立 WAL/DB SSD
OSD 配置
全 cluster 共 6 顆 OSD:
| OSD ID | 節點 | 對應磁碟 | 角色 |
|---|---|---|---|
| OSD.0 | ceph-node-01 | /dev/sdc | 資料儲存 |
| OSD.1 | ceph-node-01 | /dev/sdd | 資料儲存 |
| OSD.2 | ceph-node-02 | /dev/sdc | 資料儲存 |
| OSD.3 | ceph-node-02 | /dev/sdd | 資料儲存 |
| OSD.4 | ceph-node-03 | /dev/sdc | 資料儲存 |
| OSD.5 | ceph-node-03 | /dev/sdd | 資料儲存 |
RBD Pool 基本配置
Pool 參數表
建立預設 RBD pool k8s_rbd_pool:
| 參數 | 設定值 | 說明 |
|---|---|---|
| Pool Name | k8s_rbd_pool |
RBD block storage pool |
size |
3 | 每個 object 複製 3 份 |
min_size |
1 | 至少 1 份可用即可寫入(降級模式) |
pg_num |
128 | Placement Group 數量 |
pgp_num |
128 | PG for placement 數量 |
| Application | rbd |
啟用 RBD 應用 |
💡 PG 數量計算: 對於 6 顆 OSD、size=3 的 pool,128 PG 是合理起點(每 OSD 約分配 64 PG)
Pool 建立指令
# 建立 pool
ceph osd pool create k8s_rbd_pool 128 128
# 設定 size 與 min_size
ceph osd pool set k8s_rbd_pool size 3
ceph osd pool set k8s_rbd_pool min_size 1
# 啟用 RBD 應用
ceph osd pool application enable k8s_rbd_pool rbd
# 初始化 RBD pool
rbd pool init k8s_rbd_pool
Ceph 版本與設定
軟體版本
| 項目 | 版本 | 備註 |
|---|---|---|
| Ceph | v19.2.2 | Reef release |
| Cephadm | v19.2.2 | 容器化部署工具 |
| OS | Ubuntu 22.04 LTS | 建議使用 LTS 版本 |
核心設定
在 /etc/ceph/ceph.conf 或透過 ceph config set 設定:
[global]
# shared-node-subnet: 10.10.10.0/24 (KubeVirt K8s .10-.12, Ceph .21-.23)
public_network = 10.10.10.0/24
# mansion-ceph-cluster-subnet: 172.10.10.0/24 (Ceph dedicated)
cluster_network = 172.10.10.0/24
⚠️ 網路設定必須在 bootstrap 前確認正確,事後修改較為複雜
架構特點與限制
優點
- ✅ 簡單對稱:三台節點角色相同,易於理解與部署
- ✅ 網路分離:public 與 cluster network 分離,效能更佳
- ✅ 基本高可用:MON quorum 與 size=3 提供基本容錯能力
- ✅ 成本可控:3 台 D4s_v4 適合 Lab 環境
限制
- ⚠️ 不適合生產:All-in-One 配置單點故障影響範圍大
- ⚠️ 容量受限:6 顆 64 GiB OSD 實際可用容量約 128 GiB(size=3)
- ⚠️ 未分離 WAL/DB:未使用獨立 SSD 加速 metadata
- ⚠️ 無獨立 Admin 節點:管理操作直接在 Ceph 節點進行
Azure 成本估算
Lab 環境月費(以美國東部為例)
| 資源類型 | 規格 | 數量 | 單價(約) | 月費(約) |
|---|---|---|---|---|
| Compute | Standard_D4s_v4 | 3 | ~$140 | ~$420 |
| OS Disk | Premium SSD 64 GiB | 3 | ~$10 | ~$30 |
| Data Disk | Premium SSD 64 GiB | 6 | ~$10 | ~$60 |
| VNet / IP | Basic | — | ~$5 | ~$5 |
| 合計 | ~$515/月 |
💡 成本優化建議: 使用 Standard SSD 可降低 disk 成本;使用更小 VM 可降低 compute 成本(但需評估效能影響)