- Published on
[Thực hành]-Hướng dẫn Setup CephFS trên môi trường BareMetal / VM thực tế
- Authors
- Name
- Bạch Đăng Tuấn
- Occupation
- Kỹ sư công nghệ thông tin
- Zalo: 0934.01.07.04
Setup CephFS trên môi trường thực tế
Để triển khai cephFS trong môi trường thực tế thì chúng ta cần phải hiểu cơ chế hoạt động của CephFS ! Nếu như các bạn chưa nắm định nghĩa các thành phần có thể xem tại đây
Cơ chế hoạt động của Ceph FS
📑 Mục Lục
- Chuẩn bị
- Tuning OS hệ thống
- Cài đặt hệ thống CephFS
- Test hiệu năng hệ thống
- Kịch bản mở rộng hệ thống
- Kịch bản xử lý sự cố hệ thống
🧰 Chuẩn bị
✨ Cấu hình máy chủ
Triển khai trong môi trường thực tế thì chúng ta cần chuẩn bị các máy chủ với thông số như sau:Môi trường | Số lượng VM | Ghi chú mô hình |
---|---|---|
Lab/Test/Dev (demo) | 3-4 VM | Gộp MON, MGR, MDS và OSD trên cùng node |
UAT/Staging | 5-6 VM | Tách vai trò, có standby MDS |
Production nhỏ | 6-8 VM | HA đầy đủ, MON quorum, MGR standby, MDS active/standby, OSD tách biệt |
Production lớn | 9-15+ VM | Mỗi vai trò chạy node riêng, OSD nhiều disk, scale CephFS |
Môi trường | Ubuntu LTS phiên bản | Kernel tối thiểu | RAM mỗi node | CPU mỗi node |
---|---|---|---|---|
Lab/Test/Dev (demo) | 20.04 hoặc 22.04 | ≥ 5.4 | 4 GB | 2 vCPU |
Dev / Staging | ✅ 22.04 LTS | ≥ 5.15 | 6–8 GB | 2–4 vCPU |
Production nhỏ gọn | ✅ 22.04 LTS | ≥ 5.15 | 8–16 GB | 4 vCPU |
🏢 Production quy mô lớn | ✅ 22.04 hoặc ⚠️24.04* | ≥ 5.15 | 16–64 GB | 8+ vCPU |
Ubuntu 24.04 mới ra, cần kiểm chứng thêm trước khi dùng cho production. Tùy thuộc vào số lượng OSD, MDS, MON, MGR mà chúng ta có thể điều chỉnh thông số RAM và CPU cho phù hợp với nhu cầu sử dụng của mình.
✨ Mô hình thiết kế
+-------------------+
| Clients |
| (Mount CephFS) |
+---------+---------+
|
Ceph Cluster Network
|
|
+-----------------+ +-----------------+ +-----------------+
| node1 | | node2 | | node3 |
|-----------------| |-----------------| |-----------------|
| MON | | MON | | MON | ---> Controller Pannel
| MGR (Active) | | MGR (Standby) | | MGR (Standby) |
| MDS (Active) | | MDS (Active) | | MDS (Standby) |
+-----------------+ +-----------------+ +-----------------+
|
|
+---------------+---------------+
|
|
+----------------+ +----------------+ +----------------+
| node4 | | node5 | | node6 |
|----------------| |----------------| |----------------| ---> Data Pannel
| OSD(s) | | OSD(s) | | OSD(s) |
+----------------+ +----------------+ +----------------+
Mô tả hệ thống : Hiện tại hệ thống ban đầu sẽ cài đặt 2 phần, phần quản trị là Controller Pannel bao gồm các thành phần (3 MON , MGR(active-stanby), MDS(2 active - 1 stanby)), sau đó sẽ áp dụng các vấn đề ở mục Kịch bản mở rộng hệ thống và Kịch bản xử lý sự cố hệ thống
🧰 Tuning OS hệ thống
Tuning file /etc/security/limits.conf
soft nofile 1048576
hard nofile 1048576
soft nproc 1048576
hard nproc 1048576
Tuning file /etc/systemd/system.conf
DefaultLimitNOFILE=1048576
DefaultLimitNPROC=1048576
Tắt swapoff
swapoff -a sed -i '/ swap / s/^/#/' /etc/fstab
sudo systemctl daemon-reexec
Tinh file sysctl
# ==========================================
# Ceph Node OS Tuning - sysctl config
# File: /etc/sysctl.d/90-ceph.conf
# ==========================================
# -----------------------------
# 1. CPU Scheduler Optimization
# -----------------------------
kernel.sched_min_granularity_ns = 10000000 # Giảm độ trễ xử lý tác vụ nhỏ
kernel.sched_wakeup_granularity_ns = 15000000 # Giới hạn mức độ "wakeup" để giảm context switch
kernel.sched_migration_cost_ns = 500000 # Tăng chi phí migrate giữa CPU → giữ cache locality
kernel.sched_autogroup_enabled = 0 # Tắt tự nhóm tiến trình người dùng (không cần với Ceph)
# -----------------------------
# 2. Memory / RAM Optimization
# -----------------------------
vm.swappiness = 10 # Giảm tối đa việc sử dụng swap
vm.dirty_ratio = 20 # Tối đa 20% RAM chứa dữ liệu chưa ghi xuống disk
vm.dirty_background_ratio = 10 # Bắt đầu flush khi đạt 10% RAM dirty
vm.vfs_cache_pressure = 50 # Giữ inode/dentry cache lâu hơn (tốt cho CephFS)
vm.min_free_kbytes = 262144 # Dự trữ RAM cho kernel khi memory thấp
vm.zone_reclaim_mode = 0 # Tắt reclaim NUMA zone không cần thiết
# -----------------------------
# 3. Disk I/O Optimization
# -----------------------------
fs.aio-max-nr = 1048576 # Tăng số lượng async I/O tối đa toàn hệ thống
fs.file-max = 2097152 # Tăng số file descriptor system-wide (fd limit)
# -----------------------------
# 4. Network Stack Tuning
# -----------------------------
net.core.rmem_max = 268435456 # Max buffer nhận (recv) cho socket
net.core.wmem_max = 268435456 # Max buffer gửi (send) cho socket
net.ipv4.tcp_rmem = 4096 87380 268435456 # Min/default/max TCP recv buffer
net.ipv4.tcp_wmem = 4096 65536 268435456 # Min/default/max TCP send buffer
net.core.netdev_max_backlog = 5000 # Số packet có thể xếp hàng chờ xử lý từ NIC
net.ipv4.tcp_congestion_control = bbr # Sử dụng thuật toán TCP BBR (hiệu năng cao)
net.ipv4.tcp_mtu_probing = 1 # Bật dò MTU để tránh fragmentation
# -----------------------------
# 5. System stability
# -----------------------------
kernel.panic = 10 # Sau 10s lỗi kernel → hệ thống sẽ reboot
kernel.panic_on_oops = 1 # Panic khi có lỗi nghiêm trọng (kernel oops)
🧰 Cài đặt hệ thống CephFS bằng CephAdm
Cephadm sử dụng kết nối SSH để tương tác với các máy chủ và triển khai các dịch vụ bằng cách sử dụng các image container tiêu chuẩn. Nó không phụ thuộc vào các công cụ bên ngoài như Ansible và Salt. Cụm (cluster) được xây dựng đơn giản bằng cách tải xuống một binary và chạy một chuỗi khởi động (bootstrap sequence). Tóm lại, Cephadm là cách dễ nhất từ trước đến nay để thiết lập và chạy một cụm Ceph mới một cách nhanh chóng.Ceph ko cần cài docker (tùy các bạn), vì cephadm đã có gói cài podman rồi Xem các bản repo của ceph tại đây https://docs.ceph.com/en/latest/releases/#active-releases
PHẦN CONTROL PLANE
Thêm vào /etc/hosts trên 6 server
192.168.140.82 ceph-test01
192.168.140.81 ceph-test02
192.168.140.80 ceph-test03
192.168.140.79 ceph-test04
192.168.140.78 ceph-test05
192.168.140.77 ceph-test06
Cài đặt podman và cài cephadm
sudo apt update
sudo apt install -y podman
CEPH_RELEASE=18.2.0
curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm
Add repo cho ceph
./cephadm add-repo --release Quincy
./cephadm install
which cephadm
cephadm install ceph-common
Khởi chạy MON trên node01
cephadm bootstrap --mon-ip <IP-node1> --allow-fqdn-hostname --initial-dashboard-user admin --initial-dashboard-password ceph123
kiểm tra lại bằng podman
root@ceph-test01:~# podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3f030bc85de0 quay.io/ceph/ceph:v17 -n mon.ceph-test0... 9 minutes ago Up 9 minutes ago ceph-b3de108a-175b-11f0-84d0-8b1077e59f38-mon-ceph-test01
59d1e0abfbcb quay.io/ceph/ceph:v17 -n mgr.ceph-test0... 9 minutes ago Up 9 minutes ago ceph-b3de108a-175b-11f0-84d0-8b1077e59f38-mgr-ceph-test01-bbemxg
25d3ab19dad1 quay.io/ceph/ceph@sha256:a0f373aaaf5a5ca5c4379c09da24c771b8266a09dc9e2181f90eacf423d7326f -n client.crash.c... 8 minutes ago Up 8 minutes ago ceph-b3de108a-175b-11f0-84d0-8b1077e59f38-crash-ceph-test01
78fb257c2858 quay.io/prometheus/node-exporter:v1.5.0 --no-collector.ti... 8 minutes ago Up 8 minutes ago ceph-b3de108a-175b-11f0-84d0-8b1077e59f38-node-exporter-ceph-test01
c40c87c43720 quay.io/prometheus/prometheus:v2.43.0 --config.file=/et... 6 minutes ago Up 6 minutes ago ceph-b3de108a-175b-11f0-84d0-8b1077e59f38-prometheus-ceph-test01
bbb81b3fbbab quay.io/ceph/ceph-grafana:9.4.7 /bin/bash 6 minutes ago Up 6 minutes ago ceph-b3de108a-175b-11f0-84d0-8b1077e59f38-grafana-ceph-test01
6015ae9513fe quay.io/prometheus/alertmanager:v0.25.0 --cluster.listen-... 6 minutes ago Up 6 minutes ago ceph-b3de108a-175b-11f0-84d0-8b1077e59f38-alertmanager-ceph-test01
Add ssh key của ceph vào các node còn lại để cài đặt mon
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-test02
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-test03
Add thêm node vào cluster Ceph
root@ceph-test01:~# ceph orch host add ceph-test02 192.168.140.78
Added host 'ceph-test02' with addr '192.168.140.78'
root@ceph-test01:~# ceph orch host add ceph-test03 192.168.140.79
Added host 'ceph-test03' with addr '192.168.140.79'
Re-apply đúng MON bạn muốn giữ
ceph orch ls --service_name=mon
ceph orch apply mon ceph-test01 ceph-test02 ceph-test03
Kiểm tra MON lại bằng lệnh và thấy đủ quorum cho Ceph Cluster
root@ceph-test01:~# ceph mon stat
e3: 3 mons at {ceph-test01=[v2:192.168.140.77:3300/0,v1:192.168.140.77:6789/0],ceph-test02=[v2:192.168.140.78:3300/0,v1:192.168.140.78:6789/0],ceph-test03=[v2:192.168.140.79:3300/0,v1:192.168.140.79:6789/0]} removed_ranks: {} disallowed_leaders: {}, election epoch 14, leader 0 ceph-test01, quorum 0,1,2 ceph-test01,ceph-test02,ceph-test03
Kiểm tra trạng thái MGR trong cluster Ceph
root@ceph-test01:~# ceph -s
cluster:
id: e43912ea-1952-11f0-8517-5df617b74668
health: HEALTH_WARN
OSD count 0 < osd_pool_default_size 3
services:
mon: 3 daemons, quorum ceph-test01,ceph-test02,ceph-test03 (age 103s)
mgr: ceph-test01.uswgea(active, since 4m), standbys: ceph-test02.bhzgud
osd: 0 osds: 0 up, 0 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 0 B used, 0 B / 0 B avail
pgs:
Đến bước này chốt lại:
- MGR đã có active - stanby trên ceph-test01 và ceph-test02 (stanby)
- MON đã có trên 3 node ceph-test01,ceph-test02,ceph-test03
- OSD chưa có cài đặt
- MDS chưa có
PHẦN DATAPLANE
Add ssh key của ceph vào các node còn lại để cài đặt mon
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-test04
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-test05
ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph-test06
Add node vào cluster bằng ceph orch host add
root@ceph-test01:~# ceph orch host add ceph-test04 192.168.140.79
Added host 'ceph-test04' with addr '192.168.140.79'
root@ceph-test01:~# ceph orch host add ceph-test05 192.168.140.78
Added host 'ceph-test05' with addr '192.168.140.78'
root@ceph-test01:~# ceph orch host add ceph-test06 192.168.140.77
Added host 'ceph-test05' with addr '192.168.140.77'
Đánh label cho host trong cluster
root@ceph-test01:~# ceph orch host ls
HOST ADDR LABELS STATUS
ceph-test01 192.168.140.82 _admin
ceph-test02 192.168.140.80 control-plane
ceph-test03 192.168.140.80 control-plane
ceph-test04 192.168.140.79 data-plane
ceph-test05 192.168.140.77 data-plane
ceph-test06 192.168.140.77 data-plane
6 hosts in cluster
Tạo OSD để lưu trữ data Ở đây tôi sẽ tạo 3 OSD trên mỗi node ceph-test04 đến ceph-test06 các bạn có thể tạo nhiều hơn tùy thuộc vào nhu cầu sử dụng của mình.
Kiểm tra thông tin ổ đĩa trên các node ceph-test04 đến ceph-test06 ở trạng thái sẵn sàng tạo OSD
root@ceph-test01:~# ceph orch device ls ceph-test04 ceph-test05 ceph-test06
HOST PATH TYPE DEVICE ID SIZE AVAILABLE REFRESHED REJECT REASONS
ceph-test04 /dev/sdb hdd 100.0G Yes 15m ago
ceph-test05 /dev/sdb hdd 100.0G Yes 12m ago
ceph-test06 /dev/sdb hdd 100.0G Yes 13m ago
Tạo OSD trên các node ceph-test04 đến ceph-test06
root@ceph-test01:~# ceph orch daemon add osd ceph-test04:/dev/sdb
Created osd(s) 0 on host 'ceph-test04'
root@ceph-test01:~# ceph orch daemon add osd ceph-test05:/dev/sdb
Created osd(s) 1 on host 'ceph-test05'
root@ceph-test01:~# ceph orch daemon add osd ceph-test06:/dev/sdb
Created osd(s) 2 on host 'ceph-test06'
root@ceph-test01:~# ceph -s
cluster:
id: e43912ea-1952-11f0-8517-5df617b74668
health: HEALTH_OK
services:
mon: 3 daemons, quorum ceph-test01,ceph-test02,ceph-test03 (age 32h)
mgr: ceph-test01.uswgea(active, since 33h), standbys: ceph-test02.bhzgud
osd: 3 osds: 3 up (since 30s), 3 in (since 52s)
data:
pools: 1 pools, 1 pgs
objects: 2 objects, 449 KiB
usage: 873 MiB used, 299 GiB / 300 GiB avail
pgs: 1 active+clean
root@ceph-test01:~# ceph orch ps --daemon-type=osd
NAME HOST PORTS STATUS REFRESHED AGE MEM USE MEM LIM VERSION IMAGE ID CONTAINER ID
osd.0 ceph-test04 running (118s) 116s ago 118s 11.9M 5782M 17.2.8 259b35566514 7789cd62e378
osd.1 ceph-test05 running (86s) 83s ago 86s 12.1M 4379M 17.2.8 259b35566514 a1abe65e9a5d
osd.2 ceph-test06 running (57s) 53s ago 57s 12.0M 4379M 17.2.8 259b35566514 a74880ef2025
root@ceph-test01:~#
Tạo pool cho CephFS
Ceph sẽ tự tạo 2 pool: cephfs_data và cephfs_metadata Nếu cần tùy chỉnh pool (ví dụ dùng replicated hay erasure), bạn có thể tạo thủ công trước.
ceph fs volume create cephfs
Triển khai MDS
Do đánh label từ trước nên sẽ triển khai MDS trên các node có label là mds
root@ceph-test01:~# ceph orch apply mds cephfs --placement="label:mds"
Set 2 MDS active và 1 stanby
root@ceph-test01:~# ceph fs set cephfs max_mds 2
root@ceph-test01:~# ceph fs status
cephfs - 0 clients
======
RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS
0 active cephfs.ceph-test02.zidcux Reqs: 0 /s 10 13 12 0
1 active cephfs.ceph-test01.lduvdp Reqs: 0 /s 10 12 11 0
POOL TYPE USED AVAIL
cephfs.cephfs.meta metadata 96.0k 9428M
cephfs.cephfs.data data 0 9428M
STANDBY MDS
cephfs.ceph-test03.xeuzbi
MDS version: ceph version 17.2.8 (f817ceb7f187defb1d021d6328fa833eb8e943b3) quincy (stable)
SAU KHI HOÀN THÀNH CHỐT LẠI VẤN ĐỀ: Đã triển khai đúng mô hình
- MGR đã có active - stanby trên ceph-test01 và ceph-test02 (stanby)
- MON đã có trên 3 node ceph-test01,ceph-test02,ceph-test03
- OSD có 3 OSD trên 3 node ceph-test04,ceph-test05,ceph-test06
- MDS có 2 active trên ceph-test01 và ceph-test02, 1 stanby trên ceph-test03
- Pool đã có 2 pool là cephfs_data và cephfs_metadata
🧰 Test hiệu năng hệ thống
🧰 Kịch bản mở rộng hệ thống
🧰 Kịch bản xử lý sự cố hệ thống