4.8. Ceph 모니터 저장소 복구
Ceph 모니터는 클러스터 맵을 LevelDB와 같은 키-값 저장소에 저장합니다. 모니터에서 저장소가 손상되면 모니터가 예기치 않게 종료되고 다시 시작되지 않습니다. Ceph 로그에 다음과 같은 오류가 포함될 수 있습니다.
Corruption: error in middle of record Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
Corruption: error in middle of record
Corruption: 1 missing files; e.g.: /var/lib/ceph/mon/mon.0/store.db/1234567.ldb
프로덕션 환경 Red Hat Ceph Storage 클러스터에서는 Ceph 모니터를 3개 이상 사용하므로 오류가 발생할 경우 다른 모니터로 교체할 수 있습니다. 그러나 특정 상황에서 모든 Ceph 모니터가 저장소가 손상될 수 있습니다. 예를 들어 Ceph Monitor 노드의 디스크 또는 파일 시스템 설정이 잘못 구성된 경우 정전이 발생하면 기본 파일 시스템이 손상될 수 있습니다.
모든 Ceph 모니터에 손상이 있는 경우 ceph-monstore-tool 및
이라는 유틸리티를 사용하여 OSD 노드에 저장된 정보로 복구할 수 있습니다.
ceph-objectstore-tool
다음 절차는 다음 정보를 복구할 수 없습니다.
- 메타데이터 데몬 서버(MDS) 인증 키 및 맵
배치 그룹 설정:
-
ceph pg set_full_ratio
명령을 사용하여 전체비율
설정 -
ceph pg set_near
full_ratio 명령을 사용하여 설정된
거의 전체 비율
-
이전 백업에서 Ceph Monitor 저장소를 복원하지 마십시오. 다음 단계를 사용하여 현재 클러스터 상태에서 Ceph Monitor 저장소를 다시 빌드하고 해당 저장소에서 복원합니다.
4.8.1. BlueStore를 사용할 때 Ceph 모니터 저장소 복구 링크 복사링크가 클립보드에 복사되었습니다!
모든 Ceph 모니터에서 Ceph 모니터 저장소가 손상되어 BlueStore 백엔드를 사용하는 경우 다음 절차를 따르십시오.
컨테이너화된 환경에서 이 방법을 사용하려면 먼저 Ceph 리포지토리를 연결하고 컨테이너화되지 않은 Ceph 모니터에 복원해야 합니다.
이 절차에서는 데이터 손실이 발생할 수 있습니다. 이 절차의 단계에 대해 확신이 없으면 Red Hat 기술 지원에 문의하십시오. 복구 프로세스에 대한 지원이 제공됩니다.
사전 요구 사항
베어 메탈 배포
-
rsync
및ceph-test
패키지가 설치됩니다.
-
컨테이너 배포
- 모든 OSD 컨테이너가 중지됩니다.
- 역할에 따라 Ceph 노드에서 Ceph 리포지토리를 활성화합니다.
-
ceph-test
및rsync
패키지는 OSD 및 Monitor 노드에 설치됩니다. -
ceph-mon
패키지는 Monitor 노드에 설치됩니다. -
ceph-osd
패키지는 OSD 노드에 설치됩니다.
절차
컨테이너에서 Ceph를 사용하는 경우 Ceph 데이터가 있는 모든 디스크를 임시 위치에 마운트합니다. 모든 OSD 노드에 대해 이 단계를 반복합니다.
데이터 파티션을 나열합니다. 장치를 설정하는 데 사용한 유틸리티에 따라
ceph-volume
또는 ceph-diskceph-volume lvm list
[root@osd ~]# ceph-volume lvm list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 또는
ceph-disk list
[root@osd ~]# ceph-disk list
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 임시 위치에 데이터 파티션을 마운트합니다.
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
Copy to Clipboard Copied! Toggle word wrap Toggle overflow SELinux 컨텍스트를 복원하십시오.
for i in {OSD_ID}; do restorecon /var/lib/ceph/osd/ceph-$i; done
for i in {OSD_ID}; do restorecon /var/lib/ceph/osd/ceph-$i; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID 를 OSD 노드에서 공백으로 구분된 숫자 Ceph OSD ID 목록으로 바꿉니다.
소유자와 그룹을
ceph:ceph
로 변경합니다.for i in {OSD_ID}; do chown -R ceph:ceph /var/lib/ceph/osd/ceph-$i; done
for i in {OSD_ID}; do chown -R ceph:ceph /var/lib/ceph/osd/ceph-$i; done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD_ID 를 OSD 노드에서 공백으로 구분된 숫자 Ceph OSD ID 목록으로 바꿉니다.
중요update-mon-db
명령이 Monitor 데이터베이스에 추가db 및 db
.slow
디렉토리를 사용하도록 하는 버그로 인해 이러한 디렉터리도 복사해야 합니다. 이를 위해 다음을 수행합니다.컨테이너 외부에서 임시 위치를 준비하여 OSD 데이터베이스를 마운트 및 액세스하고 Ceph Monitor를 복원하는 데 필요한 OSD 맵을 추출합니다.
ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev OSD-DATA --path /var/lib/ceph/osd/ceph-OSD-ID
ceph-bluestore-tool --cluster=ceph prime-osd-dir --dev OSD-DATA --path /var/lib/ceph/osd/ceph-OSD-ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD-DATA 를 OSD 데이터의 에 대한 VG(볼륨 그룹) 또는 LV(논리 볼륨) 경로로 바꾸고 OSD-ID 를 OSD의 ID로 바꿉니다.
BlueStore 데이터베이스와
block.db 사이에 심볼릭 링크를 만듭니다.
ln -snf BLUESTORE DATABASE /var/lib/ceph/osd/ceph-OSD-ID/block.db
ln -snf BLUESTORE DATABASE /var/lib/ceph/osd/ceph-OSD-ID/block.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow BLUESTORE-DATABASE 를 BlueStore 데이터베이스의 볼륨 그룹(VG) 또는 논리 볼륨(LV) 경로로 바꾸고 OSD-ID 를 OSD의 ID로 바꿉니다.
손상된 저장소가 있는 Ceph 모니터 노드에서 다음 명령을 사용합니다. 모든 노드의 모든 OSD에 대해 반복합니다.
모든 OSD 노드에서 클러스터 맵을 수집합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 적절한 기능을 설정합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow db 및 db
.slow
디렉토리에서 임시 위치로 모든sst
파일을 이동합니다.mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
[root@mon ~]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 수집된 맵에서 Monitor 저장소를 다시 빌드합니다.
ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
[root@mon ~]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 참고이 명령을 사용하고 나면 OSD에서 추출한 인증 키와
ceph-monstore-tool
명령줄에 지정된 인증 키만 Ceph의 인증 데이터베이스에 표시됩니다. 클라이언트가 클러스터에 액세스할 수 있도록 클라이언트, Ceph 관리자, Ceph 개체 게이트웨이 등과 같은 기타 인증 키를 다시 생성하거나 가져와야 합니다.손상된 저장소를 백업합니다. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.
mv /var/lib/ceph/mon/ceph-HOSTNAME/store.db /var/lib/ceph/mon/ceph-HOSTNAME/store.db.corrupted
mv /var/lib/ceph/mon/ceph-HOSTNAME/store.db /var/lib/ceph/mon/ceph-HOSTNAME/store.db.corrupted
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.
손상된 저장소를 교체합니다. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.
scp -r /tmp/monstore/store.db HOSTNAME:/var/lib/ceph/mon/ceph-HOSTNAME/
scp -r /tmp/monstore/store.db HOSTNAME:/var/lib/ceph/mon/ceph-HOSTNAME/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME 을 모니터 노드의 호스트 이름으로 바꿉니다.
새 저장소의 소유자를 변경합니다. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.
chown -R ceph:ceph /var/lib/ceph/mon/ceph-HOSTNAME/store.db
chown -R ceph:ceph /var/lib/ceph/mon/ceph-HOSTNAME/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.
컨테이너에서 Ceph를 사용하는 경우 모든 노드에서 임시 마운트된 OSD를 모두 마운트 해제합니다.
umount /var/lib/ceph/osd/ceph-*
[root@osd ~]# umount /var/lib/ceph/osd/ceph-*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Ceph Monitor 데몬을 시작합니다.
systemctl start ceph-mon *
[root@mon ~]# systemctl start ceph-mon *
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모니터가 쿼럼을 구성할 수 있는지 확인합니다.
베어 메탈 배포
ceph -s
[root@mon ~]# ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너
docker exec ceph-mon-_HOSTNAME_ ceph -s
[user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.
Ceph Manager 인증 키를 가져오고 모든 Ceph Manager 프로세스를 시작합니다.
ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring systemctl start ceph-mgr@HOSTNAME
ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring systemctl start ceph-mgr@HOSTNAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME 을 Ceph Manager 노드의 호스트 이름으로 바꿉니다.
모든 OSD 노드에서 모든 OSD 프로세스를 시작합니다.
systemctl start ceph-osd *
[root@osd ~]# systemctl start ceph-osd *
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD가 서비스로 반환되는지 확인합니다.
베어 메탈 배포
ceph -s
[root@mon ~]# ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 컨테이너
docker exec ceph-mon-_HOSTNAME_ ceph -s
[user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.
추가 리소스
- CDN(Content Delivery Network)에 Ceph 노드를 등록하는 방법에 대한 자세한 내용은 Red Hat Ceph Storage Nodes를 CDN에 등록 및 Red Hat Ceph Storage 설치 가이드의 서브스크립션 연결 섹션을 참조하십시오.
- 리포지토리 활성화에 대한 자세한 내용은 Red Hat Ceph Storage 설치 가이드의 Red Hat Ceph Storage 리포지토리 활성화 섹션을 참조하십시오.