Saturday, January 18, 2025

[Ceph] – Phần 3: Sử dụng Block Device

-

1. Tổng quan.

Ceph Block Device (RBD) là một phần của hệ thống lưu trữ phân tán Ceph, cho phép nó hoạt động như một block device, giống như một ổ đĩa cứng vật lý.

RBD hỗ trợ việc chia nhỏ dữ liệu thành các block và phân phối chúng đều qua tất cả các OSD (Object Storage Daemons) trong cụm Ceph. Điều này giúp tăng hiệu suất và độ tin cậy, vì dữ liệu được lưu trữ trên nhiều OSD thay vì một ổ đĩa cứng duy nhất.

RBD cũng hỗ trợ snapshot và clone, cho phép bạn tạo bản sao của dữ liệu tại một thời điểm cụ thể và tạo các block device mới từ các snapshot đó.

RBDs có thể được ánh xạ vào hệ thống tệp cục bộ của bạn như một ổ đĩa cứng thông thường, và bạn có thể tương tác với chúng bằng các lệnh chuẩn như mountdf, v.v.

2. Sơ đồ LAB.

Cấu hình Ceph Client [ceph-client.hoanghd.com] để sử dụng Ceph Storage như sau.

                                                  |
    +-------------------------+                   |
    |[ceph-client.hoanghd.com]|192.168.13.234     |
    |     Ceph Client         +-------------------+
    |                         |                   |
    +-------------------------+                   |
                                                  |
               +----------------------------------+-----------------------------------+
               |public: 192.168.13.231            |public: 192.168.13.232             |public: 192.168.13.233
               |cluster: 172.16.13.231            |cluster: 1172.16.13.232            |cluster: 172.16.13.233
+--------------+--------------+    +--------------+--------------+     +--------------+--------------+ 
|   [ceph-node1.hoanghd.com]  |    |   [ceph-node2.hoanghd.com]  |     |   [ceph-node3.hoanghd.com]  | 
|        Object Storage       +----|        Object Storage       +-----|        Object Storage       |
|        Monitor Daemon       |    |                             |     |                             |
|        Manager Daemon       |    |                             |     |                             |
+-----------------------------+    +-----------------------------+     +-----------------------------+

3. Tạo block device.

Ví dụ sau đây sẽ tạo một Block Device và mount nó trên Admin Node (ví dụ là ceph-node1.hoanghd.com).

Bước 1 – Cấu hình môi trường cho Ceph Client.

Để tiện thì mình sẽ chuyển khóa chung SSH sang cho Ceph Client và cấu hình nó từ Admin Node.

Hãy thêm nội dung mới vào file cấu hình SSH trong ~/.ssh/config để khai báo thông tin kết nối đến Ceph Client.

cat >> ~/.ssh/config << 'OEF'
Host ceph-client
    Hostname ceph-client.hoanghd.com
    User root
OEF

Bạn có thể xác minh lại nội dung file ~/.ssh/config sau khi thêm nội dung mới.

shell> cat ~/.ssh/config
Host ceph-node1
    Hostname ceph-node1.hoanghd.com
    User root
Host ceph-node2
    Hostname ceph-node2.hoanghd.com
    User root
Host ceph-node3
    Hostname ceph-node3.hoanghd.com
    User root
Host ceph-client
    Hostname ceph-client.hoanghd.com
    User root

Do mình thêm bằng shell làm quyền của file có thể bị thay đổi nên mình sẽ cấp lại quyền truy cập cho file cấu hình SSH để chỉ có người dùng hiện tại mới có thể đọc và ghi vào file.

chmod 600 ~/.ssh/config

Mình cũng trỏ file hosts về thông tin domain của Ceph Client cho Admin Node.

cat >> /etc/hosts << 'OEF'
192.168.13.234 ceph-client.hoanghd.com ceph-client
OEF

Xác minh lại thêm thông tin file hosts thành công.

shell> cat /etc/hosts
# Your system has configured 'manage_etc_hosts' as True.
# As a result, if you wish for changes to this file to persist
# then you will need to either
# a.) make changes to the master file in /etc/cloud/templates/hosts.debian.tmpl
# b.) change or remove the value of 'manage_etc_hosts' in
#     /etc/cloud/cloud.cfg or cloud-config from user-data
#
127.0.1.1 ceph-node1-13.231 ceph-node1-13
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

172.16.13.231 ceph-node1.hoanghd.com ceph-node1
172.16.13.232 ceph-node2.hoanghd.com ceph-node2
172.16.13.233 ceph-node3.hoanghd.com ceph-node3
192.168.13.234 ceph-client.hoanghd.com ceph-client

Giờ mình sẽ copy thông tin sshkey sang cho Ceph Client theo thông tin domain mình đã khai báo.

shell> ssh-copy-id -o StrictHostKeychecking=no ceph-client.hoanghd.com
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@ceph-client.hoanghd.com's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -o 'StrictHostKeychecking=no' 'ceph-client.hoanghd.com'"
and check to make sure that only the key(s) you wanted were added.

Cài đặt Ceph Common cho Ceph Client.

ssh ceph-client.hoanghd.com "apt -y install ceph-common"

Copy file ceph.conf từ Admin Node sang Ceph Client.

scp /etc/ceph/ceph.conf ceph-client.hoanghd.com:/etc/ceph/

Copy ceph.client.admin.keyring từ Admin Node sang Ceph Client.

scp /etc/ceph/ceph.client.admin.keyring ceph-client.hoanghd.com:/etc/ceph/

Phân quyền thư mục /etc/ceph/ cho Ceph Client.

ssh ceph-client.hoanghd.com "chown ceph. /etc/ceph/ceph.*"

Bước 2 – Tạo một Block Device và mount nó vào Ceph Client.

Tạo RBD pool [rbd].

Lệnh ceph osd pool create rbd 128 được sử dụng để tạo một pool mới trong Ceph với tên là rbd và số lượng Placement Groups (PGs) là 128.

Trong Ceph, một pool là một tập hợp các đối tượng dữ liệu. Mỗi pool chứa một số lượng PGs, mà dữ liệu được chia nhỏ và phân phối đều qua tất cả các OSD (Object Storage Daemons) trong cụm.

rbd trong lệnh này là tên của pool bạn muốn tạo, và 128 là số lượng PGs bạn muốn gán cho pool. Số lượng PGs cần phải được cân nhắc cẩn thận để tối ưu hóa hiệu suất và sử dụng lưu trữ.

shell> ssh ceph-client.hoanghd.com "ceph osd pool create rbd 128"
pool 'rbd' created

Lệnh ceph osd pool set rbd pg_autoscale_mode on được sử dụng để bật chế độ tự động mở rộng PG (Placement Groups) cho pool rbd.

Trong Ceph, dữ liệu được chia thành các PG và được phân phối đều qua tất cả các OSD (Object Storage Daemons). Số lượng PG cần phải được cân nhắc cẩn thận để tối ưu hóa hiệu suất và sử dụng lưu trữ.

Chế độ pg_autoscale_mode cho phép Ceph tự động điều chỉnh số lượng PG dựa trên việc sử dụng lưu trữ thực tế. Khi bạn đặt pg_autoscale_mode thành on cho một pool, Ceph sẽ tự động tăng hoặc giảm số lượng PG cho pool đó dựa trên nhu cầu.

shell> ssh ceph-client.hoanghd.com "ceph osd pool set rbd pg_autoscale_mode on"
set pool 2 pg_autoscale_mode to on

Lệnh rbd pool init rbd được sử dụng để khởi tạo pool rbd cho việc sử dụng với RBD (RADOS Block Device).

RBD là một phần của Ceph, cho phép Ceph hoạt động như một block device, giống như một ổ đĩa cứng vật lý.

Khi bạn tạo một pool mới trong Ceph, bạn cần khởi tạo nó trước khi sử dụng với RBD. Lệnh rbd pool init thực hiện việc này, tạo ra các cấu trúc dữ liệu cần thiết trong pool để lưu trữ các block device.

Trong trường hợp này, rbd là tên của pool bạn muốn khởi tạo.

ssh ceph-client.hoanghd.com "rbd pool init rbd"

Lệnh ceph osd pool autoscale-status được sử dụng để xem trạng thái tự động mở rộng của các pool trong cụm Ceph.

Ceph có khả năng tự động điều chỉnh số lượng PG (Placement Groups) cho mỗi pool dựa trên việc sử dụng lưu trữ thực tế, giúp tối ưu hóa hiệu suất và sử dụng lưu trữ.

Khi bạn chạy lệnh này, nó sẽ hiển thị danh sách các pool, trạng thái tự động mở rộng hiện tại của chúng (ON hoặc OFF), số lượng PG hiện tại và số lượng PG mà Ceph đề xuất dựa trên việc sử dụng lưu trữ.

shell> ssh ceph-client.hoanghd.com "ceph osd pool autoscale-status"
POOL                     SIZE  TARGET SIZE  RATE  RAW CAPACITY   RATIO  TARGET RATIO  EFFECTIVE RATIO  BIAS  PG_NUM  NEW PG_NUM  AUTOSCALE  
device_health_metrics      0                 3.0        899.9G  0.0000                                  1.0       1              on         
rbd                       19                 3.0        899.9G  0.0000                                  1.0      32              on

Tạo một block device với dung lượng 10G.

ssh ceph-client.hoanghd.com "rbd create --size 10G --pool rbd rbd01"

Xác minh lại kết quả sau khi tạo block device.

shell> ssh ceph-client.hoanghd.com "rbd ls -l"
NAME   SIZE    PARENT  FMT  PROT  LOCK
rbd01  10 GiB            2

Lệnh rbd map rbd01 được sử dụng để ánh xạ một block device RBD (RADOS Block Device) tên là rbd01 vào hệ thống tệp cục bộ của bạn.

RBD là một phần của Ceph, cho phép Ceph hoạt động như một block device, giống như một ổ đĩa cứng vật lý. Khi bạn ánh xạ một RBD vào hệ thống của bạn, nó xuất hiện như một ổ đĩa cứng thông thường, và bạn có thể tương tác với nó bằng các lệnh chuẩn như mountdf, v.v.

Trong trường hợp này, rbd01 là tên của RBD bạn muốn ánh xạ.

shell> ssh ceph-client.hoanghd.com "rbd map rbd01"
/dev/rbd0

Lệnh rbd showmapped được sử dụng để hiển thị tất cả các block device RBD (RADOS Block Device) đã được ánh xạ vào hệ thống tệp cục bộ của bạn.

Khi bạn chạy lệnh này, nó sẽ hiển thị danh sách các RBD đã được ánh xạ, cùng với thông tin về ID ánh xạ, tên pool, tên RBD và thiết bị ánh xạ tương ứng trên hệ thống của bạn.

Điều này rất hữu ích khi bạn muốn xem thông tin về các RBD đã được ánh xạ, hoặc khi bạn muốn tìm thiết bị tương ứng trên hệ thống của bạn cho một RBD cụ thể.

shell> ssh ceph-client.hoanghd.com "rbd showmapped"
id  pool  namespace  image  snap  device   
0   rbd              rbd01  -     /dev/rbd0

Lúc này nếu bạn dùng lệnh lsblk để liệt kê danh sách các ổ đĩa trên Ceph Client bạn sẽ thấy kết quả có 1 block device với tên rbd0 có dung lượng 10G đã xuất hiện

shell> ssh ceph-client.hoanghd.com "lsblk"
NAME    MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0     7:0    0 63.5M  1 loop /snap/core20/2015
loop1     7:1    0 91.9M  1 loop /snap/lxd/24061
loop2     7:2    0 40.9M  1 loop /snap/snapd/20290
sda       8:0    0   50G  0 disk 
├─sda1    8:1    0 49.9G  0 part /
├─sda14   8:14   0    4M  0 part 
└─sda15   8:15   0  106M  0 part /boot/efi
sr0      11:0    1    4M  0 rom  
rbd0    252:0    0   10G  0 disk

Lệnh mkfs.xfs /dev/rbd0 được sử dụng để tạo một hệ thống tệp XFS trên thiết bị /dev/rbd0.

Trong trường hợp này, /dev/rbd0 là một block device RBD (RADOS Block Device) đã được ánh xạ vào hệ thống tệp cục bộ của bạn.

XFS là một hệ thống tệp có khả năng mở rộng cao, được thiết kế để xử lý lượng dữ liệu lớn và là một lựa chọn tốt cho Ceph.

Khi bạn chạy lệnh này, nó sẽ tạo một hệ thống tệp XFS mới trên rbd0, làm cho nó sẵn sàng để lưu trữ dữ liệu.

shell> ssh ceph-client.hoanghd.com "mkfs.xfs /dev/rbd0"
meta-data=/dev/rbd0              isize=512    agcount=16, agsize=163840 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=2621440, imaxpct=25
         =                       sunit=16     swidth=16 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=16 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

Sau khi định dạng xong bạn hãy mount rbd0 vào thư mục nào đó để sử dụng nhé.

ssh ceph-client.hoanghd.com "mount /dev/rbd0 /mnt"

Và đây là kết quả của df -h sau khi mount.

shell> ssh ceph-client.hoanghd.com "df -h"
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           795M  1.1M  794M   1% /run
/dev/sda1        49G  2.1G   47G   5% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/loop1       92M   92M     0 100% /snap/lxd/24061
/dev/loop0       64M   64M     0 100% /snap/core20/2015
/dev/loop2       41M   41M     0 100% /snap/snapd/20290
/dev/sda15      105M  6.1M   99M   6% /boot/efi
tmpfs           795M     0  795M   0% /run/user/0
/dev/rbd0        10G  105M  9.9G   2% /mnt

4. Xóa block device.

Để xóa block device hoặc pools bạn đã tạo, thực hiện theo quy trình sau:

Bước 1 – Hãy list các block device hiện có của bạn và chọn block device bạn muốn xóa.

Mình sẽ remote vào ceph-client và chạy lệnh ls /dev/rbd/rbd/ để list các block device hiện có.

shell> ssh root@ceph-client
shell> ls /dev/rbd/rbd/
rbd01

Bước 2 – Hủy ánh xạ RADOS Block Device.

Lệnh rbd unmapđược sử dụng để hủy ánh xạ một block device RBD (RADOS Block Device) từ hệ thống tệp cục bộ của bạn.

Trong trường hợp này, /dev/rbd/rbd/rbd01 là thiết bị RBD đã được ánh xạ vào hệ thống của bạn. Khi bạn chạy lệnh này, nó sẽ hủy ánh xạ của thiết bị RBD, làm cho nó không còn xuất hiện như một ổ đĩa cứng trên hệ thống của bạn.

Điều này rất hữu ích khi bạn đã hoàn tất việc sử dụng RBD và muốn giải phóng tài nguyên hệ thống.

rbd unmap /dev/rbd/rbd/rbd01

Nếu bạn unmap gặp lỗi dưới thì hãy theo dõi cách xử lý ở bước tiếp theo.

shell> rbd unmap /dev/rbd/rbd/rbd01
rbd: sysfs write failed
rbd: unmap failed: (16) Device or resource busy

Lỗi này xảy ra khi thiết bị bạn đang cố gắng hủy ánh xạ vẫn đang được sử dụng bởi một quá trình nào đó trên hệ thống của bạn. Đây là cách bạn có thể giải quyết vấn đề này:

Hãy đảm bảo rằng không có quá trình nào đang sử dụng thiết bị. Bạn có thể sử dụng lệnh lsof hoặc fuser để kiểm tra điều này. Ví dụ:

lsof /dev/rbd/rbd/rbd01
fuser -m /dev/rbd/rbd/rbd01

Nếu thiết bị đang được mount, bạn cần phải hủy mount nó trước khi hủy ánh xạ. Bạn có thể sử dụng lệnh umount để làm điều này:

umount /dev/rbd/rbd/rbd01

Sau khi đã đảm bảo rằng không có quá trình nào sử dụng thiết bị, bạn có thể thử hủy ánh xạ lại bằng lệnh rbd unmap /dev/rbd/rbd/rbd01 (nếu unmap thành công thì bạn sẽ không nhận được kết quả đầu ra của lệnh).

Sau khi unmap thành công, bạn có thể sử dụng lệnh rbd showmapped để kiểm tra, nếu kết quả không thấy block device có tên /dev/rbd0 xuất hiện, tức là bạn đã unmap thành công.

Bước 3 – Xóa một block device RBD.

Lệnh rbd rm rbd01 -p rbd được sử dụng để xóa một block device RBD (RADOS Block Device) tên là rbd01 từ pool rbd.

Trong Ceph, một pool là một tập hợp các đối tượng dữ liệu. Mỗi pool chứa một số lượng RBDs, mà dữ liệu được chia nhỏ và phân phối đều qua tất cả các OSD (Object Storage Daemons) trong cụm.

rbd01 trong lệnh này là tên của RBD bạn muốn xóa, và -p rbd chỉ định rằng RBD này nằm trong pool rbd.

Khi bạn chạy lệnh này, nó sẽ xóa rbd01 khỏi pool rbd, giải phóng không gian lưu trữ đã được sử dụng bởi RBD này.

shell> rbd rm rbd01 -p rbd
Removing image: 100% complete...done.

Bước 4 – Xóa Pool (tùy chọn).

Lệnh ceph osd pool delete rbd rbd --yes-i-really-really-mean-it được sử dụng để xóa một pool trong Ceph có tên là rbd.

Trong Ceph, một pool là một tập hợp các đối tượng dữ liệu. Mỗi pool chứa một số lượng Placement Groups (PGs) mà dữ liệu được chia nhỏ và phân phối đều qua tất cả các OSD (Object Storage Daemons) trong cụm.

rbd trong lệnh này là tên của pool bạn muốn xóa.

Tuy nhiên, xóa một pool là một hành động không thể hoàn tác và có thể dẫn đến mất dữ liệu. Do đó, Ceph yêu cầu bạn xác nhận rằng bạn thực sự muốn xóa pool bằng cách thêm --yes-i-really-really-mean-it vào cuối lệnh.

shell> ceph osd pool delete rbd rbd --yes-i-really-really-mean-it
pool 'rbd' removed

Khi bạn chạy lệnh này, nó sẽ xóa pool rbd và tất cả dữ liệu bên trong nó.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories