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! 또는
ceph-disk list
[root@osd ~]# ceph-disk list
Copy to Clipboard Copied! 임시 위치에 데이터 파티션을 마운트합니다.
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
Copy to Clipboard Copied! 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! 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! 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! 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! BLUESTORE-DATABASE 를 BlueStore 데이터베이스의 볼륨 그룹(VG) 또는 논리 볼륨(LV) 경로로 바꾸고 OSD-ID 를 OSD의 ID로 바꿉니다.
손상된 저장소가 있는 Ceph 모니터 노드에서 다음 명령을 사용합니다. 모든 노드의 모든 OSD에 대해 반복합니다.
모든 OSD 노드에서 클러스터 맵을 수집합니다.
cd /root/ ms=/tmp/monstore/ db=/root/db/ db_slow=/root/db.slow/ mkdir $ms for host in $osd_nodes; do
[root@ mon~]# cd /root/ [root@mon ~]# ms=/tmp/monstore/ [root@mon ~]# db=/root/db/ [root@mon ~]# db_slow=/root/db.slow/ [root@mon ~]# mkdir $ms [root@mon ~]# for host in $osd_nodes; do echo "$host" rsync -avz $ms $host:$ms rsync -avz $db $host:$db rsync -avz $db_slow $host:$db_slow rm -rf $ms rm -rf $db rm -rf $db_slow sh -t $host <<EOF for osd in /var/lib/ceph/osd/ceph-*; do ceph-objectstore-tool --type bluestore --data-path \$osd --op update-mon-db --mon-store-path $ms done EOF rsync -avz $host:$ms $ms rsync -avz $host:$db $db rsync -avz $host:$db_slow $db_slow done
Copy to Clipboard Copied! 적절한 기능을 설정합니다.
ceph-authtool /etc/ceph/ceph.client.admin.keyring -n mon. --cap mon 'allow *' --gen-key cat /etc/ceph/ceph.client.admin.keyring
[root@mon ~]# ceph-authtool /etc/ceph/ceph.client.admin.keyring -n mon. --cap mon 'allow *' --gen-key [root@mon ~]# cat /etc/ceph/ceph.client.admin.keyring [mon.] key = AQCleqldWqm5IhAAgZQbEzoShkZV42RiQVffnA== caps mon = "allow *" [client.admin] key = AQCmAKld8J05KxAArOWeRAw63gAwwZO5o75ZNQ== auid = 0 caps mds = "allow *" caps mgr = "allow *" caps mon = "allow *" caps osd = "allow *"
Copy to Clipboard Copied! 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! 수집된 맵에서 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! 참고이 명령을 사용하고 나면 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! 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! 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! HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.
컨테이너에서 Ceph를 사용하는 경우 모든 노드에서 임시 마운트된 OSD를 모두 마운트 해제합니다.
umount /var/lib/ceph/osd/ceph-*
[root@osd ~]# umount /var/lib/ceph/osd/ceph-*
Copy to Clipboard Copied! 모든 Ceph Monitor 데몬을 시작합니다.
systemctl start ceph-mon *
[root@mon ~]# systemctl start ceph-mon *
Copy to Clipboard Copied! 모니터가 쿼럼을 구성할 수 있는지 확인합니다.
베어 메탈 배포
ceph -s
[root@mon ~]# ceph -s
Copy to Clipboard Copied! 컨테이너
docker exec ceph-mon-_HOSTNAME_ ceph -s
[user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s
Copy to Clipboard Copied! 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! HOSTNAME 을 Ceph Manager 노드의 호스트 이름으로 바꿉니다.
모든 OSD 노드에서 모든 OSD 프로세스를 시작합니다.
systemctl start ceph-osd *
[root@osd ~]# systemctl start ceph-osd *
Copy to Clipboard Copied! OSD가 서비스로 반환되는지 확인합니다.
베어 메탈 배포
ceph -s
[root@mon ~]# ceph -s
Copy to Clipboard Copied! 컨테이너
docker exec ceph-mon-_HOSTNAME_ ceph -s
[user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s
Copy to Clipboard Copied! 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 리포지토리 활성화 섹션을 참조하십시오.