Logo

Personal Ops Runbook

Personal runbook covering infrastructure operations for Cloud, Kubernetes, OpenStack, and Ceph environments. Includes deployment and teardown procedures, node management, cluster monitoring setup, and incident response workflows compiled from day-to-day operational work. Intended strictly for personal reference — configurations and scripts are environment-specific and not guaranteed to work as-is elsewhere.

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.

image

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/