Sunday, September 29, 2024

Ceph Pool trong Proxmox

-

1. Tổng quan

Ceph Pool là một khái niệm trong hệ thống lưu trữ phân tán Ceph. Nó được sử dụng để quản lý và tổ chức việc lưu trữ dữ liệu trong Ceph cluster.

Một Ceph Pool là một nhóm các OSDs (Object Storage Daemons) trong cụm Ceph được cấu hình để lưu trữ các đối tượng dữ liệu. Mỗi Ceph Pool có thể có các thuộc tính và cấu hình riêng như số lượng replica, độ tin cậy, khả năng mở rộng, và các quy tắc xử lý dữ liệu.

Ceph Pool cho phép người dùng xác định cách dữ liệu được lưu trữ, phân phối và bảo vệ trong cụm Ceph. Bằng cách tạo các Ceph Pool khác nhau, người dùng có thể đáp ứng các yêu cầu lưu trữ khác nhau, ví dụ như hiệu suất cao, bảo mật, độ tin cậy, hoặc khả năng mở rộng.

Mỗi Ceph Pool được đặt tên và có một số thuộc tính quan trọng, bao gồm:

  • Size (kích thước): Đây là số lượng OSDs mà dữ liệu sẽ được sao chép và phân phối trên. Ví dụ, nếu size được đặt là 3, dữ liệu sẽ được sao chép trên 3 OSDs khác nhau để đảm bảo tính toàn vẹn dữ liệu và khả năng khôi phục trong trường hợp lỗi.
  • Min Size (kích thước tối thiểu): Đây là số lượng OSDs tối thiểu cần có để đảm bảo dữ liệu vẫn sẵn có và truy cập được trong trường hợp lỗi. Nếu số lượng OSDs thực tế xuống dưới Min Size, dữ liệu có thể không sẵn có và có thể không thể truy cập.
  • PG (Placement Group): PGs là các nhóm OSDs trong Ceph cluster, và chúng xác định cách dữ liệu được phân phối và quản lý. Số lượng PGs được cấu hình sẽ ảnh hưởng đến hiệu suất và khả năng mở rộng của hệ thống.

Ceph Pool cung cấp một cách linh hoạt để quản lý và tùy chỉnh việc lưu trữ dữ liệu trong Ceph cluster. Người dùng có thể tạo, xóa, sửa đổi các Ceph Pool và tinh chỉnh các cấu hình để đáp ứng yêu cầu cụ thể của họ về hiệu suất, tin cậy và quản lý dữ liệu.

2. Thực hành.

Đây là sơ đồ vật lý của tôi.

Và đây là sơ đồ logic.

3. Lưu ý với Ceph Pooldevice_health_metrics

Khi vào Ceph -> Ceph Pool, bạn sẽ nhìn thấy một pool mặc định có tên làdevice_health_metrics. Đây là một Ceph Pool mặc định được tạo ra trong quá trình triển khai Ceph cluster. Nó được sử dụng để lưu trữ thông tin về sức khỏe và trạng thái của các thiết bị lưu trữ trong cluster, bao gồm OSDs, disks, và các thông số khác liên quan.

Việc xoá device_health_metrics Pool sẽ làm mất đi thông tin quan trọng về sức khỏe của các thiết bị lưu trữ trong Ceph cluster. Tuy nhiên, nếu bạn không quan tâm đến việc theo dõi và giám sát trạng thái của các thiết bị này, và không cần thông tin từ Pool này, bạn có thể xoá nó mà không gây ảnh hưởng lớn đến hoạt động của Ceph cluster.

Trươc khi xoá device_health_metrics Pool, hãy đảm bảo rằng bạn đã có các biện pháp khác để giám sát và theo dõi sức khỏe của các thiết bị lưu trữ trong cluster, hoặc bạn có thể tạo Pool mới để lưu trữ các thông tin này nếu cần thiết.

4. Tạo Pool lưu các virtual machine.

Hãy bấm vào Create, nếu bạn bấm vào Advanced bạn sẽ nhìn thấy một số tuỳ chỉnh nâng cao như dưới.

Mình sẽ giải thích ngắn gọn các tuỳ chọn trong Advanced như sau:

  • Name: Đây là tên của Ceph Pool, được sử dụng để định danh và phân biệt pool với nhau trong hệ thống Ceph.
  • Size: Đây là số lượng các bản sao (replicas) của dữ liệu được lưu trữ trong Ceph Pool. Ví dụ, nếu bạn đặt Size là 2, mỗi đối tượng trong pool sẽ có 2 bản sao được lưu trữ trên các OSDs khác nhau để đảm bảo tính sẵn sàng và độ tin cậy.
  • Crush Rule: Đây là quy tắc Crush (Controlled Replication Under Scalable Hashing) được áp dụng cho Ceph Pool. Quy tắc Crush xác định cách dữ liệu được phân phối và sao chép trên các OSD trong cluster Ceph.
  • of PGs: PG (Placement Group) là một khái niệm quan trọng trong Ceph, nó đại diện cho một nhóm OSDs chứa các đối tượng của Ceph Pool. Thuộc tính này xác định số lượng PG được tạo ra trong Ceph Pool. Số lượng PG càng lớn thì việc phân phối dữ liệu và hiệu suất truy xuất sẽ được cải thiện, nhưng cũng đòi hỏi tài nguyên tính toán và bộ nhớ tăng lên.
  • PG Autoscale Mode: Chế độ tự động điều chỉnh số lượng PG trong Ceph Pool dựa trên kích thước và hoạt động của pool. Các chế độ có thể bao gồm “on” (bật), “off” (tắt) hoặc “warn” (cảnh báo).
  • Add as Storage: Thuộc tính này cho phép bạn chọn xem Ceph Pool có được thêm vào làm lưu trữ (storage) hay không. Nếu được chọn, Ceph Pool sẽ sẵn sàng để lưu trữ các đối tượng và dữ liệu.
  • Target Ratio: Đây là tỷ lệ tự động cân bằng (balancing) PGs giữa các OSD trong Ceph Pool. Tỷ lệ này xác định mức đồng nhất của PGs trên các OSD để đảm bảo hiệu suất và sẵn sàng của hệ thống.
  • Target Size: Đây là kích thước mục tiêu của Ceph Pool, xác định dung lượng lưu trữ tối đa được phép trong pool.
  • Mn. 4 of PGs: Mn. là từ viết tắt của “Minimum” (tối thiểu). Thuộc tính này xác định số lượng tối thiểu của PGs mà Ceph yêu cầu trong Ceph Pool để đảm bảo tính sẵn sàng và hiệu suất hoạt động.

Các thuộc tính này cho phép bạn tùy chỉnh và cấu hình Ceph Pool theo yêu cầu cụ thể của môi trường và ứng dụng sử dụng Ceph.

Trường hợp của mình thì mình sẽ bỏ tích vào Advanced vì mình chỉ demo nên chưa sử dụng các option này. Hãy đặt tên cho Pool, số lượng bản sao, bật tính năng PG Autoscale Mode và Add as Storage.

Quá trình tạo Ceph Pool bắt đầu.

Vậy là Ceph Pool có tên ceph-vm đã được tạo thành công.

Tôi sẽ làm tương tự để tạo Pool thứ 2 là ceph-ct.

5. Tạo RBD.

RBD (RADOS Block Device) là một công nghệ trong hệ thống Ceph, cho phép lưu trữ và quản lý các block device ảo trên Ceph Storage Cluster. RBD giúp tạo ra các thiết bị block ảo, tương tự như ổ đĩa cứng, và cung cấp tính năng như sao chép dữ liệu, cân bằng tải, tính sẵn sàng và hiệu suất cao.

Với RBD, bạn có thể tạo ra các ổ đĩa ảo RBD và gắn chúng trực tiếp vào máy ảo hoặc máy chủ vật lý. Các ổ đĩa RBD có thể được truy cập và sử dụng như các ổ đĩa thông thường, với khả năng mở rộng và phân phối dữ liệu trên cụm Ceph.

RBD cung cấp tính năng như sao chép dữ liệu (replication) và cân bằng tải (load balancing) bằng cách phân tán dữ liệu trên nhiều OSD (Object Storage Device) trong cụm Ceph. Điều này đảm bảo tính sẵn sàng và độ tin cậy của dữ liệu, cũng như tăng cường hiệu suất và khả năng mở rộng của hệ thống.

RBD là một phần quan trọng của hệ thống lưu trữ Ceph và được sử dụng rộng rãi trong các môi trường ảo hóa và đám mây để cung cấp lưu trữ đáng tin cậy và hiệu suất cao.

Để tạo hoặc chỉnh sửa RBD, bạn hãy vào Datacenter (1) -> Storage (2). Tại đây bạn sẽ thấy 2 RDB tương ứng với 2 Pool đã được tạo ở bước trên.

Nếu bạn muốn tạo một RBD bạn hãy bấm vào Add -> RDB nhé.

Các thuật ngữ trong RBD có ý nghĩa như sau:

  • ID (Identifier): ID là viết tắt của “Identifier” (Nhận dạng). Trong Ceph, ID được sử dụng để xác định một đối tượng duy nhất trong hệ thống, chẳng hạn như ID của OSD (Object Storage Daemon), ID của Pool, ID của Mon (Monitor), ID của OSD Map, v.v. ID thường được gán một cách duy nhất và không thay đổi cho mỗi đối tượng.
  • Pool: Pool (Hồ bơi) trong Ceph là một nhóm các đối tượng dữ liệu có cùng thuộc tính và cấu hình. Mỗi Pool có một tên duy nhất và được sử dụng để phân loại và quản lý dữ liệu. Các Pool trong Ceph được sử dụng để lưu trữ các đối tượng như RBD (RADOS Block Device), CephFS (Ceph File System) hoặc Object Storage. Mỗi Pool có thể có các thiết lập riêng như số lượng bản sao (replica), số lượng PG (Placement Group), cấu hình cache, quyền truy cập, v.v.
  • Nodes: Trong Ceph, “Nodes” (Nút) đề cập đến các máy chủ hoặc nút trong một hệ thống Ceph cluster. Mỗi nút có thể đóng vai trò là một Monitor, OSD hoặc MDS (Metadata Server) tùy thuộc vào cấu hình của cluster. Các nút làm việc cùng nhau để cung cấp dịch vụ lưu trữ phân tán và đảm bảo sao lưu và khả năng mở rộng của hệ thống Ceph. Các nút được quản lý và liên kết với nhau thông qua các thành phần như Monitor, OSD, MDS và cơ chế giao tiếp mạng để xử lý việc lưu trữ và truy xuất dữ liệu.
  • Content: Content (nội dung) trong ngữ cảnh của Ceph thường liên quan đến định dạng và kiểu dữ liệu được lưu trữ trong Ceph cluster. Ví dụ, Ceph có thể được sử dụng để lưu trữ các định dạng dữ liệu như object, block hoặc file. Mỗi định dạng này có mục tiêu sử dụng và ứng dụng khác nhau.
    • “Disk Image” và “Container” là các thành phần trong khái niệm “Content” (Nội dung) của Ceph RBD (RADOS Block Device), được sử dụng để quản lý lưu trữ dữ liệu.
      • Disk Image: Disk Image là một đối tượng ảo trong Ceph RBD, tương đương với một ổ đĩa ảo. Nó thường được sử dụng để lưu trữ dữ liệu của máy ảo (VM) hoặc các ứng dụng khác. Mỗi Disk Image có kích thước và thuộc tính riêng, và nó được lưu trữ và phân tán trên các OSD trong hệ thống Ceph. Disk Image cung cấp khả năng sao lưu, khôi phục và mở rộng dữ liệu trên nhiều OSD.
      • Container: Container là một đơn vị chứa các Disk Image trong Ceph RBD. Một Container chứa một hoặc nhiều Disk Image và các thông tin liên quan như cấu hình, quyền truy cập và thuộc tính. Container giúp tổ chức và quản lý các Disk Image dễ dàng, cho phép việc thực hiện các thao tác như sao chép, di chuyển, xóa, phân quyền trên toàn bộ nhóm Disk Image nằm trong Container đó. Container cũng cho phép áp dụng các thiết lập và quyền truy cập chung cho tất cả các Disk Image bên trong nó.
  • KRBD (Kernel-based RBD): KRBD là một trình điều khiển kernel trong Ceph, cho phép truy cập và quản lý RBD (RADOS Block Device) từ phía kernel của hệ điều hành. KRBD cung cấp khả năng gắn kết và thao tác trực tiếp với RBD từ phía kernel, giúp tối ưu hóa hiệu suất và khả năng tương thích của RBD trong môi trường Ceph.
  • Use Proxmox VE managed hyper-converged ceph pool: Đây là một tùy chọn trong giao diện Proxmox VE khi thêm một RBD (RADOS Block Device). Khi chọn tùy chọn này, Proxmox VE sẽ quản lý ceph pool (nhóm lưu trữ Ceph) dưới dạng một hyper-converged storage, tức là sẽ sử dụng cùng các node trong cluster để lưu trữ và quản lý dữ liệu trong Ceph pool. Tùy chọn này hỗ trợ tích hợp giữa Ceph và Proxmox VE, cho phép quản lý và triển khai các RBD dễ dàng từ giao diện quản lý của Proxmox VE.

Do mình đã có 2 Pool tương ứng với 2 RDB theo mong muốn rồi nên mình không tạo thêm RBD nữa mà thay vào đó mình sẽ chỉnh sửa lại RBD một xíu với mục đích ceph-vm chỉ để lưu virtual machine và ceph-ct chỉ để lưu container:

Tại ceph-ct mình sẽ chỉnh sửa nó.

Tại Content mình chọn Container và đánh dấu vào KRBD.

Đối với ceph-vm tại Content mình chọn Disk image và bỏ chọn KRBD.

Sau khi thiết lập xong bạn có thể thấy tại tất cả các Node đã có các storage của Ceph đã xuất hiện.

Nếu bạn bấm vào ceph-ct bạn sẽ nhìn thấy CT Volume, vì mình thiết lập phân vùng này dành cho CT.

Nếu bạn bấm vào ceph-vm bạn sẽ nhìn thấy VM Disk, vì mình thiết lập phân vùng này dành cho VM.

6. Tạo máy ảo kiểm tra hiệu năng.

Giờ bạn có thể tạo một máy ảo để kiếm tra hiệu năng được rồi. Hãy bấm vào Create VM để tạo một virtual machine mới.

Mình tạo máy ảo ubuntu18.04.

Chọn iso cài đặt ubuntu18.04.

Đang test nên mình để mặc định.

Chọn storage là ceph-vm vì mình đang cài VM chứ không phải CT.

Cài đặt số lượng CPU.

Cài đặt số lượng RAM.

Chọn card mạng wan (vmbr0).

Phần cuối giúp bạn review lại các thiết lập, mình chọn Start after created để sau khi bấm Finish, hệ thống sẽ start VM giúp mình luôn.

Và đây là kết quả, bây giờ mình sẽ cài ubuntu1804 này.

Kết quả sau khi cài xong ubuntu1804.

Để tạo ra một file nặng với kích thước lớn, bạn có thể sử dụng một số công cụ có sẵn trong hệ điều hành Linux. Ví dụ sử dụng lệnh dd, nó cho phép tạo ra một file với kích thước xác định. Bạn có thể sử dụng lệnh sau để tạo ra một file với kích thước 2GB với số lượng 5 file:

dd if=/dev/zero of=/home/testFile bs=2G count=5 status=progress

Kết quả tạo file cho thấy tốc độ ghi của disk là 1.1 GB/s.

Kết quả kiểm tra bằng lệnh sudo fio --name=randread --ioengine=libaio --iodepth=64 --rw=randread --bs=1M --direct=1 --size=10G --numjobs=1 --runtime=60s --time_based --group_reporting --filename=/dev/sda của bạn cho thấy tốc độ đọc (read) đạt khoảng 7490MiB/s (7854MB/s) và IOPS (I/O Operations Per Second) là 7489. Điều này cho thấy tốc độ đọc của bạn đạt gần mức tối đa của mạng 10Gbps. Đây là một kết quả khá tốt và cho thấy hiệu suất ổn định trong việc truyền dữ liệu từ Ceph cluster của bạn thông qua mạng 10Gbps.

$ sudo fio --name=randread --ioengine=libaio --iodepth=64 --rw=randread --bs=1M --direct=1 --size=10G --numjobs=1 --runtime=60s --time_based --group_reporting --filename=/dev/sda
randread: (g=0): rw=randread, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64
fio-3.1
Starting 1 process
Jobs: 1 (f=1): [r(1)][100.0%][r=7468MiB/s,w=0KiB/s][r=7468,w=0 IOPS][eta 00m:00s]
randread: (groupid=0, jobs=1): err= 0: pid=2270: Wed May 24 15:52:46 2023
   read: IOPS=7489, BW=7490MiB/s (7854MB/s)(439GiB/60004msec)
    slat (usec): min=22, max=803, avg=31.63, stdev=13.57
    clat (usec): min=2088, max=23929, avg=8506.72, stdev=3166.65
     lat (usec): min=2117, max=23959, avg=8539.56, stdev=3166.32
    clat percentiles (usec):
     |  1.00th=[ 2343],  5.00th=[ 2540], 10.00th=[ 3752], 20.00th=[ 7111],
     | 30.00th=[ 7963], 40.00th=[ 8225], 50.00th=[ 8455], 60.00th=[ 8586],
     | 70.00th=[ 8848], 80.00th=[ 9765], 90.00th=[13042], 95.00th=[15008],
     | 99.00th=[16909], 99.50th=[17171], 99.90th=[18220], 99.95th=[19006],
     | 99.99th=[20579]
   bw (  MiB/s): min= 7200, max= 7700, per=99.99%, avg=7489.15, stdev=106.34, samples=120
   iops        : min= 7200, max= 7700, avg=7489.17, stdev=106.35, samples=120
  lat (msec)   : 4=10.76%, 10=70.01%, 20=19.22%, 50=0.02%
  cpu          : usr=4.19%, sys=27.38%, ctx=122268, majf=0, minf=16391
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
     issued rwt: total=449413,0,0, short=0,0,0, dropped=0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: bw=7490MiB/s (7854MB/s), 7490MiB/s-7490MiB/s (7854MB/s-7854MB/s), io=439GiB (471GB), run=60004-60004msec

Disk stats (read/write):
  sda: ios=448593/1, merge=0/0, ticks=3561800/0, in_queue=3562092, util=99.85%

Kết quả kiểm tra sudo fio --name=randwrite --ioengine=libaio --iodepth=64 --rw=randread --bs=1M --direct=1 --size=10G --numjobs=1 --runtime=60s --time_based --group_reporting --filename=/dev/sda hiển thị tốc độ ghi (randwrite) của bạn là 7483MiB/s (hay tương đương 7847MB/s). Điều này cho thấy tốc độ ghi của bạn đạt gần mức tối đa của mạng 10Gbps. Đây là một kết quả rất tốt và cho thấy hiệu suất ổn định trong việc ghi dữ liệu vào Ceph cluster thông qua mạng 10Gbps.

sudo fio --name=randwrite --ioengine=libaio --iodepth=64 --rw=randread --bs=1M --direct=1 --size=10G --numjobs=1 --runtime=60s --time_based --group_reporting --filename=/dev/sda
randwrite: (g=0): rw=randread, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=libaio, iodepth=64
fio-3.1
Starting 1 process
Jobs: 1 (f=1): [r(1)][100.0%][r=7616MiB/s,w=0KiB/s][r=7615,w=0 IOPS][eta 00m:00s]
randwrite: (groupid=0, jobs=1): err= 0: pid=2275: Wed May 24 15:57:31 2023
   read: IOPS=7483, BW=7483MiB/s (7847MB/s)(439GiB/60004msec)
    slat (usec): min=22, max=754, avg=31.91, stdev=13.51
    clat (usec): min=2045, max=22698, avg=8513.41, stdev=3056.57
     lat (usec): min=2092, max=22730, avg=8546.56, stdev=3056.38
    clat percentiles (usec):
     |  1.00th=[ 2343],  5.00th=[ 2573], 10.00th=[ 3982], 20.00th=[ 7373],
     | 30.00th=[ 8029], 40.00th=[ 8225], 50.00th=[ 8455], 60.00th=[ 8586],
     | 70.00th=[ 8848], 80.00th=[ 9634], 90.00th=[12780], 95.00th=[14746],
     | 99.00th=[16909], 99.50th=[17433], 99.90th=[18482], 99.95th=[19006],
     | 99.99th=[19792]
   bw (  MiB/s): min= 6744, max= 7816, per=99.99%, avg=7482.25, stdev=167.26, samples=120
   iops        : min= 6744, max= 7816, avg=7482.23, stdev=167.26, samples=120
  lat (msec)   : 4=10.01%, 10=71.77%, 20=18.21%, 50=0.01%
  cpu          : usr=4.57%, sys=27.25%, ctx=116876, majf=0, minf=16396
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
     issued rwt: total=449029,0,0, short=0,0,0, dropped=0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: bw=7483MiB/s (7847MB/s), 7483MiB/s-7483MiB/s (7847MB/s-7847MB/s), io=439GiB (471GB), run=60004-60004msec

Disk stats (read/write):
  sda: ios=448208/1, merge=0/0, ticks=3565432/0, in_queue=3565636, util=99.82%

Hoặc bạn cũng có thể sử dụng lệnh rados -p <pool_name> bench 10 write --no-cleanup VM/CT 200 - Console để test hiệu năng của Pool trực tiếp trên Node.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories