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 Set và Up 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 Set và Up 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ểm | Acting Set | Up Set |
---|---|---|
Định nghĩa | Danh sách các OSD thực sự đang lưu trữ dữ liệu của PG | Danh 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ệu | Khi thuật toán CRUSH chọn OSD mới hoặc khi có thay đổi về cluster |
Ảnh hưởng khi thay đổi | Có thể dẫn đến mất dữ liệu tạm thời nếu không đủ bản sao | Có thể kích hoạt cơ chế backfill để cân bằng dữ liệu |
Quan hệ với CRUSH | Không thay đổi theo CRUSH | Dự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, ACTING và ACTING_PRIMARY có ý nghĩa như sau:
Cột | Ý nghĩa |
---|---|
UP | Danh sách OSD hiện đang đảm nhiệm vai trò lưu trữ dữ liệu của Placement Group (PG). |
UP_PRIMARY | OSD 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. |
ACTING | Danh sách OSD đang thực sự tham gia vào quá trình phục vụ dữ liệu cho PG. |
ACTING_PRIMARY | OSD 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 UP
và ACTING
khác nhau?
- Trong điều kiện bình thường,
UP
vàACTING
giống nhau. - Khi một OSD bị lỗi hoặc bị mark out,
UP
có thể khácACTING
. 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ênACTING_PRIMARY = 3
.
6. Khi nào nên chú ý đến UP
vs ACTING
?
- Nếu
UP
vàACTING
khác nhau → có thể có OSD bị lỗi hoặc đang trong quá trình recovery. - Nếu
UP_PRIMARY
vàACTING_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, UP và ACTING 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 đó, UP ≠ ACTING 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, UP và ACTING 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 Set và Up 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é! 🚀