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ư mount
, df
, 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ư mount
, df
, 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ó.