Blog chia sẻ về công nghệ ...
Published on

[Thực hành]-Hướng dẫn Setup CephFS trên môi trường BareMetal / VM thực tế

Authors

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

  1. Chuẩn bị
  2. Tuning OS hệ thống
  3. Cài đặt hệ thống CephFS
  4. Test hiệu năng hệ thống
  5. Kịch bản mở rộng hệ thống
  6. 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ườngSố lượng VMGhi chú mô hình
Lab/Test/Dev (demo)3-4 VMGộp MON, MGR, MDS và OSD trên cùng node
UAT/Staging5-6 VMTách vai trò, có standby MDS
Production nhỏ6-8 VMHA đầy đủ, MON quorum, MGR standby, MDS active/standby, OSD tách biệt
Production lớn9-15+ VMMỗi vai trò chạy node riêng, OSD nhiều disk, scale CephFS
Môi trườngUbuntu LTS phiên bảnKernel tối thiểuRAM mỗi nodeCPU mỗi node
Lab/Test/Dev (demo)20.04 hoặc 22.04≥ 5.44 GB2 vCPU
Dev / Staging✅ 22.04 LTS≥ 5.156–8 GB2–4 vCPU
Production nhỏ gọn✅ 22.04 LTS≥ 5.158–16 GB4 vCPU
🏢 Production quy mô lớn✅ 22.04 hoặc ⚠️24.04*≥ 5.1516–64 GB8+ 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ốngKị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