[Ceph Storage] 손실된 데이터를 CLI를 사용하여 복구하는 방법
Ceph는 분산 파일 시스템이며, 여러 개의 데이터 복제본을 유지함으로써 데이터의 안정성과 가용성을 보장합니다. 하지만 데이터 손실은 언제든 일어날 수 있으므로, 손상된 데이터를 복구해야 하는 경우가 발생할 수 있습니다. 이 글에서는 Ceph CLI(Command-Line Interface)를 사용하여 손실된 데이터를 복구하는 방법에 대해 설명합니다.
1. 손상된 오브젝트 식별
Ceph 클러스터에서 오브젝트가 손상되었다는 것을 알리는 방법 중 하나는 'pg repair' 메시지를 보는 것입니다. 이 메시지는 손상된 오브젝트가 있는 placement group(PG)에서 발생합니다. 손상된 오브젝트를 식별하려면 다음 CLI 명령을 실행하십시오.
ceph pg ls | grep repair
이 명령은 모든 placement group의 목록을 가져와서 'repair'라는 단어가 포함된 pg를 찾습니다. pg 번호를 기록해 두십시오. 예를 들어, '0.0c'는 손상된 오브젝트가 있는 pg입니다.
2. 손상된 오브젝트 상세 정보 얻기
pg 번호를 얻은 후에는 다음 명령을 사용하여 손상된 오브젝트의 자세한 정보를 얻을 수 있습니다.
ceph pg map {PG_NUMBER}
이 명령은 손상된 오브젝트가 있는 PG에 대한 매핑 정보를 제공합니다. 명령의 출력은 다음과 같습니다.
osdmap e174 pg 0.0c (0.0c) -> up [1,2,3] acting [1,2,3]
이 출력에서 "up [1,2,3]"은 PG의 복제본이 저장된 OSD(Open Storage Device)의 ID입니다. "acting [1,2,3]"은 PG의 작동 복제본을 나타내며, 이는 클러스터의 상태와 일치합니다.
3. 손상된 오브젝트 복사본 찾기
복구를 시작하기 전에, 어떤 OSD에서 손상된 오브젝트의 복사본이 유지되고 있는지 확인해야 합니다. 복구를 시작하기 전에, 어떤 OSD에서 손상된 오브젝트의 복사본이 유지되고 있는지 확인해야 합니다. 다음 명령을 사용하여 손상된 오브젝트의 모든 복사본을 가진 OSD 목록을 얻을 수 있습니다.
ceph osd map {POOL_NAME} {OBJECT_NAME}
POOL_NAME은 손상된 오브젝트가 저장된 풀(pool)의 이름이고, OBJECT_NAME은 손상된 오브젝트의 이름입니다. 예를 들어, 다음 명령은 'rbd' 풀에서 'rbd/image1' 오브젝트의 복사본을 가진 OSD 목록을 출력합니다.
ceph osd map rbd rbd/image1
출력은 다음과 같습니다.
osdmap e174 pool 'rbd' (7) object 'rbd/image1' -> pg 7.78dc (7.78dc) -> up [2,1,0] acting [2,1,0]
위의 출력에서 "up [2,1,0]"은 복사본이 유지되는 OSD의 ID입니다. 이 정보는 이후 단계에서 사용됩니다.
4. 오브젝트 복구
이제 복구를 시작할 수 있습니다. 다음 CLI 명령을 사용하여 오브젝트를 복구합니다.
rados -p {POOL_NAME} get {OBJECT_NAME} {LOCAL_FILE}
이 명령은 오브젝트를 로컬 파일로 복사합니다. 이때 {LOCAL_FILE}은 로컬 파일 시스템의 경로와 파일 이름입니다. 예를 들어, 다음 명령은 'rbd' 풀에서 'rbd/image1' 오브젝트를 '/tmp/image1'이라는 로컬 파일로 복사합니다.
rados -p rbd get rbd/image1 /tmp/image1
이 명령은 로컬 파일 시스템에 '/tmp/image1'이라는 파일을 만들고, 이 파일에 'rbd/image1' 오브젝트의 데이터를 복사합니다. 이제 로컬 파일 시스템의 데이터를 사용하여 복사본을 다시 만들 수 있습니다.
5. 복사본 작성
복사본을 작성하기 위해 다음 명령을 실행합니다.
rados -p {POOL_NAME} put {OBJECT_NAME} {LOCAL_FILE}
이 명령은 로컬 파일을 Ceph 클러스터에 저장된 오브젝트로 복사합니다. 예를 들어, 다음 명령은 '/tmp/image1' 로컬 파일을 'rbd' 풀에 'rbd/image1' 이름으로 복사합니다.
rados -p rbd put rbd/image1 /tmp/image1
이제 오브젝트가 복구되었습니다!
결론
이 글에서는 Ceph CLI를 사용하여 손상된 데이터를 복구하는 방법에 대해 설명했습니다. 이 단계별 가이드를 따르면 손상된 데이터를 복구하는 데 필요한 모든 단계를 이해하고 수행할 수 있습니다. 이를 통해 Ceph 클러스터의 데이터 안정성과 가용성을 유지할 수 있습니다.