Hướng Dẫn Cài Đặt Và Cấu Hình Ceph Storage Tích Hợp Trên Proxmox VE: Lưu Trữ Phân Tán Tự Phục Hồi

Virtualization tutorial - IT technology blog
Virtualization tutorial - IT technology blog

Giới thiệu vấn đề: Nỗi đau lưu trữ tập trung và bài toán HA

Trước đây, bài toán lưu trữ cho cụm Proxmox thường khiến nhiều sysadmin đau đầu vì chỉ có hai lối đi: dùng ổ cứng cục bộ (Local ZFS/LVM) hoặc dựng NAS/SAN rời (TrueNAS qua iSCSI/NFS). Cả hai đều có điểm nghẽn khó chịu.

Dùng ổ cục bộ thì máy ảo kẹt cứng khi host sập nguồn; tính năng High Availability (HA) coi như vô dụng. Ngược lại, đầu tư một hộp SAN/NAS làm kho lưu trữ chung lại tạo ra điểm lỗi đơn lẻ (SPOF) chết người. Chỉ cần hộp NAS hỏng nguồn hay lỗi switch lưu trữ, toàn bộ 10–20 máy ảo trên các node sẽ đồng loạt tê liệt.

Khoảng 6 tháng trước, mình quyết định chuyển toàn bộ hạ tầng homelab sang mô hình Hyperconverged Infrastructure (HCI) bằng Ceph tích hợp sẵn trên Proxmox VE 8. Dàn lab gồm 3 node mini server gánh 12 VM và 8 LXC container — từ cụm PostgreSQL, Redis cho tới GitLab. Sau nửa năm ‘tra tấn’ bằng cách rút nóng cáp mạng và giật ổ SSD khi VM đang ghi nặng, Ceph chứng minh được sự bền bỉ đáng kinh ngạc nhờ cơ chế tự phục hồi (self-healing) mà không đòi hỏi thiết bị SAN đắt đỏ.

Khái niệm cốt lõi của Ceph trên Proxmox VE

Ceph là hệ thống lưu trữ phân tán mã nguồn mở. Nó gom toàn bộ ổ cứng vật lý trên các node thành một storage pool duy nhất. Dữ liệu ghi vào Ceph được băm nhỏ thành các object 4MB, sau đó thuật toán CRUSH sẽ tính toán và rải đều chúng lên các server mà không cần một metadata server trung tâm để tra cứu.

Để vận hành trơn tru cụm Ceph trên Proxmox, bạn chỉ cần nắm vững 4 thành phần sau:

  • OSD (Object Storage Daemon): Daemon gắn 1:1 với từng ổ đĩa vật lý (NVMe/SSD). OSD chịu trách nhiệm đọc, ghi, nhân bản và theo dõi sức khỏe của chính ổ đĩa đó.
  • MON (Ceph Monitor): Bộ não lưu giữ bản đồ trạng thái toàn cụm (Cluster Map). Để duy trì biểu quyết Quorum, bạn bắt buộc phải có số lượng MON lẻ (tối thiểu 3 MON trên 3 node riêng biệt).
  • MGR (Ceph Manager): Thu thập số liệu hiệu năng (IOPS, độ trễ, dung lượng) và mở API để giao diện web Proxmox hiển thị biểu đồ realtime.
  • RBD (RADOS Block Device): Định dạng ổ đĩa dạng khối (block device) mà Proxmox dùng để cấp phát ổ cứng ảo (raw format) cho máy ảo KVM, hỗ trợ snapshot tức thì và clone mượt mà.

Cơ chế Self-healing hoạt động dựa trên tham số nhân bản size/min_size. Khi bạn đặt size=3 và min_size=2, Ceph luôn duy trì 3 bản sao chéo nhau trên 3 node. Nếu node 3 đột ngột mất điện, Ceph nhận thấy chỉ còn 2 bản sao. Vì vẫn đạt ngưỡng min_size=2, máy ảo trên node 1 và 2 vẫn đọc ghi đĩa bình thường với độ trễ không đổi.

Yêu cầu phần cứng: Những bài học xương máu

Ceph rất mạnh, nhưng đánh đổi lại nó cực kỳ khắt khe về phần cứng. Đừng cố chạy Ceph nếu hạ tầng chưa đáp ứng 3 tiêu chí dưới đây:

  • Số lượng node: Tối thiểu 3 node vật lý riêng biệt. Đừng thử nghiệm cụm 2 node nếu bạn không muốn đối mặt với thảm họa split-brain khi mạng chập chờn.
  • Hạ tầng mạng: Tuyệt đối tránh xa mạng 1Gbps. Khi một node rớt mạng và kết nối lại, Ceph sẽ kích hoạt tiến trình đồng bộ (rebalance). Mạng 1Gbps sẽ nghẽn cứng ngay lập tức, đẩy I/O latency từ 1ms lên trên 1000ms khiến VM treo cứng. Mức tối thiểu chấp nhận được là 2.5Gbps; lý tưởng nhất là card 10Gbps SFP+ kết nối trực tiếp qua cáp DAC (Direct Attach Copper) với độ trễ dưới 0.1ms.
  • Ổ cứng SSD: Phải chọn SSD Enterprise có tính năng PLP (Power Loss Protection) như dòng Intel D3-S4510, Micron 5300 PRO hoặc Kioxia CD6. SSD tiêu dùng phổ thông (như Samsung 980 hay Crucial P3) thiếu tụ điện bảo vệ ghi cache, khiến Ceph BlueStore buộc phải flush dữ liệu liên tục. Kết quả: tốc độ ghi ngẫu nhiên tụt từ 400MB/s xuống thê thảm chỉ còn 10–25MB/s.

Thực hành chi tiết: Cài đặt và cấu hình Ceph Cluster trên 3 Node

Bước 1: Cấu hình card mạng riêng cho Ceph

Ta sẽ tách biệt dải IP quản lý PVE và dải IP nội bộ truyền tải dữ liệu Ceph. Tránh tuyệt đối việc để traffic Ceph tranh chấp băng thông với traffic mạng của VM.

Mở file /etc/network/interfaces trên từng node (ở ví dụ này là Node 1 – pve-01):

# Dải mạng quản lý PVE và VM thông thường (1Gbps)
auto vmbr0
iface vmbr0 inet static
    address 192.168.1.11/24
    gateway 192.168.1.1
    bridge-ports eno1
    bridge-stp off
    bridge-fd 0

# Dải mạng 10GbE chuyên dụng cho Ceph Cluster
auto enp3s0
iface enp3s0 inet static
    address 10.10.10.11/24
    mtu 9000

Lặp lại cấu hình tương tự cho Node 2 (10.10.10.12/24) và Node 3 (10.10.10.13/24). Kích hoạt bằng lệnh ifreload -a. Giá trị mtu 9000 (Jumbo Frame) giúp card mạng đóng gói các khung dữ liệu lớn hơn, giảm áp lực ngắt (interrupt) lên CPU khoảng 15% khi cụm đẩy throughput cao.

Bước 2: Cài đặt gói Ceph Reef trên toàn bộ cụm

Chạy lệnh cài đặt phiên bản Ceph Reef (phiên bản ổn định mặc định trên Proxmox VE 8) trên cả 3 server qua SSH:

pveceph install --version reef

Bước 3: Khởi tạo cụm Ceph trên Node đầu tiên

Bạn chỉ thực thi lệnh khởi tạo duy nhất một lần trên Node 1 (pve-01). Khai báo subnet 10G mà chúng ta vừa đặt:

pveceph init --network 10.10.10.0/24

Lệnh này sẽ tự sinh file cấu hình chuẩn /etc/pve/ceph.conf và tự động đồng bộ sang 2 node còn lại thông qua Proxmox Cluster File System (pmxcfs).

Bước 4: Tạo Monitor và Manager trên cả 3 node

Để đảm bảo tính chịu lỗi cao nhất, hãy tạo daemon MON và MGR trên từng node:

# Thực hiện tuần tự trên cả pve-01, pve-02 và pve-03:
pveceph mon create
pveceph mgr create

Kiểm tra tình trạng Quorum bằng lệnh:

ceph mon stat

Đầu ra hiển thị quorum 0,1,2 pve-01,pve-02,pve-03 báo hiệu cả 3 node đã bắt tay thành công.

Bước 5: Khởi tạo OSD từ các ổ cứng trắng

Giả sử mỗi node được gắn thêm một ổ NVMe trống tại đường dẫn /dev/nvme0n1. Trước tiên, hãy xóa sạch metadata và partition cũ để tránh lỗi xung đột:

# Chạy trên từng node trước khi thêm OSD
wipefs -a /dev/nvme0n1
pveceph osd create /dev/nvme0n1

Sau khi chạy xong trên 3 node, bạn kiểm tra cây phân bố OSD bằng lệnh:

ceph osd tree

Tất cả OSD phải ở trạng thái up và in với dung lượng hiển thị chính xác.

Bước 6: Tạo Ceph Pool và gắn Storage cho máy ảo

Bây giờ, tạo một pool lưu trữ tên là ceph-vm-pool với cơ chế 3 bản sao:

pveceph pool create ceph-vm-pool --size 3 --min_size 2 --add_storages 1

Cờ --add_storages 1 sẽ tự động thêm pool này vào file cấu hình /etc/pve/storage.cfg. Khi tạo VM mới, trong mục Hard Disk, bạn chỉ cần chọn storage ceph-vm-pool. Dữ liệu đĩa ảo của VM từ đây sẽ được tự động phân mảnh và rải đều trên cả 3 host vật lý.

Bước 7: Kịch bản giả lập sự cố thực tế

Thử nghiệm tính năng tự phục hồi bằng một bài test thực tế: Bật một VM Linux trên Node 1 và chạy lệnh benchmark ghi liên tục:

fio --name=test --ioengine=libaio --rw=randwrite --bs=4k --size=2G --numjobs=1 --iodepth=16 --runtime=60 --time_based

Trong lúc VM đang ghi dữ liệu với tốc độ khoảng 180MB/s, hãy rút thẳng phích cắm nguồn của Node 3. Sau đó quay lại Node 1 kiểm tra:

ceph status

Terminal sẽ báo trạng thái cảnh báo vàng:

  cluster:
    id:     a7b28c31-7e89-4d22-b91c-123456789abc
    health: HEALTH_WARN
            1/3 mons down, quorum pve-01,pve-02
            1 host down
            1/3 osds down

  services:
    mon: 3 daemons, 2 in quorum (pve-01, pve-02)
    mgr: pve-01(active), standbys: pve-02
    osd: 3 osds: 2 up, 2 in

Lệnh fio bên trong máy ảo vẫn chạy mà không xuất hiện lỗi I/O error. Độ trễ có nhích nhẹ từ 1.2ms lên 2.5ms trong 3 giây đầu rồi ổn định trở lại.

Nếu Node 3 ngoại tuyến quá 10 phút (tham số mon_osd_down_out_interval mặc định là 600 giây), Ceph sẽ tự động đánh dấu OSD của node đó là out. Khi cụm có thêm các ổ đĩa dự phòng khác, Ceph sẽ ngay lập tức sao chép các placement group thiếu hụt sang ổ mới để tái lập đủ 3 bản sao an toàn.

Lời kết

Ceph trên Proxmox VE là lời giải trọn vẹn cho bài toán lưu trữ phân tán hiệu năng cao mà không làm phình ngân sách cho các giải pháp SAN cồng kềnh. Trước khi bắt tay triển khai vào môi trường production, hãy ghi nhớ 3 nguyên tắc sống còn:

  1. Giữ số lượng node luôn là số lẻ (tối thiểu 3 node) nhằm duy trì biểu quyết Quorum.
  2. Đầu tư hạ tầng mạng riêng 10Gbps với cáp DAC hoặc quang để triệt tiêu độ trễ đồng bộ.
  3. Dùng SSD/NVMe Enterprise có tính năng PLP nhằm bảo toàn tốc độ sync write cho cơ chế BlueStore.

Đáp ứng chuẩn ba tiêu chí này, bạn sẽ có một cụm ảo hóa chuẩn doanh nghiệp: vận hành bền bỉ, dễ mở rộng dung lượng và tự vượt qua sự cố phần cứng mà không cần bạn phải thức giấc giữa đêm.

Share: