Saturday, January 18, 2025

Triển khai dịch vụ Metadata cho Ceph

-

1. Tổng quan.

Cephadm và các công cụ quản lý Ceph khác được khuyến nghị mạnh mẽ cho việc thiết lập cụm Ceph. Sử dụng phương pháp này chỉ khi bạn thiết lập cụm Ceph bằng tay. Nếu bạn vẫn muốn sử dụng cách thủ công để triển khai các dịch vụ MDS, bạn có thể sử dụng MDS Service.

MDS Service là một phương pháp để triển khai và quản lý các dịch vụ Metadata Server (MDS) trong cụm Ceph. Nó cho phép bạn tạo các MDS daemon và cấu hình chúng trong cụm Ceph.

Tuy nhiên, việc sử dụng Cephadm hoặc công cụ quản lý Ceph khác giúp đơn giản hóa quá trình triển khai và quản lý Ceph. Chúng cung cấp các tính năng tự động hóa và quản lý tập trung, giúp bạn tiết kiệm thời gian và công sức trong việc cấu hình và duy trì cụm Ceph.

Nếu bạn quyết định sử dụng MDS Service để triển khai MDS daemon, hãy làm theo hướng dẫn chi tiết trong tài liệu Ceph để tạo và cấu hình MDS daemon cho cụm Ceph của bạn.

Nếu bạn không có Metadata thì khi bạn tạo các dịch vụ cần sử dụng Metadata như CephFS chẳng hạn, bạn sẽ gặp thông báo lỗi như sau:

$ ceph -s
  cluster:
    id:     1d447334-e065-4745-b494-99bc76c7dff8
    health: HEALTH_ERR
            1 filesystem is degraded
            1 filesystem has a failed mds daemon
            1 filesystem is offline
 
  services:
    mon: 3 daemons, quorum pve-node2,pve-node1,pve-node3 (age 4d)
    mgr: pve-node2(active, since 8d), standbys: pve-node3, pve-node1
    mds: 0/1 daemons up (1 failed)
    osd: 17 osds: 17 up (since 4d), 17 in (since 12d)
 
  data:
    volumes: 0/1 healthy, 1 failed
    pools:   5 pools, 129 pgs
    objects: 25.30k objects, 91 GiB
    usage:   277 GiB used, 15 TiB / 15 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   0 B/s rd, 178 KiB/s wr, 0 op/s rd, 13 op/s wr

Hoặc nếu bạn sử dụng Ceph trên Proxmox bạn cũng nhận thông báo tương tự trên Web GUI.

2. Công cụ triển tại dịch vụ Metadata.

Triển khai các Metadata Server (MDS) là bước cần thiết để tạo ra hệ thống tệp CephFS. Nhà điều hành cụm thường sử dụng công cụ triển khai tự động để khởi chạy các MDS server cần thiết. Rook và ansible (qua các playbook ceph-ansible) là các công cụ được khuyến nghị để thực hiện việc này. Để rõ ràng, chúng tôi cũng hiển thị các lệnh systemd ở đây, có thể được thực thi trực tiếp trên hệ thống nếu chạy trên bare-metal.

Để triển khai Metadata Server, bạn có thể sử dụng một trong hai công cụ sau đây: Rook hoặc ansible thông qua playbook ceph-ansible.

  • Sử dụng Rook: Rook là một công cụ quản lý Ceph được tích hợp với Kubernetes. Bạn có thể sử dụng Rook để triển khai các MDS server trong môi trường Kubernetes. Rook cung cấp các tài nguyên và cấu hình để tự động triển khai và quản lý MDS server.
  • Sử dụng ansible với playbook ceph-ansible: ansible là một công cụ quản lý cấu hình và triển khai hệ thống. Playbook ceph-ansible là một bộ công cụ ansible được cung cấp sẵn để triển khai Ceph trên các máy chủ bare-metal. Bạn có thể sử dụng playbook ceph-ansible để triển khai các MDS server và cấu hình chúng.

Bạn cần tham khảo tài liệu cụ thể của Rook hoặc playbook ceph-ansible để biết thêm chi tiết và hướng dẫn cụ thể về cách triển khai MDS server cho cụm Ceph của bạn.

3. Phần cứng cho Metadata.


Phiên bản hiện tại của MDS chỉ hỗ trợ đơn luồng và tốn nhiều CPU cho hầu hết các hoạt động, bao gồm phản hồi yêu cầu từ client. Một MDS trong tải khách hàng cực đoan sử dụng khoảng 2 đến 3 lõi CPU. Điều này liên quan đến các luồng bảo trì khác đang hoạt động cùng nhau.

Tuy nhiên, được khuyến nghị rằng một MDS server nên được cung cấp với một CPU tiên tiến có đủ lõi. Hiện tại, đang tiến hành phát triển để tận dụng tốt hơn các lõi CPU có sẵn trong MDS. Dự kiến trong các phiên bản Ceph tương lai, MDS server sẽ cải thiện hiệu suất bằng cách tận dụng nhiều lõi hơn.

Thành phần khác ảnh hưởng đến hiệu suất của MDS là RAM có sẵn để làm bộ nhớ cache. MDS quản lý một bộ nhớ cache phân tán và hợp tác giữa tất cả các client và MDS hoạt động. Do đó, cung cấp đủ RAM cho MDS là rất quan trọng để tăng tốc truy cập và thay đổi metadata. Kích thước cache MDS mặc định (xem cấu hình cache MDS) là 4GB. Được khuyến nghị cung cấp ít nhất 8GB RAM cho MDS để hỗ trợ kích thước cache này.

Thường thì một MDS phục vụ một cụm lớn khách hàng (1000 hoặc nhiều hơn) sẽ sử dụng ít nhất 64GB cache. Hiện chưa có nghiên cứu nhiều về MDS với cache lớn nhất trong các cụm cộng đồng đã biết; có thể có hiệu suất giảm dần khi quản lý cache lớn như vậy ảnh hưởng tiêu cực đến hiệu suất một cách không ngờ. Tốt nhất là phân tích với công việc dự kiến để xác định xem cung cấp nhiều RAM hơn có đáng giá không.

Trong một cụm bare-metal, thực hành tốt nhất là quá cấp phần cứng cho MDS server. Ngay cả khi một MDS duy nhất không thể tận dụng hoàn toàn phần cứng, có thể mong muốn sau này khởi động nhiều MDS daemon hoạt động trên cùng một nút để tận dụng đầy đủ lõi và bộ nhớ có sẵn. Ngoài ra, có thể rõ ràng với công việc trên cụm rằng hiệu suất cải thiện với nhiều MDS hoạt động trên cùng một nút hơn là quá cấp phần cứng cho một MDS duy nhất.

Cuối cùng, hãy nhớ rằng CephFS là một hệ thống tệp có khả năng cao với sự hỗ trợ của MDS standby (xem Thành ngữ) để chuyển đổi nhanh. Để có lợi ích thực sự từ việc triển khai MDS standby, thường cần phân phối MDS daemon trên ít nhất hai nút trong cụm. Nếu không, sự cố phần cứng trên một nút đơn có thể làm cho hệ thống tệp trở nên không khả dụng.

Việc đặt MDS cùng với các daemon Ceph khác (hyperconverged) là một cách hiệu quả và được khuyến nghị để đạt được điều này, miễn là tất cả các daemon được cấu hình để sử dụng phần cứng có sẵn trong một số giới hạn nhất định. Đối với MDS, điều này thường có nghĩa là giới hạn kích thước cache của nó.

4. Tạo một Metadata.

Để thêm một MDS (Metadata Server) vào cụm Ceph, bạn cần thực hiện các bước sau:

Tạo thư mục mds trong đường dẫn /var/lib/ceph/mds/ceph-${id}. Thư mục này chỉ được sử dụng để lưu trữ keyring của MDS.

Tạo thư mục cho mds với id của bạn (ví dụ: mds1) bằng lệnh sudo mkdir -p /var/lib/ceph/mds/ceph-${id}:

sudo mkdir -p /var/lib/ceph/mds/ceph-mds1

Tạo khóa xác thực cho MDS bằng lệnh sudo ceph auth get-or-create mds.${id} mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-${id}/keyring (nếu bạn sử dụng CephX):

sudo ceph auth get-or-create mds.mds1 mon 'profile mds' mgr 'profile mds' mds 'allow *' osd 'allow *' > /var/lib/ceph/mds/ceph-mds1/keyring

Lệnh trên sẽ tạo một khóa xác thực và lưu vào file keyring của MDS.

Xác nhận đã tạo thành công keyring.

$ tree /var/lib/ceph/mds/ceph-mds1
/var/lib/ceph/mds/ceph-mds1
└── keyring

0 directories, 1 file

Nội dung keyring.

$ cat /var/lib/ceph/mds/ceph-mds1/keyring 
[mds.mds1]
        key = AQBMRYFkBws+MRAAMC22sAAVC+Mou3mzURFwAA==

Khởi động dịch vụ MDS bằng lệnh sudo systemctl start ceph-mds@${id} và bật chế độ tự khởi động theo OS bằng lệnh sudo systemctl enable ceph-mds@${id}.

sudo systemctl start ceph-mds@mds1
sudo systemctl enable ceph-mds@mds1

Xác nhận dịch vụ Metadata đã bật thành công bằng lệnh sudo systemctl status ceph-mds@mds1.

$ sudo systemctl status ceph-mds@mds1
● ceph-mds@mds1.service - Ceph metadata server daemon
     Loaded: loaded (/lib/systemd/system/ceph-mds@.service; disabled; vendor preset: enabled)
    Drop-In: /usr/lib/systemd/system/ceph-mds@.service.d
             └─ceph-after-pve-cluster.conf
     Active: active (running) since Thu 2023-06-08 10:05:30 +07; 5s ago
   Main PID: 3343911 (ceph-mds)
      Tasks: 26
     Memory: 11.9M
        CPU: 89ms
     CGroup: /system.slice/system-ceph\x2dmds.slice/ceph-mds@mds1.service
             └─3343911 /usr/bin/ceph-mds -f --cluster ceph --id mds1 --setuser ceph --setgroup ceph

Jun 08 10:05:30 pve-node1 systemd[1]: Started Ceph metadata server daemon.
Jun 08 10:05:30 pve-node1 ceph-mds[3343911]: starting mds.mds1 at

Dịch vụ MDS sẽ được khởi động và bắt đầu hoạt động. Tiếp theo kiểm tra trạng thái của cụm Ceph bằng lệnh sau:

$ ceph -s
  cluster:
    id:     1d447334-e065-4745-b494-99bc76c7dff8
    health: HEALTH_OK
 
  services:
    mon: 3 daemons, quorum pve-node2,pve-node1,pve-node3 (age 4d)
    mgr: pve-node2(active, since 8d), standbys: pve-node3, pve-node1
    mds: 1/1 daemons up
    osd: 17 osds: 17 up (since 4d), 17 in (since 12d)
 
  data:
    volumes: 1/1 healthy
    pools:   5 pools, 129 pgs
    objects: 25.31k objects, 91 GiB
    usage:   277 GiB used, 15 TiB / 15 TiB avail
    pgs:     129 active+clean
 
  io:
    client:   136 KiB/s wr, 0 op/s rd, 8 op/s wr

Hoặc nếu bạn sử dụng Ceph Proxmox thì có thể xem trên Web GUI.

Do mình đang tạo MDS trên Node 01 của Proxmox nên mình có thể vào theo quy trình như hình dưới để xem MDS đã xuất hiện trên Web GUI.

Ví dụ tạo một Metadata trên Proxmox.

Chọn một Node sẽ khởi tạo MDS.

Lúc nãy tôi tạo MDS trên Node 1 với tên ${id} là mds1 rồi nên giờ tôi sẽ tạo trên Node 2 với tên ${id} là mds2 và tôi bấm Create.

Kết quả.

5. Huỷ một Metadata.

Để xóa một metadata server (MDS) khỏi cụm của bạn, bạn có thể sử dụng phương pháp sau đây:

(Tùy chọn:) Tạo một MDS mới để thay thế. Nếu không có MDS thay thế để tiếp quản khi MDS bị xóa, hệ thống tệp sẽ trở nên không khả dụng đối với khách hàng. Nếu không mong muốn điều đó xảy ra, hãy xem xét thêm một metadata server trước khi tắt metadata server bạn muốn ngừng hoạt động.

Dừng MDS mà bạn muốn xóa bằng lệnh sudo systemctl stop ceph-mds@${id}và huỷ tự khởi động theo OS bằng lệnh sudo systemctl disable ceph-mds@${id}.

sudo systemctl stop ceph-mds@mds1
sudo systemctl disable ceph-mds@mds1

MDS sẽ tự động thông báo cho các monitor Ceph rằng nó đang tắt. Điều này cho phép các monitor thực hiện chuyển giao tức thì sang một standby khả dụng, nếu có. Không cần sử dụng các lệnh quản trị để thực hiện chuyển giao này, ví dụ như sử dụng lệnh ceph mds fail mds.${id}.

Xóa thư mục /var/lib/ceph/mds/ceph-${id} trên MDS.

sudo rm -rf /var/lib/ceph/mds/ceph-mds1

Đối với Proxmox hãy chọn MDS cần xoá, bấm Stop và MDS sẽ tự động thông báo cho các monitor Ceph rằng nó đang tắt. Điều này cho phép các monitor thực hiện chuyển giao tức thì sang một standby khả dụng, nếu có.

Lúc này trạng thái MDS sẽ là Stopped, hãy bấm Destroy (1) -> Yes (2) để xoá MDS này.

6. Liệt kê các Metadata hiện có trong Ceph.

Để liệt kê các metadata server (MDS) hiện có trong cụm Ceph, bạn có thể sử dụng lệnh ceph mds metadata.

$ ceph mds metadata
[
    {
        "name": "mds1",
        "addr": "[v2:192.168.13.225:6820/2274669702,v1:192.168.13.225:6821/2274669702]",
        "arch": "x86_64",
        "ceph_release": "pacific",
        "ceph_version": "ceph version 16.2.13 (b81a1d7f978c8d41cf452da7af14e190542d2ee2) pacific (stable)",
        "ceph_version_short": "16.2.13",
        "cpu": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz",
        "distro": "debian",
        "distro_description": "Debian GNU/Linux 11 (bullseye)",
        "distro_version": "11",
        "hostname": "pve-node1",
        "kernel_description": "#1 SMP PVE 5.15.102-1 (2023-03-14T13:48Z)",
        "kernel_version": "5.15.102-1-pve",
        "mem_swap_kb": "8388604",
        "mem_total_kb": "263999984",
        "os": "Linux"
    },
    {
        "name": "mds2",
        "addr": "[v2:192.168.13.225:6822/2954341086,v1:192.168.13.225:6823/2954341086]",
        "arch": "x86_64",
        "ceph_release": "pacific",
        "ceph_version": "ceph version 16.2.13 (b81a1d7f978c8d41cf452da7af14e190542d2ee2) pacific (stable)",
        "ceph_version_short": "16.2.13",
        "cpu": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz",
        "distro": "debian",
        "distro_description": "Debian GNU/Linux 11 (bullseye)",
        "distro_version": "11",
        "hostname": "pve-node1",
        "kernel_description": "#1 SMP PVE 5.15.102-1 (2023-03-14T13:48Z)",
        "kernel_version": "5.15.102-1-pve",
        "mem_swap_kb": "8388604",
        "mem_total_kb": "263999984",
        "os": "Linux"
    },
    {
        "name": "mds3",
        "addr": "[v2:192.168.13.225:6824/891812418,v1:192.168.13.225:6825/891812418]",
        "arch": "x86_64",
        "ceph_release": "pacific",
        "ceph_version": "ceph version 16.2.13 (b81a1d7f978c8d41cf452da7af14e190542d2ee2) pacific (stable)",
        "ceph_version_short": "16.2.13",
        "cpu": "Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz",
        "distro": "debian",
        "distro_description": "Debian GNU/Linux 11 (bullseye)",
        "distro_version": "11",
        "hostname": "pve-node1",
        "kernel_description": "#1 SMP PVE 5.15.102-1 (2023-03-14T13:48Z)",
        "kernel_version": "5.15.102-1-pve",
        "mem_swap_kb": "8388604",
        "mem_total_kb": "263999984",
        "os": "Linux"
    }
]

Lệnh này sẽ hiển thị danh sách các MDS và thông tin liên quan đến chúng, bao gồm ID, trạng thái, trạng thái xác thực (active hoặc standby), và tên máy chủ nơi MDS đang chạy.

Bạn cần thực hiện lệnh trên một máy chủ trong cụm Ceph và có quyền truy cập vào Ceph CLI (Command Line Interface).

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories