Acting Set và Up Set trong Ceph

1. Giới thiệu

Ceph là một hệ thống lưu trữ phân tán mạnh mẽ, cung cấp khả năng mở rộng linh hoạt và tự động khắc phục lỗi. Trong quá trình vận hành Ceph, có hai khái niệm quan trọng liên quan đến quản lý dữ liệu: Acting SetUp Set. Chúng ảnh hưởng trực tiếp đến cách dữ liệu được phân phối và phục hồi khi có lỗi xảy ra.

Bài viết này sẽ giải thích chi tiết về Acting SetUp Set, cách Ceph sử dụng chúng và ý nghĩa của chúng trong việc bảo đảm tính toàn vẹn dữ liệu. Chúng ta cũng sẽ có một số ví dụ cụ thể để minh họa.

2. Định nghĩa “Acting Set” và “Up Set”

2.1. Acting Set là gì?

Acting Set là tập hợp các OSD (Object Storage Daemon) thực sự đang lưu trữ và phục vụ dữ liệu cho một Placement Group (PG) tại một thời điểm nhất định. Nếu một OSD trong nhóm này gặp sự cố, dữ liệu có thể tạm thời không truy cập được hoặc hệ thống sẽ tìm cách khôi phục bằng cách lấy dữ liệu từ các OSD khác.

Ví dụ: Giả sử pool của bạn có replication size = 2, tức là mỗi object có 2 bản sao. Một PG có thể có acting set là [2, 5], nghĩa là dữ liệu thực tế của PG này được lưu trên hai OSD là OSD.2 và OSD.5.

2.2. Up Set là gì?

Up Set là danh sách các OSD được Ceph lựa chọn để phục vụ PG theo thuật toán CRUSH. Đây là danh sách lý tưởng mà Ceph muốn sử dụng nếu không có lỗi nào xảy ra.

Nếu mọi thứ hoạt động bình thường, Up Set sẽ giống với Acting Set. Tuy nhiên, nếu một hoặc nhiều OSD trong Up Set bị down, Ceph có thể chọn một OSD khác thay thế để đảm bảo PG vẫn có thể hoạt động và khi đó Acting Set có thể khác Up Set.

Ví dụ: Nếu Up Set của PG là [2, 5] nhưng OSD.5 bị lỗi, Ceph có thể chọn OSD.7 thay thế, lúc này Acting Set có thể là [2, 7].

3. So sánh “Acting Set” và “Up Set”

Đặc điểmActing SetUp Set
Định nghĩaDanh sách các OSD thực sự đang lưu trữ dữ liệu của PGDanh sách các OSD mà Ceph chọn để phục vụ PG
Khi nào thay đổi?Khi một OSD bị lỗi hoặc có sự kiện tái cân bằng dữ liệuKhi thuật toán CRUSH chọn OSD mới hoặc khi có thay đổi về cluster
Ảnh hưởng khi thay đổiCó thể dẫn đến mất dữ liệu tạm thời nếu không đủ bản saoCó thể kích hoạt cơ chế backfill để cân bằng dữ liệu
Quan hệ với CRUSHKhông thay đổi theo CRUSHDựa trên thuật toán CRUSH để chọn

4. Ví dụ minh họa chi tiết

Trường hợp 1: Acting Set và Up Set giống nhau

Giả sử bạn có một pool với size = 2 (mỗi object có 2 bản sao) và PG 2.5 được phân bổ như sau:

PGID   STATE               ACTING  UP
2.5    active+clean        [2, 5]  [2, 5]
  • Acting Set: [2, 5] (Dữ liệu đang được lưu trên OSD.2 và OSD.5)
  • Up Set: [2, 5] (Thuật toán CRUSH cũng chọn hai OSD này)
  • Trạng thái: Bình thường, không có lỗi.

Trường hợp 2: Một OSD bị down, Acting Set thay đổi

Giả sử OSD.5 bị down, Ceph phải chọn một OSD khác để thay thế, dẫn đến:

PGID   STATE                    ACTING  UP
2.5    active+degraded+undersized  [2, 7]  [2, 5]
  • Up Set: [2, 5] (Thuật toán CRUSH vẫn chọn OSD.2 và OSD.5)
  • Acting Set: [2, 7] (Do OSD.5 bị down, Ceph chọn OSD.7 thay thế)
  • Trạng thái: degraded (OSD.7 chưa có đủ dữ liệu để khôi phục hoàn toàn bản sao)

Trường hợp 3: OSD bị down quá lâu và Ceph thực hiện backfill

Nếu OSD.5 bị down trong thời gian dài, Ceph sẽ kích hoạt backfill để sao chép dữ liệu từ OSD.2 sang OSD.7. Sau khi backfill hoàn tất, acting set sẽ ổn định thành:

PGID   STATE               ACTING  UP
2.5    active+clean        [2, 7]  [2, 7]
  • Acting Set: [2, 7] (Dữ liệu đã được sao chép đủ trên hai OSD này)
  • Up Set: [2, 7] (Ceph cập nhật lại danh sách OSD hợp lệ)
  • Trạng thái: clean (Hệ thống đã cân bằng trở lại)

Trong output của ceph pg dump pgs_brief, các cột UP, UP_PRIMARY, ACTINGACTING_PRIMARY có ý nghĩa như sau:

CộtÝ nghĩa
UPDanh sách OSD hiện đang đảm nhiệm vai trò lưu trữ dữ liệu của Placement Group (PG).
UP_PRIMARYOSD chính (primary OSD) trong danh sách UP, chịu trách nhiệm xử lý các I/O chính của PG.
ACTINGDanh sách OSD đang thực sự tham gia vào quá trình phục vụ dữ liệu cho PG.
ACTING_PRIMARYOSD chính (primary OSD) trong danh sách ACTING, đóng vai trò điều phối các replica.

🔍 Đây là một ví dụ

PG_STAT  STATE         UP       UP_PRIMARY  ACTING   ACTING_PRIMARY
2.1b     active+clean  [19,30]          19  [19,30]              19
2.1a     active+clean  [47,32]          47  [47,32]              47
2.19     active+clean   [6,38]           6   [6,38]               6
  • PG 2.1b:
    • UP = [19,30]: PG này đang có dữ liệu trên OSD 19 và OSD 30.
    • UP_PRIMARY = 19: OSD 19 là primary trong danh sách UP.
    • ACTING = [19,30]: Cả OSD 19 và 30 đang tham gia vào quá trình phục vụ dữ liệu.
    • ACTING_PRIMARY = 19: OSD 19 là primary trong danh sách ACTING.

5. Khi nào UPACTING khác nhau?

  • Trong điều kiện bình thường, UPACTING giống nhau.
  • Khi một OSD bị lỗi hoặc bị mark out, UP có thể khác ACTING. Ví dụ: PG_STAT STATE UP UP_PRIMARY ACTING ACTING_PRIMARY 2.5 active+remapped [4,7] 4 [3,7] 3
    • UP = [4,7]: Ceph muốn PG này chạy trên OSD 4 và 7.
    • ACTING = [3,7]: Nhưng thực tế PG đang chạy trên OSD 3 và 7 do OSD 4 có vấn đề.
    • UP_PRIMARY = 4, nhưng OSD 4 không hoạt động, nên ACTING_PRIMARY = 3.

6. Khi nào nên chú ý đến UP vs ACTING?

  • Nếu UPACTING khác nhau → có thể có OSD bị lỗi hoặc đang trong quá trình recovery.
  • Nếu UP_PRIMARYACTING_PRIMARY khác nhau → OSD Primary có thể đã bị thay đổi do lỗi hoặc down.

🔹 UP set 🟢 → Danh sách các OSD Ceph dự kiến sẽ lưu trữ PG theo CRUSH map.
🔹 ACTING set 🔵 → Danh sách các OSD đang thực sự lưu trữ PG tại thời điểm hiện tại.

Trạng thái bình thường:

  • Khi cluster khỏe mạnh, UPACTING giống nhau.
  • Điều này có nghĩa là dữ liệu đang được lưu trữ đúng theo dự kiến của CRUSH map.

⚠️ Khi có sự cố:

  • Nếu một OSD trong UP set bị lỗi, Ceph sẽ chọn một OSD khác để tạm thời thay thế trong ACTING set.
  • Khi đó, UPACTING vì cluster đang cố gắng đảm bảo đủ số lượng bản sao bằng cách dùng OSD khác.

🔄 Sau khi Recovery xong:

  • Ceph sẽ phục hồi dữ liệu về đúng các OSD theo CRUSH map.
  • Khi tất cả dữ liệu được khôi phục, UPACTING lại trở về giống nhau.

💡 Tóm lại:

  • UP ≠ ACTING → Có OSD lỗi hoặc đang recovery.
  • UP = ACTING → Cluster đã ổn định, không còn OSD lỗi.

5. Kết luận

  • Up Set là danh sách các OSD mà Ceph mong muốn sử dụng.
  • Acting Set là danh sách các OSD thực tế đang phục vụ dữ liệu.
  • Khi có OSD bị down, Acting Set có thể khác Up Set, dẫn đến trạng thái degraded.
  • Nếu một OSD bị down quá lâu, Ceph sẽ khôi phục dữ liệu qua quá trình backfill và cập nhật lại Acting Set.

Việc hiểu rõ Acting SetUp Set giúp bạn chẩn đoán lỗi nhanh chóng và quản lý cluster Ceph hiệu quả hơn. Nếu bạn thấy trạng thái undersized hoặc degraded, hãy kiểm tra acting set để biết OSD nào đang gặp sự cố.

Hy vọng bài viết này giúp bạn hiểu rõ hơn về cách Ceph quản lý dữ liệu và phản ứng khi có lỗi xảy ra! Nếu bạn có bất kỳ câu hỏi hoặc muốn bổ sung thêm thông tin, hãy để lại bình luận nhé! 🚀

Bài viết gần đây

spot_img

Related Stories

Leave A Reply

Please enter your comment!
Please enter your name here

Đăng ký nhận thông tin bài viết qua email