Friday, July 5, 2024

Ceph OSD trong hệ thống lưu trữ phân tán Ceph

-

1. Tổng quan.

Ceph OSD (Object Storage Daemon) là một thành phần quan trọng trong hệ thống lưu trữ phân tán Ceph. Chức năng chính của OSD là quản lý việc lưu trữ dữ liệu và thực hiện các thao tác I/O (Input/Output) liên quan đến dữ liệu trong hệ thống Ceph.

Dưới đây là một số điểm chính về Ceph OSD:

  • Lưu trữ dữ liệu: OSD chịu trách nhiệm lưu trữ các đối tượng (objects) trong Ceph. Mỗi OSD quản lý một phần của không gian lưu trữ được chia thành các đối tượng nhỏ phân tán từng mảnh nhỏ trong các OSD.
  • Cân bằng tải và đồng nhất dữ liệu: Ceph sử dụng CRUSH (Controlled, Scalable, Decentralized Placement of Replicated Data) để phân phối dữ liệu trên các OSD một cách cân bằng và đồng đều. CRUSH giúp xác định nơi lưu trữ dữ liệu và đảm bảo sự đồng nhất và khả dụng.
  • Tính chịu lỗi: OSD có khả năng chịu lỗi thông qua quá trình nhân bản dữ liệu trên nhiều OSD. Dữ liệu được sao chép và phân tán trên các OSD để đảm bảo tính chịu lỗi trong trường hợp một OSD hoặc một máy chủ gặp sự cố.
  • Đồng bộ hóa và đồng thuận: OSD thường sử dụng các cơ chế đồng bộ và đồng thuận để đảm bảo tính nhất quán của dữ liệu trong hệ thống.
  • Quản lý trạng thái: OSD duy trì thông tin về trạng thái của nó, bao gồm trạng thái hoạt động (up), trạng thái không hoạt động (down), và trạng thái không sẵn sàng (out).
  • Tính mở rộng: Bạn có thể mở rộng dung lượng lưu trữ của hệ thống Ceph bằng cách thêm OSD vào cluster, giúp nâng cao khả năng mở rộng của hệ thống.

2. Quy trình thêm và loại bỏ các ODS vào Ceph.

2.1. Môt số điều đáng lưu ý.

OSDs được sử dụng để lưu trữ dữ liệu trong hệ thống Ceph. Phần này chúng ta sẽ nói về quy trình thêm hoặc loại bỏ OSDs (Object Storage Daemon) trong một cluster Ceph khi nó đang hoạt động.

Khi bạn thêm OSDs thì chính là bạn đang mở rộng khả năng lưu trữ và độ tin cậy của cluster. Mỗi OSD thường là một tiến trình ceph-osd chạy trên một ổ đĩa vật lý. Nếu máy chủ của bạn có nhiều ổ đĩa, bạn có thể ánh xạ một tiến trình ceph-osd cho mỗi ổ đĩa đó.

Nếu cluster của bạn đã gần tới giới hạn, bạn nên thêm OSDs để mở rộng khả năng của cluster.

Không nên thêm OSD sau khi cluster đã đạt đến giới hạn tối đa, nghĩa là không nên thêm nhiều hơn số lượng OSD đã được xác định và quản lý chặt chẽ trong cấu hình tối đa của cluster. Một số lí do chính để hạn chế việc thêm OSD sau khi cluster đã đạt đến giới hạn bao gồm:

  • Kiểm soát hiệu suất: Khi cluster đã đạt đến giới hạn tối đa, việc thêm OSD có thể ảnh hưởng đến hiệu suất tổng thể của hệ thống. Mỗi OSD thêm vào tăng khả năng xử lý, nhưng cũng đồng nghĩa với việc quản lý thêm nhiều metadata và góp phần vào tình trạng chất lượng của dữ liệu.
  • Quản lý tài nguyên: Việc thêm OSD tăng lượng metadata và yêu cầu tài nguyên hệ thống. Khi cluster đã ở trạng thái gần giới hạn, việc quản lý và duy trì thêm OSD có thể tạo ra áp lực lớn về tài nguyên và đòi hỏi sự chú ý kỹ thuật.
  • Khả năng mở rộng có hạn: Một cluster Ceph được thiết kế với một số lượng OSD cụ thể để đảm bảo tính mở rộng và hiệu suất tối đa. Khi bạn đạt đến giới hạn tuyệt đối, việc thêm OSD có thể làm giảm tính mở rộng và khả năng điều chỉnh của hệ thống.

Thay vào đó, khi cluster gần giới hạn, có thể làm thêm OSD thông minh hơn bằng cách tối ưu hóa cấu hình hiện tại, thay thế OSD hiện có bằng các ổ đĩa có dung lượng lớn hơn, hoặc thực hiện các biện pháp tối ưu hóa khác để tận dụng tối đa dung lượng hiện có mà không làm giảm hiệu suất.

2.2. Kiểm tra các OSD hiện có trong cluster.

Đầu tiên bạn nên biết cách list các OSD hiện có trong cluster trước. Để liệt kê toàn bộ OSD (Object Storage Daemon) trong hệ thống Ceph, bạn có thể sử dụng các công cụ ceph command line. Dưới đây là một số lệnh bạn có thể sử dụng:

Sử dụng lệnh ceph osd tree.

$ ceph osd tree
ID  CLASS  WEIGHT    TYPE NAME       STATUS  REWEIGHT  PRI-AFF
-1         40.02673  root default                             
-3         20.01337      host pve1                            
 0    hdd   1.81940          osd.0       up   1.00000  1.00000
 1    hdd   1.81940          osd.1       up   1.00000  1.00000
23    hdd   1.81940          osd.23    down   1.00000  1.00000
24    hdd   1.81940          osd.24      up   1.00000  1.00000
25    hdd   1.81940          osd.25      up   1.00000  1.00000
-5         10.00668      host pve2                            
 4    hdd   0.90970          osd.4     down   1.00000  1.00000
 5    hdd   0.90970          osd.5     down         0  1.00000
 6    hdd   0.90970          osd.6     down         0  1.00000
14    hdd   0.90970          osd.14    down         0  1.00000
-7         10.00668      host pve3                            
 7    hdd   0.90970          osd.7       up   1.00000  1.00000
 9    hdd   0.90970          osd.9       up   1.00000  1.00000
10    hdd   0.90970          osd.10      up   1.00000  1.00000

Lệnh này sẽ hiển thị một biểu đồ cây của toàn bộ cụm OSD trong hệ thống Ceph, bao gồm các thông tin như OSD ID, trạng thái, weight, và vị trí.

Sử dụng lệnh ceph osd ls.

$ ls
0
1
2
3

Lệnh này sẽ liệt kê tất cả các OSD ID hiện có trong cụm Ceph.

Sử dụng lệnh ceph osd dump.

$ ceph osd dump
epoch 2017
fsid c83fa570-ef43-4d9a-aaf4-51aeed96aa15
created 2023-11-03T20:09:56.844725+0700
modified 2023-11-10T14:38:38.057188+0700
flags sortbitwise,recovery_deletes,purged_snapdirs,pglog_hardlimit
crush_version 145
full_ratio 0.95
backfillfull_ratio 0.9
nearfull_ratio 0.85
require_min_compat_client luminous
min_compat_client jewel
require_osd_release quincy
stretch_mode_enabled false
pool 1 '.mgr' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 19 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr
pool 3 'ceph' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 1958 lfor 0/1118/1116 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd
pool 4 'kubernetes' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 1716 lfor 0/1716/1714 flags hashpspool,selfmanaged_snaps stripe_width 0 application rbd
max_osd 33
osd.0 up   in  weight 1 up_from 1929 up_thru 1994 down_at 1928 last_clean_interval [1288,1909) [v2:[fc00::1]:6800/3108,v1:[fc00::1]:6808/3108] [v2:[fc00::1]:6821/3108,v1:[fc00::1]:6831/3108] exists,up aca8ef3a-cf33-4b14-b85b-2a50c7a080d3
osd.1 up   in  weight 1 up_from 1933 up_thru 1994 down_at 1932 last_clean_interval [1288,1909) [v2:[fc00::1]:6801/3109,v1:[fc00::1]:6806/3109] [v2:[fc00::1]:6815/3109,v1:[fc00::1]:6825/3109] exists,up e27bf5f1-fbfb-47cd-908f-2ac334691ccc
osd.2 up   in  weight 1 up_from 1938 up_thru 1994 down_at 1937 last_clean_interval [1278,1909) [v2:[fc00::1]:6879/3102,v1:[fc00::1]:6881/3102] [v2:[fc00::1]:6882/3102,v1:[fc00::1]:6883/3102] exists,up d56d4312-ba7d-41ec-84ea-640ffb55fd24
osd.3 up   in  weight 1 up_from 1932 up_thru 1994 down_at 1931 last_clean_interval [1290,1909) [v2:[fc00::1]:6811/3117,v1:[fc00::1]:6819/3117] [v2:[fc00::1]:6830/3117,v1:[fc00::1]:6839/3117] exists,up 1a3641b9-e5a8-409e-8f8b-d8a0979a3192
osd.4 down in  weight 1 up_from 1984 up_thru 1984 down_at 1994 last_clean_interval [1865,1897) [v2:[fc00::2]:6800/2574,v1:[fc00::2]:6801/2574] [v2:[fc00::2]:6802/2574,v1:[fc00::2]:6803/2574] exists e31746db-b03b-434f-8666-0e1108dc5cbb
osd.5 down out weight 0 up_from 1863 up_thru 1874 down_at 1898 last_clean_interval [1812,1848) [v2:[fc00::2]:6809/3126,v1:[fc00::2]:6816/3126] [v2:[fc00::2]:6822/3126,v1:[fc00::2]:6830/3126] autoout,exists 794b0b90-8f06-480a-bbae-2d32289698aa
osd.20 down out weight 0 up_from 1861 up_thru 1375 down_at 1903 last_clean_interval [1823,1848) [v2:[fc00::2]:6808/3123,v1:[fc00::2]:6814/3123] [v2:[fc00::2]:6820/3123,v1:[fc00::2]:6828/3123] autoout,exists bb86840c-4ced-4d80-a15b-c50cb3b1e91d
osd.21 down out weight 0 up_from 1863 up_thru 1876 down_at 1898 last_clean_interval [1820,1848) [v2:[fc00::2]:6847/3124,v1:[fc00::2]:6859/3124] [v2:[fc00::2]:6870/3124,v1:[fc00::2]:6875/3124] autoout,exists b2439bc6-553d-4b14-af5a-efb83d4ec40d
osd.22 up   in  weight 1 up_from 1927 up_thru 1994 down_at 1926 last_clean_interval [1284,1909) [v2:[fc00::1]:6822/3113,v1:[fc00::1]:6832/3113] [v2:[fc00::1]:6844/3113,v1:[fc00::1]:6854/3113] exists,up 463f0296-888e-4645-a1b3-120b89b9e8f8
osd.23 down in  weight 1 up_from 1922 up_thru 1929 down_at 2012 last_clean_interval [1281,1909) [v2:[fc00::1]:6803/3114,v1:[fc00::1]:6810/3114] [v2:[fc00::1]:6817/3114,v1:[fc00::1]:6827/3114] exists a7bbf255-f5f6-4f58-a888-4040f7311e88
osd.24 up   in  weight 1 up_from 1934 up_thru 1994 down_at 1933 last_clean_interval [1278,1909) [v2:[fc00::1]:6805/3115,v1:[fc00::1]:6814/3115] [v2:[fc00::1]:6824/3115,v1:[fc00::1]:6834/3115] exists,up caa558c2-45fe-475c-8e39-209b6366059c

Lệnh này sẽ hiển thị một loạt các thông tin chi tiết về từng OSD trong hệ thống Ceph.

Sử dụng lệnh ceph osd pool ls.

$ ceph osd pool ls
.mgr
ceph
kubernetes

Lệnh này sẽ liệt kê tất cả các pool OSD trong hệ thống Ceph.

Hãy đảm bảo rằng bạn đang thực hiện lệnh trên một node nào đó trong cụm Ceph và có quyền truy cập Ceph CLI. Bạn có thể cài đặt ceph trên một node quản lý Ceph hoặc sử dụng một máy tính khác với cài đặt Ceph CLI và cấu hình kết nối đúng.

2.3. Quy trình thêm OSD bằng thủ công.

Trong quá trình thêm một OSD (Object Storage Daemon) thủ công, quy trình sau sẽ thiết lập một tiến trình ceph-osd, cấu hình OSD này để sử dụng một ổ đĩa và cấu hình cluster để phân phối dữ liệu đến OSD. Nếu máy chủ của bạn có nhiều ổ đĩa, bạn có thể thêm một OSD cho mỗi ổ đĩa trên máy chủ bằng cách lặp lại quy trình này.

Như quy trình dưới đây sẽ thể hiện, việc thêm một OSD bao gồm việc tạo một thư mục metadata cho nó, cấu hình ổ đĩa lưu trữ dữ liệu, thêm OSD vào cluster và sau đó thêm vào CRUSH map.

Khi bạn thêm OSD vào CRUSH map, bạn cần xem xét trọng số mà bạn gán cho OSD mới. Vì dung lượng ổ đĩa lưu trữ tăng theo thời gian, các máy chủ OSD mới có khả năng có ổ đĩa lớn hơn so với các máy chủ cũ trong cluster và do đó có thể có trọng số lớn hơn.

Mẹo:
Ceph hoạt động tốt nhất khi phần cứng đồng đều trong các pool. Bạn có thể thêm ổ đĩa có kích thước không giống nhau và sau đó điều chỉnh trọng số của chúng tương ứng. Tuy nhiên, để đạt được hiệu suất tốt nhất, hãy xem xét một hệ thống CRUSH có ổ đĩa cùng loại và kích thước. Việc thêm ổ đĩa lớn một cách đồng đều vào các máy chủ hiện tại là tốt nhất. Điều này có thể được thực hiện từ từ, thay thế các ổ đĩa nhỏ mỗi lần thêm ổ đĩa mới.

Bước 1 – Tạo một OSD mới (thực hiện Ceph Monitor).

Để tạo một OSD mới, chạy một lệnh theo định dạng sau. Lệnh ceph osd create được sử dụng để tạo một OSD mới trong cluster Ceph. Dưới đây là một ví dụ về cách bạn có thể sử dụng lệnh này:

$ ceph osd create
4

Kết quả của lệnh sẽ hiển thị thông tin về OSD mới được tạo, ở đây là số 4 (bạn hãy ghi nhớ số 4 để làm các bước tiếp theo), bao gồm UUID và ID của OSD. UUID thường được tạo tự động nếu không được chỉ định một cách rõ ràng.

Nếu bạn muốn chỉ định UUID và ID, bạn có thể thực hiện như sau:

ceph osd create {uuid} {id}

Nếu tham số tùy chọn {id} được chỉ định, nó sẽ được sử dụng làm ID của OSD. Tuy nhiên, nếu số ID đã được sử dụng, lệnh sẽ thất bại.

Ví dụ:

ceph osd create 123e4567-e89b-12d3-a456-426614174001 10

Lưu ý rằng việc chỉ định UUID và ID là tùy chọn và thường không được khuyến khích để tránh vấn đề liên quan đến quản lý ID và bảo toàn bộ nhớ. Thông thường, bạn có thể sử dụng lệnh ceph osd create mà không cần chỉ định UUID và ID.

Bước 2 – Tạo thư mục mặc định cho OSD mới của bạn, sử dụng các lệnh dưới (thực hiện Ceph OSD bạn chứ ổ đĩa bạn muốn thêm vào OSD).

ssh {new-osd-host}
sudo mkdir /var/lib/ceph/osd/ceph-{osd-number}

Lệnh ssh {new-osd-host} được sử dụng để kết nối đến một máy chủ mới (new-osd-host) thông qua SSH. Sau đó, lệnh sudo mkdir /var/lib/ceph/osd/ceph-{osd-number} được sử dụng để tạo một thư mục mới trên máy chủ đó để lưu trữ dữ liệu của OSD với số thứ tự OSD được chỉ định (osd-number).

Dưới đây là một ví dụ cụ thể:

ssh user@192.168.1.100

Trong đó:

  • user: Tên người dùng để đăng nhập vào máy chủ mới.
  • 192.168.1.100: Địa chỉ IP hoặc tên máy chủ của máy chủ mới.

Sau khi đăng nhập vào máy chủ mới, bạn có thể chạy lệnh tạo thư mục OSD:

sudo mkdir /var/lib/ceph/osd/ceph-1

Trong đó:

  • /var/lib/ceph/osd/: Đường dẫn thư mục mặc định cho dữ liệu OSD trong Ceph.
  • ceph-1: Thư mục mới cho OSD có số thứ tự là 1. Thư mục này có thể có tên theo số OSD hoặc có thể theo tên thực tế của OSD tùy thuộc vào cấu hình cụ thể của bạn.

Xác nhận thư mục đã tạo thành công bằng lệnh.

$ ls /var/lib/ceph/osd/
ceph-4

Bước 3 – Định dạng ổ đĩa.

sudo mkfs -t {fstype} /dev/{drive}
sudo mount -o user_xattr /dev/{hdd} /var/lib/ceph/osd/ceph-{osd-number}

Ví dụ sau khi đăng nhập vào máy chủ mới, thì đầu tiên kiểm tra các ổ đĩa sẵn sàng để tạo OSD.

$ lsblk 
NAME               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0 931.5G  0 disk 
sdb                  8:16   0 931.5G  0 disk 
sdc                  8:32   0 931.5G  0 disk 
├─sdc1               8:33   0  1007K  0 part 
├─sdc2               8:34   0     1G  0 part 
└─sdc3               8:35   0 930.5G  0 part 
  ├─pve-swap       253:0    0     8G  0 lvm  [SWAP]
  ├─pve-root       253:1    0    96G  0 lvm  /
  ├─pve-data_tmeta 253:2    0   8.1G  0 lvm  
  │ └─pve-data     253:4    0 794.3G  0 lvm  
  └─pve-data_tdata 253:3    0 794.3G  0 lvm  
    └─pve-data     253:4    0 794.3G  0 lvm  
sdd                  8:48   0 931.5G  0 disk 
sde                  8:64   0 931.5G  0 disk 
sdf                  8:80   0 931.5G  0 disk 
sdg                  8:96   0 931.5G  0 disk 
sdh                  8:112  0 931.5G  0 disk 
sdi                  8:128  0 931.5G  0 disk 
sdj                  8:144  0 931.5G  0 disk

Sau khi xác định được ổ đĩa sử dụng để tạo OSD, bạn có thể chạy lệnh định dạng ổ đĩa. Ví dụ của mình sẽ sử dụng ổ đĩa sda và định dạng nó thành ext4.

$ sudo mkfs -t ext4 /dev/sda
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 244190646 4k blocks and 61054976 inodes
Filesystem UUID: d70f6cc8-d07a-441e-b185-45b2a5108db4
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000, 214990848

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): 
done
Writing superblocks and filesystem accounting information: done

Sau khi đã định dạng ổ đĩa, bạn có thể mount nó vào thư mục dữ liệu của OSD:

sudo mount -o user_xattr /dev/sda /var/lib/ceph/osd/ceph-4

Trong đó/var/lib/ceph/osd/ceph-4 là đường dẫn thư mục của OSD đã được tạo trước đó.

Lưu ý rằng các giá trị như /dev/sda hoặc ceph-4 có thể phụ thuộc vào cấu hình cụ thể của bạn và có thể cần được điều chỉnh tùy thuộc vào tên và vị trí của ổ đĩa cụ thể bạn đang sử dụng.

Bạn có thể xác nhận lại ổ đĩa /dev/sda đã được mount vào thư mục /var/lib/ceph/osd/ceph-4 thành công bằng lệnh lsblk .

$ lsblk 
NAME               MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0 931.5G  0 disk /var/lib/ceph/osd/ceph-4
sdb                  8:16   0 931.5G  0 disk 
sdc                  8:32   0 931.5G  0 disk 
├─sdc1               8:33   0  1007K  0 part 
├─sdc2               8:34   0     1G  0 part 
└─sdc3               8:35   0 930.5G  0 part 
  ├─pve-swap       253:0    0     8G  0 lvm  [SWAP]
  ├─pve-root       253:1    0    96G  0 lvm  /
  ├─pve-data_tmeta 253:2    0   8.1G  0 lvm  
  │ └─pve-data     253:4    0 794.3G  0 lvm  
  └─pve-data_tdata 253:3    0 794.3G  0 lvm  
    └─pve-data     253:4    0 794.3G  0 lvm  
sdd                  8:48   0 931.5G  0 disk 
sde                  8:64   0 931.5G  0 disk 
sdf                  8:80   0 931.5G  0 disk 
sdg                  8:96   0 931.5G  0 disk 
sdh                  8:112  0 931.5G  0 disk 
sdi                  8:128  0 931.5G  0 disk 
sdj                  8:144  0 931.5G  0 disk 

Lúc này nếu dùng lệnh ceph osd tree thì bạn cũng đã nhìn thấy OSD đang ở trạng thái Down.

$ ceph osd tree | grep osd.4
 4                0  osd.4             down         0  1.00000

Bước 4 – Khởi tạo thư mục dữ liệu OSD bằng cách chạy các lệnh theo định dạng sau.

Đảm bảo thư mục mount của OSD phải trống.

Vì thường thư mục này khi định dạng xong hay chứa một thư mục có tên lost+found như dưới.

$ ls /var/lib/ceph/osd/ceph-4
lost+found

Bạn hãy xóa thư mục này đi bằng lệnh rm -rf /var/lib/ceph/osd/ceph-4/* để đảm bảo rằng thư mục trống trước khi chạy ceph-osd.

Tạo Keyring Cho OSD.

$ ceph-authtool --create-keyring /var/lib/ceph/osd/ceph-4/keyring --gen-key -n client.osd.4
creating /var/lib/ceph/osd/ceph-4/keyring

Trong đó, 4 là OSD ID của OSD bạn đang cố gắng tạo.

Tạo Khóa Cho client.admin.

$ ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin
creating /etc/ceph/ceph.client.admin.keyring

Thêm Capability cho client.admin trong Keyring.

ceph-authtool /etc/ceph/ceph.client.admin.keyring --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *'

Gán Khóa Cho client.admin.

$ ceph-authtool /etc/ceph/ceph.client.admin.keyring --import-keyring /etc/ceph/ceph.client.admin.keyring
importing contents of /etc/ceph/ceph.client.admin.keyring into /etc/ceph/ceph.client.admin.keyring

Copy Keyring Đến OSD Keyring.

cp /etc/ceph/ceph.client.admin.keyring /var/lib/ceph/osd/ceph-4/keyring

Kiểm tra và Xác nhận Keyring Đã Tạo.

$ ceph-authtool /var/lib/ceph/osd/ceph-4/keyring --print-key
AQAn+E1lJyjbNhAA7NzCb0rtVZFqZjMoBz4HRA==

Thay đổi Quyền sở hữu của Keyring.

chown ceph:ceph /var/lib/ceph/osd/ceph-4/keyringa

Khởi động lại OSD.

systemctl restart ceph-osd@4

Sau khi thực hiện các bước trên, OSD của bạn nên được khởi động lại mà không gặp phải lỗi này. Đảm bảo rằng bạn đã sao chép đúng keyring từ client.admin và cấu hình OSD được thiết lập đúng.

Một số lưu ý.

Lệnh ceph-osd -i {osd-num} --mkfs --mkkey thường được sử dụng để tạo OSD mới, bao gồm việc tạo keyring và file hệ thống. Nó được sử dụng để khởi tạo OSD data directory bằng cách tạo một filesystem trên OSD và tạo một khóa xác thực cho OSD. Dưới đây là một ví dụ về cách bạn có thể sử dụng lệnh này, hãy đảm bảo rằng thư mục trống rỗng trước khi chạy lệnh ceph-osd.

ceph-osd -i 4 --mkfs --mkkey

Trong đó 4 là số thứ tự của OSD (osd-num). Bạn cần thay thế nó bằng số OSD thực tế bạn đang cài đặt.

  • Lệnh trên sẽ thực hiện các bước sau đây:
    • Tạo một filesystem trên OSD.
    • Tạo một khóa xác thực cho OSD.

Kết quả của lệnh sẽ cung cấp thông tin về quá trình này, bao gồm UUID của OSD và đường dẫn đến keyring file chứa khóa xác thực.

Lưu ý rằng quá trình này thường được thực hiện sau khi bạn đã tạo OSD bằng cách sử dụng các lệnh trước đó như ceph osd create và đã chuẩn bị data directory của OSD bằng cách sử dụng lệnh sudo mkdir.

Nếu bạn đã tạo keyring một cách riêng biệt và muốn sử dụng nó khi tạo OSD, bạn có thể chỉ cần chạy lệnh khởi động lại OSD, chẳng hạn:

systemctl restart ceph-osd@{osd-num}

Sử dụng keyring có sẵn thay vì chạy --mkfs --mkkey có thể giúp bạn tránh được một số vấn đề liên quan đến việc tạo lại OSD từ đầu.

Mỗi OSD sẽ có một keyring riêng biệt để xác thực.

Mỗi OSD trong hệ thống Ceph sẽ có một keyring riêng biệt để xác thực. Keyring này chứa các thông tin cần thiết để OSD có thể tham gia vào cụm Ceph và giao tiếp với các thành phần khác như Monitor (MON) và Metadata Server (MDS).

Khi bạn tạo một OSD mới, thường cần tạo một keyring mới cho OSD đó, bao gồm việc tạo khóa và các quyền cần thiết. Các keyring này thường được lưu trữ tại đường dẫn /var/lib/ceph/osd/cluster-osd{id}/keyring, trong đó {id} là số ID của OSD.

Mỗi OSD cần có một keyring riêng để đảm bảo tính riêng tư và an toàn trong quá trình xác thực và truy cập dữ liệu.

Nếu bạn đã tạo keyring trước đó cho OSD và muốn sử dụng nó khi khởi động lại OSD, bạn có thể copy keyring đã tạo đến đúng đường dẫn của OSD và sau đó khởi động lại OSD.

Bước 6 – Thêm quyền truy cập cho một OSD.

Lệnh ceph auth add được sử dụng để thêm quyền truy cập cho một OSD trong cluster Ceph.

ceph auth add osd.{osd-num} osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-{osd-num}/keyring

Trong lệnh này, ceph-{osd-num} được liệt kê trong đường dẫn vì nhiều cluster có tên là ceph. Tuy nhiên, nếu tên cluster của bạn không phải là ceph, chuỗi ceph trong ceph-{osd-num} cần được thay thế bằng tên cluster của bạn. Ví dụ, nếu tên cluster của bạn là cluster1, thì đường dẫn trong lệnh sẽ là /var/lib/ceph/osd/cluster1-{osd-num}/keyring.

Dưới đây là một ví dụ về cách bạn có thể sử dụng lệnh này:

ceph auth add osd.1 osd 'allow *' mon 'allow rwx' -i /var/lib/ceph/osd/ceph-1/keyring

Trong đó:

  • osd.1: Là tên của OSD, trong đó 1 là số thứ tự của OSD (osd-num). Thay thế nó bằng số OSD thực tế bạn đang cài đặt.
  • osd 'allow *': Cấp quyền truy cập đầy đủ cho OSD.
  • mon 'allow rwx': Cấp quyền truy cập đầy đủ cho Monitor.
  • -i /var/lib/ceph/osd/ceph-1/keyring: Chỉ định đường dẫn đến keyring file chứa khóa xác thực của OSD. Thay thế đường dẫn này bằng đường dẫn thực tế của OSD bạn đang sử dụng.

Lệnh trên sẽ tạo một khóa xác thực mới cho OSD, cho phép nó có quyền truy cập đầy đủ vào OSD và Monitor trong cluster.

Lưu ý rằng quá trình này thường được thực hiện sau khi bạn đã tạo OSD bằng các lệnh trước đó và đã khởi tạo OSD data directory và khóa xác thực.

Bước 7 – Thêm OSD vào CRUSH map.

Thêm OSD vào CRUSH map bằng cách chạy lệnh sau đây. Điều này cho phép OSD bắt đầu nhận dữ liệu. Lệnh ceph osd crush add có thể thêm OSD vào cấu trúc CRUSH ở bất kỳ đâu bạn muốn. Nếu bạn chỉ định một hoặc nhiều bucket, lệnh đặt OSD trong bucket cụ thể nhất đó và di chuyển bucket đó dưới bất kỳ bucket nào khác bạn đã chỉ định.

ceph osd crush add {id-or-name} {weight} [{bucket-type}={bucket-name} ...]

Dưới đây là một ví dụ về cách bạn có thể sử dụng lệnh này:

ceph osd crush add 1 1 host=new-osd-host

Trong đó:

  • 1: Là số thứ tự của OSD (osd-num). Thay thế nó bằng số OSD thực tế bạn đang cài đặt.
  • 1: Là trọng số (weight) được gán cho OSD trong CRUSH map. Điều này có thể được điều chỉnh tùy thuộc vào cấu hình của bạn.
  • host=new-osd-host: Định rõ nơi OSD sẽ được đặt. Thay thế new-osd-host bằng tên máy chủ thực tế bạn đang thêm OSD vào.

Lệnh trên thêm OSD vào CRUSH map và xác định vị trí của nó trong hệ thống. CRUSH map được sử dụng để xác định cách dữ liệu được phân phối và đặt trên các OSD trong cluster.

Lưu ý rằng cần điều chỉnh các tham số như số OSD, trọng số, và vị trí OSD tùy thuộc vào cấu hình cụ thể của bạn.

Còn một cách khác để thêm OSD mới vào CRUSH map là giải mã CRUSH map, thêm OSD vào danh sách thiết bị, thêm host như một bucket (nếu nó chưa có trong CRUSH map), thêm thiết bị làm mục trong host, gán thiết bị một trọng số, biên dịch lại CRUSH map và đặt CRUSH map. Để biết chi tiết, xem Thêm/Di chuyển một OSD.

2.4. Thay thế một OSD.

Đôi khi cần phải thay thế OSDs: ví dụ, khi một ổ đĩa hỏng hoặc khi một quản trị viên muốn tái cấu hình lại OSDs với một backend mới (ví dụ, khi chuyển từ Filestore sang BlueStore). Việc thay thế một OSD khác biệt so với việc Loại bỏ OSD trong việc giữ nguyên ID và CRUSH map entry của OSD đã bị thay thế sau khi OSD bị phá hủy để thay thế.

Bước 1 – Đảm bảo rằng việc hủy OSD là an toàn.

while ! ceph osd safe-to-destroy osd.{id} ; do sleep 10 ; done

Dòng lệnh while ! ceph osd safe-to-destroy osd.{id} ; do sleep 10 ; done được sử dụng để kiểm tra xem có thể an toàn để xóa một OSD khỏi cluster Ceph hay không. Dưới đây là mô tả về tác dụng của từng phần của dòng lệnh:

  • while: Bắt đầu một vòng lặp.
  • ! ceph osd safe-to-destroy osd.{id}: Kiểm tra xem có thể an toàn để xóa OSD hay không. Nếu điều kiện này là đúng (không an toàn để xóa), vòng lặp sẽ tiếp tục thực hiện.
  • ;: Ngăn cách giữa các lệnh.
  • do sleep 10: Nếu điều kiện ! ceph osd safe-to-destroy osd.{id} là đúng, vòng lặp sẽ đợi 10 giây (do sleep 10) trước khi kiểm tra lại điều kiện.
  • done: Kết thúc vòng lặp.

Vòng lặp này sẽ tiếp tục chạy cho đến khi điều kiện ceph osd safe-to-destroy trở thành đúng, tức là OSD đã được đánh dấu là an toàn để xóa khỏi cluster.

Tác dụng chính của đoạn lệnh này là chờ đợi cho đến khi cluster Ceph cho phép việc xóa OSD mà không gây ảnh hưởng lớn đến dữ liệu hoặc hoạt động của cluster. Điều này đặc biệt quan trọng khi bạn muốn thay thế một OSD bằng OSD mới hoặc khi có các yêu cầu khác liên quan đến quản lý OSD trong cluster Ceph.

Bước 2 – Để hủy một OSD sử dụng lệnh dưới.

ceph osd destroy {id} --yes-i-really-mean-it

Bước 3 – Bước này là một tùy chọn (tùy nhu cầu của bạn mà sử dụng hay không), nếu ổ đĩa bạn định sử dụng không phải là ổ đĩa mới và đã được sử dụng trước đây cho mục đích khác, xóa ổ đĩa:

ceph-volume lvm zap /dev/sdX

Lệnh ceph-volume lvm zap /dev/sdX được sử dụng để “xóa” một ổ đĩa (disk) để chuẩn bị cho việc sử dụng trong cluster Ceph. Dưới đây là mô tả về tác dụng của lệnh này:

  • ceph-volume: Đây là một công cụ trong Ceph được sử dụng để quản lý và cấu hình các ổ đĩa (OSD).
  • lvm: Đây là backend storage được sử dụng bởi Ceph để quản lý các OSD.
  • zap: Tác dụng của zap là xóa toàn bộ dữ liệu có trên ổ đĩa, bao gồm cả các phân vùng và dữ liệu tồn tại trên ổ đĩa. Nó là một bước cần thiết để chuẩn bị ổ đĩa trước khi sử dụng nó làm OSD trong cluster Ceph.
  • /dev/sdX: Đường dẫn của ổ đĩa cần được xóa. Thay thế sdX bằng đường dẫn thực tế của ổ đĩa bạn muốn xóa.

Tác dụng chính của lệnh này là đảm bảo rằng ổ đĩa sẽ trở thành “trắng trơn” (blank slate), không chứa bất kỳ dữ liệu hay phân vùng nào trước khi nó được sử dụng trong cluster Ceph làm một OSD mới.

Bước 4 – Chuẩn bị ổ đĩa để thay thế bằng cách sử dụng ID của OSD đã bị hủy trong các bước trước.

ceph-volume lvm prepare --osd-id {id} --data /dev/sdX

Lệnh ceph-volume lvm prepare được sử dụng để chuẩn bị một ổ đĩa để sử dụng làm OSD trong cluster Ceph. Dưới đây là mô tả về tác dụng của lệnh này:

  • ceph-volume: Đây là một công cụ trong Ceph được sử dụng để quản lý và cấu hình các ổ đĩa (OSD).
  • lvm: Đây là backend storage được sử dụng bởi Ceph để quản lý các OSD.
  • prepare: Tác dụng của prepare là chuẩn bị một ổ đĩa để trở thành một OSD trong Ceph.
  • --osd-id {id}: Xác định số thứ tự của OSD. Thay thế {id} bằng số thứ tự thực tế của OSD bạn đang chuẩn bị.
  • --data /dev/sdX: Xác định ổ đĩa mà bạn muốn sử dụng làm OSD. Thay thế /dev/sdX bằng đường dẫn thực tế của ổ đĩa bạn muốn chuẩn bị.

Tác dụng chính của lệnh này là thực hiện các bước chuẩn bị cần thiết để biến ổ đĩa thành một OSD trong cluster Ceph, bao gồm việc tạo các phân vùng, định dạng filesystem, và thiết lập các cấu hình cần thiết để OSD có thể hoạt động trong cluster. Sau khi lệnh này được thực hiện, OSD sẽ sẵn sàng để được thêm vào cluster Ceph.

Bước 5 – Cuối cùng, kích hoạt OSD.

ceph-volume lvm activate {id} {fsid}

Lệnh ceph-volume lvm activate được sử dụng để kích hoạt một OSD đã được chuẩn bị trong Ceph và sẵn sàng để tham gia vào cluster. Dưới đây là mô tả về tác dụng của lệnh này:

  • ceph-volume: Đây là một công cụ trong Ceph được sử dụng để quản lý và cấu hình các ổ đĩa (OSD).
  • lvm: Đây là backend storage được sử dụng bởi Ceph để quản lý các OSD.
  • activate: Tác dụng của activate là kích hoạt một OSD đã được chuẩn bị để nó có thể bắt đầu nhận và lưu trữ dữ liệu trong cluster Ceph.
  • {id}: Xác định số thứ tự của OSD. Thay thế {id} bằng số thứ tự thực tế của OSD bạn đang kích hoạt.
  • {fsid}: Filesystem ID của cluster Ceph. Đây là một định danh duy nhất cho cluster và thường được sử dụng để đảm bảo tính duy nhất của mỗi OSD trong cluster.

Tác dụng chính của lệnh này là bắt đầu OSD và kết nối nó với cluster Ceph, cho phép nó tham gia vào quá trình lưu trữ và xử lý dữ liệu. Sau khi lệnh này được thực hiện, OSD sẽ trở thành một phần của cluster và có thể tham gia vào quá trình rebalancing và phân phối dữ liệu trong hệ thống.

Hoặc, thay vì thực hiện hai bước cuối cùng (chuẩn bị ổ đĩa và kích hoạt OSD), bạn có thể tạo lại OSD bằng cách chạy một lệnh duy nhất theo định dạng sau:

ceph-volume lvm create --osd-id {id} --data /dev/sdX

Lệnh ceph-volume lvm create được sử dụng để tạo mới một OSD trong Ceph bằng cách sử dụng ổ đĩa đã được chuẩn bị. Dưới đây là mô tả về tác dụng của lệnh này:

  • ceph-volume: Đây là một công cụ trong Ceph được sử dụng để quản lý và cấu hình các ổ đĩa (OSD).
  • lvm: Đây là backend storage được sử dụng bởi Ceph để quản lý các OSD.
  • create: Tác dụng của create là tạo mới một OSD trong Ceph.
  • --osd-id {id}: Xác định số thứ tự của OSD. Thay thế {id} bằng số thứ tự thực tế của OSD bạn đang tạo mới.
  • --data /dev/sdX: Xác định ổ đĩa mà bạn muốn sử dụng làm OSD. Thay thế /dev/sdX bằng đường dẫn thực tế của ổ đĩa bạn muốn tạo mới OSD.

Tác dụng chính của lệnh này là tạo mới một OSD trong Ceph từ một ổ đĩa đã được chuẩn bị trước đó. Lệnh này sẽ thực hiện các bước cuối cùng để kết nối OSD với cluster Ceph, cấu hình các tùy chọn cần thiết và bắt đầu OSD để nó có thể bắt đầu nhận và lưu trữ dữ liệu trong cluster.

Ghi chú:
Nếu quy trình trong phần này không hoạt động cho bạn, hãy thử các hướng dẫn trong tài liệu cephadm thay thế một OSD.

2.5. Khởi chạy OSD.

Sau khi một OSD được thêm vào Ceph, OSD đó sẽ ở trong cluster. Tuy nhiên, cho đến khi nó được khởi động, OSD được coi là tắt và trong trạng thái “in”. OSD không chạy và sẽ không thể nhận dữ liệu. Để khởi động một OSD, bạn có thể chạy dịch vụ ceph từ máy quản trị của bạn hoặc chạy một lệnh theo định dạng sau để khởi động OSD từ máy chủ của nó:

sudo systemctl start ceph-osd@{osd-num}

Sau khi OSD được khởi động, nó sẽ được coi là đã kích hoạt và trong trạng thái “in”.

Sau khi OSD mới đã được thêm vào CRUSH map, Ceph bắt đầu cân bằng lại cluster bằng cách di chuyển các PGs đến OSD mới. Để quan sát quá trình này bằng cách sử dụng công cụ ceph, chạy lệnh sau:

ceph -w

Hoặc:

watch ceph status

Trạng thái PG sẽ đầu tiên chuyển từ active+clean sang active, một số đối tượng bị giảm chất lượng và sau đó trở lại active+clean khi quá trình di chuyển hoàn tất.

Khi bạn không muốn giám sát nữa, nhấn Ctrl-C để thoát.

2.6. Đưa OSD ra khỏi cluster.

Trong hầu hết các trường hợp, OSDs sẽ ở trạng thái “up” và “in” trước khi chúng được loại bỏ khỏi cluster. Trước khi OSD có thể được loại bỏ khỏi cluster, nó phải được đưa ra khỏi cluster để Ceph có thể bắt đầu cân bằng lại và sao chép dữ liệu của nó sang các OSD khác. Để đưa một OSD ra khỏi cluster, chạy lệnh theo định dạng sau:

ceph osd out {osd-num}

Lệnh ceph osd out {osd-num} trong Ceph được sử dụng để đưa một OSD ra khỏi cluster. Tác dụng của lệnh là đưa OSD có số thứ tự là {osd-num} ra khỏi cluster Ceph.

Khi một OSD được đưa ra khỏi cluster bằng cách sử dụng lệnh này, nó không còn tham gia vào quá trình nhận và xử lý dữ liệu trong cluster. OSD sẽ được đánh dấu là “out” và cluster Ceph sẽ bắt đầu quá trình rebalancing dữ liệu, di chuyển dữ liệu từ OSD này sang các OSD khác để duy trì sự cân bằng trong hệ thống.

Sau khi OSD đã được đưa ra khỏi cluster, Ceph bắt đầu cân bằng lại cluster bằng cách di chuyển các nhóm đặt ra khỏi OSD đã bị loại bỏ. Để quan sát quá trình này bằng cách sử dụng công cụ ceph, chạy lệnh sau:

ceph -w

Lưu ý rằng quá trình rebalancing có thể mất một khoảng thời gian tùy thuộc vào lượng dữ liệu và cấu hình cụ thể của cluster. Việc đưa một OSD ra khỏi cluster có thể thực hiện được khi bạn muốn thực hiện bảo trì, thay thế OSD, hoặc thực hiện các thao tác quản lý khác.

Trạng thái PG sẽ thay đổi từ active+clean sang active, một số đối tượng bị giảm chất lượng và sau đó trở lại active+clean khi quá trình di chuyển hoàn tất. Khi bạn đã hoàn tất quan sát, nhấn Ctrl-C để thoát.

Ghi chú:

Dưới một số điều kiện, việc đưa ra một OSD có thể dẫn đến trường hợp đặc biệt khi CRUSH gặp phải một số PGs mắc kẹt ở trạng thái active+remapped. Vấn đề này đôi khi xảy ra trong các cluster nhỏ có ít hosts (ví dụ, trong một cluster thử nghiệm nhỏ). Để giải quyết vấn đề này, đánh dấu OSD vào bằng cách chạy một lệnh theo định dạng sau:

ceph osd in {osd-num}

Sau khi OSD đã quay lại trạng thái ban đầu, không đánh dấu OSD ra lại. Thay vào đó, đặt trọng số OSD về 0 bằng cách chạy lệnh theo định dạng sau:

ceph osd crush reweight osd.{osd-num} 0

Sau khi OSD đã được đặt lại trọng số, quan sát quá trình di chuyển dữ liệu và xác nhận rằng nó đã hoàn tất thành công. Sự khác biệt giữa việc đánh dấu một OSD ra và đặt lại trọng số của OSD về 0 liên quan đến bucket chứa OSD đó. Khi một OSD được đánh dấu ra, trọng số của bucket không thay đổi. Nhưng khi một OSD được đặt lại trọng số về 0, trọng số của bucket được cập nhật (cụ thể, trọng số của OSD được trừ đi từ trọng số tổng của bucket). Khi làm việc với các cluster nhỏ, đôi khi việc sử dụng lệnh đặt lại trọng số trên có thể là lựa chọn tốt hơn.

2.7. Dừng một OSD.

Sau khi bạn đưa ra một OSD khỏi cluster, OSD có thể vẫn đang chạy. Trong trường hợp này, OSD là “up” và “out”. Trước khi bị loại bỏ khỏi cluster, OSD phải được dừng bằng cách chạy các lệnh theo định dạng sau:

sudo systemctl stop ceph-osd@{osd-num}

Sau khi OSD đã được dừng, nó sẽ trạng thái “down”.

2.8. Xóa bỏ một OSD.

Quy trình dưới đây loại bỏ một OSD khỏi bản đồ cluster, loại bỏ khóa xác thực của OSD, loại bỏ OSD khỏi bản đồ OSD và loại bỏ OSD khỏi file ceph.conf. Nếu máy chủ của bạn có nhiều ổ đĩa, có thể cần phải loại bỏ một OSD từ mỗi ổ đĩa bằng cách lặp lại quy trình này.

Bắt đầu bằng cách yêu cầu cluster quên về OSD. Bước này sẽ loại bỏ OSD khỏi bản đồ CRUSH, loại bỏ khóa xác thực của OSD và loại bỏ OSD khỏi bản đồ OSD. (Lệnh purge đã được giới thiệu từ phiên bản Luminous. Đối với các phiên bản cũ hơn, xem quy trình ở đây):

ceph osd purge {id} --yes-i-really-mean-it

Di chuyển đến máy chủ nơi bản sao chính của file ceph.conf của cluster được lưu trữ:

ssh {admin-host}
cd /etc/ceph
vim ceph.conf

Loại bỏ mục OSD khỏi file ceph.conf của bạn (nếu có mục đó):

[osd.1]
    host = {hostname}

Sao chép file ceph.conf đã được cập nhật từ vị trí trên máy chủ nơi bản sao chính của file ceph.conf của cluster được lưu trữ đến thư mục /etc/ceph trên các máy chủ khác trong cluster của bạn.

Nếu cụm Ceph của bạn cũ hơn phiên bản Luminous, bạn sẽ không thể sử dụng lệnh ceph osd purge. Thay vào đó, thực hiện quy trình sau:

Loại bỏ OSD khỏi bản đồ CRUSH để nó không nhận dữ liệu nữa (để biết thêm chi tiết, xem Loại bỏ một OSD):

ceph osd crush remove {name}

Thay vì loại bỏ OSD khỏi bản đồ CRUSH, bạn có thể lựa chọn một trong hai phương án: (1) giải mã CRUSH map, loại bỏ OSD khỏi danh sách thiết bị và loại bỏ thiết bị khỏi bucket host; (2) loại bỏ bucket host khỏi CRUSH map (miễn là nó có trong CRUSH map và bạn có ý loại bỏ host), biên dịch lại bản đồ và đặt nó:

Loại bỏ khóa xác thực OSD:

ceph auth del osd.{osd-num}

Loại bỏ OSD:

ceph osd rm {osd-num}

Ví dụ:

ceph osd rm 1

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories