본문 바로가기
Life with AI/Research with AI

[Ceph Storage] CLI 명령어를 사용하여 rebalancing 및 데이터 복구 예시

by 타임-세이버 2023. 3. 6.
반응형

Ceph의 CLI 명령어를 사용하여 rebalancing 및 데이터 복구 예시

 

Ceph은 분산형 파일 시스템으로서 데이터를 분산하고 관리하는 데 최적화된 시스템입니다. 그러나 데이터의 저장 및 관리 과정에서 어떤 문제가 발생할 수 있으며, 그것을 해결하는 것은 매우 중요합니다. 이를 위해 Ceph은 다양한 툴과 유틸리티를 제공합니다. 이번에는 rebalancing을 수행하고 손상된 데이터를 검색하고 복구하는 예시를 다루어보겠습니다.

Rebalancing 수행하기

Rebalancing은 클러스터 내에서 OSD(데이터를 저장하는 데 사용되는 블록 디바이스) 간에 데이터의 분산을 재조정하는 작업입니다. 이는 데이터의 분산을 최적화하여 성능을 향상시키기 위해 수행됩니다. rebalancing을 수행하는 데 사용되는 몇 가지 CLI 명령어는 다음과 같습니다.

ceph osd df

이 명령어는 각 OSD의 용량과 사용량, 사용 가능한 용량 등을 보여줍니다. rebalancing을 수행하려면, 사용 가능한 용량을 기반으로 OSD 가중치를 조정해야 합니다. ceph osd reweight 명령어를 사용하여 OSD의 가중치를 조정할 수 있습니다.

ceph osd crush show

이 명령어는 crush map을 출력합니다. crush map은 클러스터 내의 데이터를 분산하는 데 사용되는 알고리즘으로, OSD 간의 데이터 분산을 조정하는 데 사용됩니다. crush map을 수정하기 위해서는, ceph osd crush set 명령어를 사용하여 crush map을 수정해야 합니다.

ceph osd reweight

이 명령어는 특정 OSD의 가중치를 조정합니다. 이를 통해, 데이터의 분산을 재조정할 수 있습니다.

ceph osd crush reweight-all

이 명령어는 모든 OSD의 가중치를 조정하여, 데이터의 분산을 재조정합니다.

손상된 데이터 검색 및 복구

데이터 손상은 클러스터 내의 OSD, PG, 혹은 CRUSH map에 문제가 생겼을 때 발생합니다. Ceph은 다양한 유틸리티를 제공하여 손상된 데이터를 검색하고 복구할 수 있습니다.

ceph health

이 명령어는 현재 클러스터의 건강 상태를 보여줍니다. 건강 상태가 "HEALTH_OK"가 아닌 경우, 문제가 발생한 것입니다.

ceph pg repair

이 명령어는 모든 PG를 검사하고 손상된 데이터를 복구합니다. 이 명령어는 모든 PG를 검사하므로, 대규모 클러스터에서는 실행 시간이 오래 걸릴 수 있습니다.

ceph pg ls inconsistent

이 명령어는 일부 PG가 불일치 상태인지 여부를 나타내는 목록을 출력합니다. 불일치 상태란, PG의 복제본 간에 데이터가 일치하지 않는 상태를 의미합니다.

ceph pg repair <pgid>

이 명령어는 특정 PG의 데이터를 복구합니다. <pgid>는 복구하려는 PG의 ID를 나타냅니다.

ceph pg ls repair

이 명령어는 현재 복구 중인 PG의 목록을 출력합니다. 복구가 완료되면, 해당 PG는 "active+clean" 상태가 됩니다.

ceph pg scrub

이 명령어는 모든 PG를 검사하여 손상된 데이터를 복구합니다. 이 명령어는 ceph pg repair 명령어와 함께 사용되어, 손상된 데이터를 최대한 빨리 복구할 수 있습니다.

ceph pg deep-scrub

이 명령어는 ceph pg scrub 명령어와 유사하지만, 보다 깊은 검사를 수행합니다. 이 명령어는 데이터 손상을 복구하기 위해 최종 수단으로 사용되어야 합니다.

예시

다음은 rebalancing 및 데이터 복구 예시입니다.

Rebalancing 예시

$ ceph osd df
ID  WEIGHT  REWEIGHT        SIZE    AVAIL   %USE    VAR     PGS
 0   0.1263    0.1263     5.8 TiB  2.2 TiB  62.67  1.0255    58
 1   0.1263    0.1263     5.8 TiB  2.2 TiB  62.67  1.0255    58
 2   0.1263    0.1263     5.8 TiB  2.2 TiB  62.67  1.0255    58
...
$ ceph osd crush show
...
$ ceph osd reweight 2 0.2
$ ceph osd crush reweight-all

이 예시에서는, ceph osd df 명령어를 사용하여 모든 OSD의 사용 가능한 용량을 확인합니다. 그리고, ceph osd reweight 명령어를 사용하여 2번 OSD의 가중치를 0.2로 조정합니다. 마지막으로, ceph osd crush reweight-all 명령어를 사용하여 모든 OSD의 가중치를 조정하여 데이터의 분산을 재조정합니다.

데이터 복구 예시

$ ceph health
HEALTH_WARN 1/3 in osds

이 예시에서는 ceph health 명령어를 사용하여 클러스터의 상태를 확인합니다. "HEALTH_WARN" 상태가 표시되고, "1/3 in osds" 메시지가 표시됩니다. 이는 OSD 중 하나가 중단되어 데이터의 손상이 발생했음을 나타냅니다.

$ ceph osd tree

다음으로, ceph osd tree 명령어를 사용하여 OSD의 상태를 확인합니다. 중단된 OSD는 "down" 상태로 표시됩니다.

$ ceph osd find <osd-id>
$ ceph pg ls <osd-id>

이제 ceph osd find 명령어를 사용하여 중단된 OSD의 상세 정보를 확인하고, ceph pg ls 명령어를 사용하여 해당 OSD에서 관리하는 모든 PG의 목록을 확인합니다.

$ ceph pg ls inconsistent

그런 다음 ceph pg ls inconsistent 명령어를 사용하여 불일치한 PG가 있는지 확인합니다. 불일치한 PG가 있다면, 해당 PG의 데이터를 복구합니다.

$ ceph pg scrub​

마지막으로, ceph pg scrub 명령어를 사용하여 모든 PG를 검사하고, 손상된 데이터를 복구합니다.

이렇게 하면, OSD의 중단으로 인한 데이터 손상을 신속하게 복구할 수 있습니다. 그러나, 대규모 클러스터의 경우, 데이터 손상을 예방하기 위해 일정한 간격으로 rebalancing을 수행하는 것이 좋습니다.

 

Rebalancing은 클러스터의 데이터 분산을 최적화하여 전체 시스템의 성능을 향상시키는 프로세스입니다. Ceph는 다양한 rebalancing 기능을 제공합니다.

$ ceph osd pool set <pool-name> pg_autoscale_mode on

먼저, ceph osd pool set 명령어를 사용하여 pool의 자동 스케일링 모드를 활성화합니다. 이 기능을 사용하면, 데이터의 양에 따라 PG 수를 자동으로 조정하여 데이터 분산을 최적화할 수 있습니다.

$ ceph osd pool autoscale-status

다음으로, ceph osd pool autoscale-status 명령어를 사용하여 자동 스케일링 모드가 적용된 pool의 상태를 확인합니다.

$ ceph osd reweight <osd-id> <weight>

또한, ceph osd reweight 명령어를 사용하여 OSD의 가중치를 조정하여 데이터 분산을 조절할 수 있습니다. 가중치가 높은 OSD는 더 많은 데이터를 저장하고, 가중치가 낮은 OSD는 더 적은 데이터를 저장합니다.

$ ceph balancer status

또한, ceph balancer 명령어를 사용하여 클러스터의 rebalancing 상태를 모니터링할 수 있습니다.

$ ceph balancer optimize <plan>

마지막으로, ceph balancer optimize 명령어를 사용하여 클러스터의 데이터 분산을 최적화하는 rebalancing 계획을 생성합니다. 생성된 계획을 검토한 후, ceph balancer optimize 명령어를 사용하여 계획을 실행합니다.

이렇게 하면, Ceph의 다양한 rebalancing 기능을 사용하여 클러스터의 데이터 분산을 최적화하고, 전체 시스템의 성능을 향상시킬 수 있습니다.

 

위에서 소개한 rebalancing 기능 외에도, Ceph는 다양한 tool과 utility를 제공하여 클러스터의 관리 및 모니터링을 용이하게 합니다.

$ ceph -s

ceph -s 명령어를 사용하여 클러스터의 상태를 간단하게 확인할 수 있습니다. 현재 상태가 "HEALTH_OK"인지, 모든 OSD가 정상적으로 동작하는지, PG 수가 적절한지 등을 확인할 수 있습니다.

$ ceph df

ceph df 명령어를 사용하여 클러스터의 용량 사용량과 여유 공간을 확인할 수 있습니다. 어떤 pool이 얼마나 많은 용량을 차지하는지, 어떤 OSD가 가장 많은 용량을 가지고 있는지 등을 확인할 수 있습니다.

$ ceph osd perf

ceph osd perf 명령어를 사용하여 각 OSD의 성능을 모니터링할 수 있습니다. 각 OSD에서 처리한 요청의 수, 처리 시간, 오류 수 등을 확인할 수 있습니다.

$ ceph osd pool get <pool-name> <key>

ceph osd pool get 명령어를 사용하여 pool의 설정 값을 확인할 수 있습니다. 예를 들어, pool의 크기, 데이터 복제 방식, PG 수, erasure coding 설정 등을 확인할 수 있습니다.

$ ceph tell osd.* injectargs '--debug_osd 10'

마지막으로, ceph tell 명령어를 사용하여 특정 OSD에 대한 디버그 메시지를 활성화할 수 있습니다. 이 기능을 사용하면, 특정 OSD에서 발생하는 문제를 식별하고, 문제를 해결하는 데 도움이 됩니다.

이러한 tool과 utility를 사용하여 Ceph 클러스터를 관리하고 모니터링함으로써, 전체 시스템의 성능을 최적화하고 데이터의 안정성을 보장할 수 있습니다.

 

또한, Ceph는 데이터 손상과 같은 문제를 방지하기 위한 여러 가지 보안 기능을 제공합니다.

$ ceph osd pool set <pool-name> checksum <on/off>

ceph osd pool set 명령어를 사용하여 풀의 checksum 설정을 변경할 수 있습니다. checksum을 켜면, 클라이언트가 데이터를 쓰거나 읽을 때 데이터의 checksum을 계산하여 손상된 데이터를 감지할 수 있습니다.

$ ceph osd pool set <pool-name> nodeep-scrub <on/off>

ceph osd pool set 명령어를 사용하여 풀의 nodeep-scrub 설정을 변경할 수 있습니다. nodeep-scrub을 켜면, OSD가 데이터를 스크럽할 때 보다 깊은 검증을 수행하여 더 많은 손상된 데이터를 감지할 수 있습니다.

$ ceph pg ls-by-pool <pool-name> $ ceph pg scrub <pg-id>

ceph pg 명령어를 사용하여 PG를 검사할 수 있습니다. ls-by-pool 명령어를 사용하여 특정 풀에 속한 PG 목록을 확인할 수 있고, scrub 명령어를 사용하여 특정 PG를 검사할 수 있습니다. 검사를 통해 데이터가 손상되었는지 여부를 확인할 수 있습니다.

$ ceph osd repair <osd-id> <pg-id> [--force]

ceph osd repair 명령어를 사용하여 PG에서 데이터가 손상되었을 때, 해당 PG를 복구할 수 있습니다. 이 명령어는 해당 OSD에서 오류가 발생한 PG를 찾아 복구를 시도합니다. --force 옵션을 사용하여 복구를 강제할 수 있습니다.

이러한 보안 기능을 사용하여 데이터의 무결성을 보장하고, 데이터 손상을 방지할 수 있습니다.

 

Ceph는 높은 가용성과 확장성을 갖는 분산 스토리지 시스템입니다. 이 글에서는 Ceph의 핵심 개념과 구성 요소, CLI 명령어를 소개하였습니다. 이를 통해 Ceph를 구성하고 운영할 수 있는 기본적인 지식을 습득할 수 있습니다.

 

Ceph는 커뮤니티에서 지속적으로 개발되고 있으며, 새로운 기능과 개선된 성능을 제공합니다. 이러한 특징들은 Ceph를 효과적으로 활용하여 비즈니스 요구사항을 충족시키는데 도움이 됩니다.

 

더 많은 정보와 자세한 내용은 Ceph 공식 문서를 참조하시기 바랍니다.

반응형

댓글