Ceph deep-scrubbed 이란?

beomjin·2024년 12월 14일

ceph를 사용하다보면 scruubed, deep-scrruubed 상태로 health 가 warn으로 노출될 때가 있습니다.

$ sudo ceph -s
  cluster:
    id:     db897dc7-85a1-43ec-81f2-d6d29566e5b7
    health: HEALTH_WARN
            307 pgs not deep-scrubbed in time
            282 pgs not scrubbed in time
 
  services:
    mon: 1 daemons, quorum beta-ceph-01 (age 90m)
    mgr: beta-ceph-01(active, since 90m)
    osd: 3 osds: 3 up (since 40m), 3 in (since 8m)
    rgw: 1 daemon active (1 hosts, 1 zones)
 
  data:
    pools:   12 pools, 353 pgs
    objects: 1.67k objects, 4.4 GiB
    usage:   9.0 GiB used, 291 GiB / 300 GiB avail
    pgs:     353 active+clean
 
  io:
    client:   46 KiB/s rd, 9.4 KiB/s wr, 45 op/s rd, 31 op/s wr

그렇다면 이 scrrubed이 무엇일지 확인해보면 좋을 것 같습니다.
Ref ::

scruubed

Placement Group(PG)의 데이터 일관성을 검사하는 기본검사로 deep-scrubbed 에 비하여 상대적으로 시간소요가 짧습니다.

osd의 버그나, ceph 파일시스템에 대한 오류를 잡습니다.

deep-scrubbed

일반적인 scruubed 작업보다 더 deep한 작업으로 scruubed에서 검사하지않는 객체, 메타데이터까지 검사하며 이에 따라 기본 scruubed보다 시간소요가 큽니다.

제 환경의 deep-scrubbged는 default한 설정으로 들어가 있습니다.

$ sudo ceph config get osd osd_deep_scrub_interval
604800.000000
  • 604800초 (약 1주일)

scruubed job은 어떨까?

$ sudo ceph config get osd osd_scrub_begin_hour
0
$ sudo ceph config get osd osd_scrub_end_hour
0
$ sudo ceph config get osd osd_scrub_begin_week_day
0
$ sudo ceph config get osd osd_scrub_end_week_day
0
  • osd osd_scrub_begin_hour : 시작시간 0으로 되어있어 자정에 시작
  • osd osd_scrub_end_hour: 종료시간 0으로 되어있어 자정에 종료
  • osd_scrub_begin_week_day : 시작요일 0으로 일요일에 시작
  • osd osd_scrub_end_week_day : 종료요일로 0으로 일요일에 종료

deep-scruubed의 작업은 어떻게 결정될까?

$ sudo ceph config get osd osd_deep_scrub_randomize_ratio
0.150000
  • scrrubed 작업의 15%가 deep-scrrubed 작업으로 수행되고있음.
  • 다만 deep-scrrubed의 작업은 높은 I/O를 발생시킴

"* pgs not deep-scrubbed in time"
이 발생하면 어떻게 해야할까?
scrubbed job은 일정 시간안에 수행이 되어야하나, 그 시간안에 수행이되지 못하여 발생한 것으로 수동으로 작업을 진행하거나 혹은 다시 돌게되는 시간까지 모니터링만해도 상관은 없다.

수동으로 진행하는 방법은 아래와같다.

$ sudo ceph health detail
HEALTH_WARN 316 pgs not deep-scrubbed in time; 284 pgs not scrubbed in time
[WRN] PG_NOT_DEEP_SCRUBBED: 316 pgs not deep-scrubbed in time
    pg 12.11 not deep-scrubbed since 2024-11-12T15:44:49.902271+0900
    pg 6.1b not deep-scrubbed since 2024-11-12T16:30:50.284405+0900
    pg 5.18 not deep-scrubbed since 2024-11-12T16:30:28.771097+0900
    pg 4.19 not deep-scrubbed since 2024-11-12T16:03:34.433523+0900
    pg 2.1f not deep-scrubbed since 2024-11-12T16:30:07.137002+0900
    pg 3.1e not deep-scrubbed since 2024-11-12T15:49:34.003736+0900
    pg 7.1a not deep-scrubbed since 2024-11-12T16:29:58.422816+0900
    pg 8.15 not deep-scrubbed since 2024-11-12T16:30:40.518990+0900
...

pg deep-scrrubed 실행

$ sudo ceph pg deep-scrub 6.1b
instructing pg 6.1b on osd.0 to deep-scrub

진행되는 동안 pg에 대한 모니터링은 이렇게 하면 되지않을까 싶습니다.

$ sudo ceph pg 6.1b query
{
    "snap_trimq": "[]",
    "snap_trimq_len": 0,
    "state": "active+clean",
    "epoch": 923,
...
        "stats": {
            "version": "0'0",
            "reported_seq": 668,
            "reported_epoch": 923,
...
            "last_deep_scrub_stamp": "2024-11-12T16:52:16.313918+0900",
            "last_clean_scrub_stamp": "2024-11-12T16:52:16.313918+0900",
            "last_deep_scrub_stamp": "2024-11-12T16:52:16.313918+0900",
...

0개의 댓글