4.6. Ceph Monitor 저장소 복구
Ceph 모니터는 클러스터 맵을 TaskRunsDB와 같은 키-값 저장소에 저장합니다. 모니터에서 저장소가 손상되면 모니터가 예기치 않게 종료되고 다시 시작되지 않습니다. 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 클러스터는 3개 이상의 Ceph Monitor를 사용하므로 실패하는 경우 다른 클러스터로 교체할 수 있습니다. 그러나 특정 상황에서 모든 Ceph 모니터에 저장소가 손상될 수 있습니다. 예를 들어 Ceph Monitor 노드가 디스크 또는 파일 시스템 설정을 잘못 구성한 경우 정전으로 인해 기본 파일 시스템이 손상될 수 있습니다.
모든 Ceph 모니터에 손상이 있는 경우 ceph-monstore-tool
및 ceph-objectstore-tool
이라는 유틸리티를 사용하여 OSD 노드에 저장된 정보로 복구할 수 있습니다.
이러한 프로세스는 다음 정보를 복구할 수 없습니다.
- 메타데이터 데몬 서버(MDS) 키링 및 맵
배치 그룹 설정:
-
ceph pg set_
명령을 사용하여 전체 비율 설정full
_ratio -
ceph pg set_
명령을 사용하여 설정된 거의 전체 비율nearfull
_ratio
-
이전 백업에서 Ceph Monitor 저장소를 복원하지 마십시오. 다음 단계를 사용하여 현재 클러스터 상태에서 Ceph Monitor 저장소를 다시 빌드하고 복원하십시오.
4.6.1. BlueStore를 사용할 때 Ceph Monitor 저장소 복구 링크 복사링크가 클립보드에 복사되었습니다!
Ceph Monitor 저장소가 모든 Ceph Monitor에서 손상되고 BlueStore 백엔드를 사용하는 경우 다음 절차를 따르십시오.
컨테이너화된 환경에서는 이 방법을 사용하여 Ceph 리포지토리를 연결하고 컨테이너화되지 않은 Ceph Monitor로 복원해야 합니다.
이 절차에서는 데이터 손실이 발생할 수 있습니다. 이 절차의 단계가 확실하지 않은 경우 복구 프로세스에 대한 지원을 받으려면 Red Hat 기술 지원에 문의하십시오.
사전 요구 사항
- 모든 OSD 컨테이너가 중지됩니다.
- 역할에 따라 Ceph 노드에서 Ceph 리포지토리를 활성화합니다.
-
ceph-test
및rsync
패키지가 OSD 및 모니터 노드에 설치되어 있습니다. -
ceph-mon
패키지가 모니터 노드에 설치됩니다. -
ceph-osd
패키지는 OSD 노드에 설치됩니다.
절차
Ceph 데이터가 포함된 모든 디스크를 임시 위치에 마운트합니다. 모든 OSD 노드에 대해 이 단계를 반복합니다.
ceph-volume
명령을 사용하여 데이터 파티션을 나열합니다.예제
[ceph: root@host01 /]# ceph-volume lvm list
[ceph: root@host01 /]# ceph-volume lvm 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: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 노드에서 공백으로 구분된 숫자 목록으로 교체합니다.
중요update-mon-db
명령이 Monitor 데이터베이스에 추가 db 및db
.slow컨테이너 외부의 임시 위치를 준비하여 OSD 데이터베이스를 마운트 및 액세스하고 Ceph 모니터를 복원하는 데 필요한 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 데이터 및 OSD-ID 의 볼륨 그룹(VG) 또는 논리 볼륨(LV) 경로로 바꿉니다.
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 데이터베이스 및 OSD-ID 의 Volume Group(VG) 또는 LV(Logical Volume) 경로로 바꿉니다.
손상된 저장소와 함께 Ceph Monitor 노드에서 다음 명령을 사용합니다. 모든 노드의 모든 OSD에 대해 반복합니다.
모든 OSD 노드에서 클러스터 맵을 수집합니다.
예제
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 적절한 기능을 설정합니다.
예제
Copy to Clipboard Copied! Toggle word wrap Toggle overflow db
및db.slow
디렉토리에서 모든sst
파일을 임시 위치로 이동합니다.예제
[ceph: root@host01 /]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
[ceph: root@host01 /]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 수집된 맵에서 모니터 저장소를 다시 빌드합니다.
예제
[ceph: root@host01 /]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
[ceph: root@host01 /]# 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 Manager, Ceph Object Gateway 등과 같은 기타 모든 인증 키를 다시 생성하거나 가져와야 합니다.손상된 저장소를 백업하십시오. 모든 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 을 Monitor 노드의 호스트 이름으로 바꿉니다.
새 저장소의 소유자를 변경합니다. 모든 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 노드의 호스트 이름으로 바꿉니다.
임시로 마운트된 모든 OSD를 모든 노드에서 마운트 해제합니다.
예제
umount /var/lib/ceph/osd/ceph-*
[root@host01 ~]# umount /var/lib/ceph/osd/ceph-*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모든 Ceph Monitor 데몬을 시작합니다.
구문
systemctl start ceph-FSID@DAEMON_NAME
systemctl start ceph-FSID@DAEMON_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@mon.host01.service
[root@mon ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@mon.host01.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 모니터가 쿼럼을 구성할 수 있는지 확인합니다.
구문
ceph -s
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-FSID@DAEMON_NAME
ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring systemctl start ceph-FSID@DAEMON_NAME
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
systemctl start ceph-b341e254-b165-11ed-a564-ac1f6bb26e8c@mgr.extensa003.exrqql.service
[root@mon ~]# systemctl start ceph-b341e254-b165-11ed-a564-ac1f6bb26e8c@mgr.extensa003.exrqql.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOSTNAME 을 Ceph Manager 노드의 호스트 이름으로 바꿉니다.
모든 OSD 노드에서 모든 OSD 프로세스를 시작합니다. 클러스터의 모든 OSD에 대해 반복합니다.
구문
systemctl start ceph-FSID@osd.OSD_ID
systemctl start ceph-FSID@osd.OSD_ID
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 예제
systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@osd.0.service
[root@host01 ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@osd.0.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OSD가 서비스로 돌아가고 있는지 확인합니다.
예제
[ceph: root@host01 /]# ceph -s
[ceph: root@host01 /]# ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 네트워크 관련 문제는 Red Hat Ceph Storage 문제 해결 가이드 의 네트워킹 문제 해결을 참조하십시오.