Saturday, January 18, 2025

[Ceph] – Phần 8: CephFS với NFS-Ganesha

-

1. Giới thiệu.

NFS-Ganesha là một máy chủ file server ở chế độ người dùng cho NFS (v3, v4 và v4.1) và 9P từ hệ điều hành Plan 9. Một trong những tính năng đáng chú ý của nó là khả năng giao tiếp với nhiều backend file system, bao gồm Ceph File System (CephFS).

Bài viết này sẽ hướng dẫn bạn qua quá trình cài đặt NFS-Ganesha và cấu hình nó để mount một CephFS với giao thức NFS.

2. Tổng quan về NFS-Ganesha và CephFS.

NFS-Ganesha là một máy chủ file server NFS hoạt động ở chế độ người dùng, điều này cho phép nó có khả năng mở rộng và linh hoạt hơn so với các máy chủ file server NFS truyền thống. Nó hỗ trợ nhiều phiên bản của NFS và cũng có thể giao tiếp với nhiều loại file system khác nhau thông qua các mô-đun FSAL (File System Abstraction Layer).

CephFS là một hệ thống file phân tán, phần của dự án mã nguồn mở Ceph. Nó cung cấp khả năng lưu trữ và chia sẻ file trên nhiều máy chủ với khả năng mở rộng và độ bền cao.

3. Cài đặt và cấu hình NFS-Ganesha.

3.1. Trên Ceph Admin.

Bước 1 – Cài đặt NFS-Ganesha.

Đầu tiên, bạn cần cài đặt NFS-Ganesha và mô-đun FSAL cho Ceph trên máy chủ của bạn. Trên hầu hết các hệ điều hành Linux, bạn có thể làm điều này thông qua trình quản lý gói của hệ thống.

Trên Ceph Admin, để cài đặt NFS-Ganesha bạn hãy chạy lệnh sau:

apt -y install nfs-ganesha-ceph

Bước 2 – Tạo CephFS trước khi sử dụng NFS-Ganesha để mount từ client.

NFS-Ganesha là một file server NFS, nó cung cấp một giao diện để truy cập vào file system, nhưng nó không tạo ra file system đó. Trong trường hợp này, NFS-Ganesha đang cung cấp một giao diện NFS để truy cập vào CephFS.

CephFS là một hệ thống file phân tán và nó cần được tạo và cấu hình trước khi bạn có thể sử dụng nó. Vì vậy, trước khi bạn có thể sử dụng NFS-Ganesha để truy cập vào CephFS qua giao thức NFS, bạn cần phải tạo và cấu hình CephFS.

Xem lại bài https://wiki.hoanghd.com/ceph-phan-4-su-dung-file-system/ để tạo một CephFS.

Bước 3 – Cấu hình NFS-Ganesha.

Mình sẽ tiến hành đổi tên file ganesha.conf để phòng quá trình cấu hình bị lỗi, chúng ta có thể có file gốc để tham khảo.

mv /etc/ganesha/ganesha.conf /etc/ganesha/ganesha.conf.org

Chạy shell dưới để tạo ra file ganesha.conf mới với nội dung sau:

cat > /etc/ganesha/ganesha.conf << 'OEF'
# create new
NFS_CORE_PARAM {
    # disable NLM
    Enable_NLM = false;
    # disable RQUOTA (not suported on CephFS)
    Enable_RQUOTA = false;
    # NFS protocol
    Protocols = 4;
}
EXPORT_DEFAULTS {
    # default access mode
    Access_Type = RW;
}
EXPORT {
    # uniq ID
    Export_Id = 101;
    # mount path of CephFS
    Path = "/";
    FSAL {
        name = CEPH;
        # hostname or IP address of this Node
        hostname="192.168.13.231";
        filesystem = "cephfs_name";
    }
    # setting for root Squash
    Squash="No_root_squash";
    # NFSv4 Pseudo path
    Pseudo="/vfs_ceph";
    # allowed security options
    SecType = "sys";
}
LOG {
    # default log level
    Default_Log_Level = WARN;
}
OEF

File config trên định nghĩa cách NFS-Ganesha sẽ hoạt động và cách nó sẽ giao tiếp với CephFS.

  • NFS_CORE_PARAM: Định nghĩa các tham số cốt lõi cho NFS-Ganesha. Trong trường hợp này, nó tắt NLM (Network Lock Manager, không được hỗ trợ bởi CephFS) và RQUOTA (Remote Quota, cũng không được hỗ trợ bởi CephFS), và chỉ cho phép giao thức NFSv4.
  • EXPORT_DEFAULTS: Định nghĩa các giá trị mặc định cho các export. Trong trường hợp này, mọi người đều có quyền đọc và ghi (Access_Type = RW).
  • EXPORT: Định nghĩa một export cụ thể. Trong trường hợp này, nó xuất toàn bộ CephFS (Path = "/") thông qua FSAL Ceph. Địa chỉ IP của node này là 192.168.13.231. Export này không áp dụng quyền root squash (Squash="No_root_squash"), có nghĩa là người dùng root trên client sẽ có quyền root trên máy chủ. Đường dẫn giả mạo cho NFSv4 là /vfs_ceph và chỉ hỗ trợ loại bảo mật “sys”.
  • LOG: Định nghĩa cấu hình cho việc ghi log. Trong trường hợp này, mức độ log mặc định là WARN, có nghĩa là chỉ các cảnh báo và lỗi sẽ được ghi lại.

Chú ý:

Với cấu hình trên thì tên của CephFS cụ thể không được chỉ định trong đoạn cấu hình này. Để chỉ định một CephFS cụ thể, bạn cần thêm một dòng filesystem = "cephfs" vào phần FSAL của đoạn cấu hình. Ví dụ:

FSAL {
    name = CEPH;
    filesystem = "cephfs_name";
    hostname="192.168.13.231";
}

Lưu ý rằng bạn cần thay “cephfs_name” bằng tên thực tế của CephFS mà bạn muốn kết nối.

Khởi động lại NFS-Ganesha.

systemctl restart nfs-ganesha

Kiểm tra lại trạng thái của NFS-Ganesha.

shell>  systemctl status nfs-ganesha
● nfs-ganesha.service - NFS-Ganesha file server
     Loaded: loaded (/lib/systemd/system/nfs-ganesha.service; enabled; vendor preset: enabled)
     Active: active (running) since Thu 2024-01-25 02:28:10 UTC; 5s ago
       Docs: http://github.com/nfs-ganesha/nfs-ganesha/wiki
    Process: 19393 ExecStart=/bin/bash -c ${NUMACTL} ${NUMAOPTS} /usr/bin/ganesha.nfsd ${OPTIONS} ${EPOCH} (code=exited, status=0/SUCCESS)
   Main PID: 19394 (ganesha.nfsd)
      Tasks: 34 (limit: 9492)
     Memory: 33.6M
     CGroup: /system.slice/nfs-ganesha.service
             └─19394 /usr/bin/ganesha.nfsd -L /var/log/ganesha/ganesha.log -f /etc/ganesha/ganesha.conf -N NIV_EVENT

Jan 25 02:28:10 ceph-node1-13-231 systemd[1]: Starting NFS-Ganesha file server...
Jan 25 02:28:10 ceph-node1-13-231 systemd[1]: Started NFS-Ganesha file server.

3.2. Trên Ceph Client.

Remote vào Ceph Client và cài đặt nfs-common.

ssh root@ceph-client
apt -y install nfs-common

Hãy chắc chắn Ceph Client đã phân giải được và có kết nối đến Ceph Admin nhé.

shell>  ping -c 4 ceph-node1.hoanghd.com
PING ceph-node1.hoanghd.com (192.168.13.231) 56(84) bytes of data.
64 bytes from ceph-node1.hoanghd.com (192.168.13.231): icmp_seq=1 ttl=64 time=0.182 ms
64 bytes from ceph-node1.hoanghd.com (192.168.13.231): icmp_seq=2 ttl=64 time=0.416 ms
64 bytes from ceph-node1.hoanghd.com (192.168.13.231): icmp_seq=3 ttl=64 time=0.506 ms
64 bytes from ceph-node1.hoanghd.com (192.168.13.231): icmp_seq=4 ttl=64 time=0.423 ms

--- ceph-node1.hoanghd.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3077ms
rtt min/avg/max/mdev = 0.182/0.381/0.506/0.120 ms

Trước khi mount, bạn hãy kiểm tra trạng thái của cephfs có tên cephfs và chúng ta đang có 1 clients kết nối vào.

shell> ceph fs status cephfs
cephfs - 1 clients
======
RANK  STATE      MDS         ACTIVITY     DNS    INOS  
 0    active  ceph-node1  Reqs:    0 /s    10     13   
      POOL         TYPE     USED  AVAIL  
cephfs_metadata  metadata  1536k   344G  
  cephfs_data      data       0    344G  
MDS version: ceph version 15.2.17 (8a82819d84cf884bd39c17e3236e0632ac146dc4) octopus (stable)

Hãy chạy lệnh sau để tiến hành mount, nếu bạn mount thành công, bạn sẽ không nhận được kết quả đầu ra trong terminal.

mount -t nfs4 ceph-node1.hoanghd.com:/vfs_ceph /mnt

Nếu bạn không có một CephFS nào, khi mount bạn sẽ bị treo hoặc có thể sẽ sẽ nhận thông báo này.

shell> mount -t nfs4 ceph-node1.hoanghd.com:/vfs_ceph /mnt
mount.nfs4: requested NFS version or transport protocol is not supported

Nếu bạn cố ý truyền sai tên CephFS, bạn sẽ nhận được thông báo lỗi dưới.

shell> mount -t nfs4 ceph-node1.hoanghd.com:/vfs_ceph /mnt
mount.nfs4: mount to NFS server 'ceph-node1.hoanghd.com:/vfs_ceph' failed: RPC Error: Procedure unavailable

Kết quả mount thành công.

shell> df -hT
Filesystem                       Type      Size  Used Avail Use% Mounted on
udev                             devtmpfs  3.9G     0  3.9G   0% /dev
tmpfs                            tmpfs     795M  1.1M  794M   1% /run
/dev/sda1                        ext4       49G  2.2G   47G   5% /
tmpfs                            tmpfs     3.9G     0  3.9G   0% /dev/shm
tmpfs                            tmpfs     5.0M     0  5.0M   0% /run/lock
tmpfs                            tmpfs     3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/loop1                       squashfs   92M   92M     0 100% /snap/lxd/24061
/dev/loop0                       squashfs   64M   64M     0 100% /snap/core20/2015
/dev/loop2                       squashfs   41M   41M     0 100% /snap/snapd/20290
/dev/sda15                       vfat      105M  6.1M   99M   6% /boot/efi
192.168.13.231:6789:/            ceph      345G     0  345G   0% /mnt
/dev/loop3                       squashfs   64M   64M     0 100% /snap/core20/2105
tmpfs                            tmpfs     795M     0  795M   0% /run/user/0
ceph-node1.hoanghd.com:/vfs_ceph nfs4      345G     0  345G   0% /mnt

7. Kết luận.

Bằng cách sử dụng NFS-Ganesha, bạn có thể mount CephFS với giao thức NFS, điều này tạo ra nhiều lợi ích như khả năng tương thích với các hệ thống và ứng dụng hiện có, cũng như khả năng tận dụng các tính năng mạnh mẽ của CephFS. Dù vậy, cần lưu ý rằng việc cài đặt và cấu hình NFS-Ganesha đòi hỏi kiến thức chuyên sâu về cả hai hệ thống và có thể cần thực hiện các bước phức tạp để đảm bảo an toàn và hiệu suất.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories