Saturday, January 18, 2025

Lỗi pgs not deep-scrubbed trong Ceph

-

1. Mô tả vấn đề.

Đây là một cảnh báo phổ biến khi các Placement Groups (PGs) chưa được thực hiện deep-scrub (kiểm tra checksum dữ liệu) trong thời gian quy định.

HEALTH_WARN 1161 pgs not deep-scrubbed in time là một lỗi bạn có thể xem được bằng lệnh ceph health detail trong Ceph:

HEALTH_WARN 1161 pgs not deep-scrubbed in time
[WRN] PG_NOT_DEEP_SCRUBBED: 1161 pgs not deep-scrubbed in time
pg 86.fff not deep-scrubbed since 2024-08-21T02:35:25.733187+0000
  • PGs not deep-scrubbed in time: Cảnh báo rằng có 1161 PGs chưa được kiểm tra checksum dữ liệu trong thời gian quy định.
  • pg 86.fff: PG cụ thể đã không được deep-scrub kể từ 2024-08-21.

Mặc dù đã thay đổi tham số osd_deep_scrub_interval từ mặc định 1 tuần (604800 giây) thành 2 tuần (1209600 giây), nhưng hệ thống vẫn báo cảnh báo.

2. Kiểm tra tham số cấu hình.

Để xem thông tin về tham số osd_deep_scrub_interval:

ceph config help osd_deep_scrub_interval

Kết quả:

osd_deep_scrub_interval - Deep scrub each PG (i.e., verify data checksums) at least this often
(float, advanced)
Default: 604800.000000
Can update at runtime: true
Services: [osd]
  • Mặc định: 604800 giây (1 tuần).
  • Có thể thay đổi tại runtime: true.
  • Áp dụng cho dịch vụ: [osd].

3. Phân tích vấn đề.

Thay đổi cấu hình.

ceph config set osd osd_deep_scrub_interval 1209600

Nhưng hệ thống vẫn cảnh báo, dù giá trị deep_scrub_stamp (thời gian của lần deep-scrub gần nhất) nhỏ hơn khoảng thời gian quy định 2 tuần.

4. Nguyên nhân.

Cảnh báo không chỉ dựa vào cấu hình OSD (osd_deep_scrub_interval của OSD) mà còn phụ thuộc vào cấu hình của MGR (osd_deep_scrub_interval của MGR). MGR sử dụng công thức để xác định thời gian trước khi cảnh báo:

(mon_warn_pg_not_deep_scrubbed_ratio * deep_scrub_interval) + deep_scrub_interval
  • mon_warn_pg_not_deep_scrubbed_ratio: Mặc định là 0.75 (75%).
  • deep_scrub_interval: Thời gian quy định cho mỗi lần deep-scrub.

Ví dụ với cấu hình mặc định (1 tuần = 7 ngày):

(0.75 * 7 ngày) + 7 ngày = 12.25 ngày

=> Nếu PG chưa được deep-scrub trong vòng 12.25 ngày, hệ thống sẽ cảnh báo.

5. Giải pháp khắc phục.

Có hai cách để khắc phục vấn đề này:

Cách 1: Thay đổi cấu hình mặc định.

Cập nhật giá trị osd_deep_scrub_interval cho cả OSD và MGR:

# Thay đổi global
ceph config set global osd_deep_scrub_interval 1209600

# Hoặc thay đổi cụ thể cho OSD và MGR
ceph config set osd osd_deep_scrub_interval 1209600
ceph config set mgr osd_deep_scrub_interval 1209600
  • Ý nghĩa:
    • OSD sẽ có 2 tuần để hoàn thành deep-scrub tất cả PG.
    • MGR cũng sẽ sử dụng khoảng thời gian 2 tuần (thay vì mặc định 12.25 ngày) trước khi đưa ra cảnh báo.

Cách 2: Cấu hình riêng từng pool.

Đặt khoảng thời gian deep_scrub_interval riêng cho từng pool, phù hợp với đặc điểm phần cứng (SSD hoặc HDD):

ceph osd pool set <POOL> deep_scrub_interval 1209600
  • Ưu điểm:
    • Pool dùng SSD có thể cần thời gian ngắn hơn.
    • Pool dùng HDD (chậm hơn) có thể cần thời gian dài hơn.

Lưu ý

Sự khác biệt giữa OSD và MGR:

  • OSD: Điều chỉnh thời gian để thực hiện deep-scrub trên từng PG.
  • MGR: Kiểm tra dấu thời gian (deep_scrub_stamp) của lần deep-scrub gần nhất và so sánh với công thức (0.75 * interval) + interval.

Thực hiện kiểm tra:

  • Xem thời gian deep-scrub gần nhất:
ceph pg dump | grep deep_scrub_stamp

Kiểm tra trạng thái cảnh báo chi tiết:

ceph health detail

Kết luận

  • Để loại bỏ cảnh báo “PGs not deep-scrubbed in time”, bạn cần đồng bộ cấu hình osd_deep_scrub_interval giữa OSDMGR.
  • Nên cân nhắc tùy chỉnh cấu hình riêng theo từng pool để tối ưu hóa hiệu suất.

Tham khảo https://heiterbiswolkig.blogs.nde.ag/2024/09/06/pgs-not-deep-scrubbed-in-time/

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories