4.7. 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
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_
명령을 사용하여 설정된 가까운full 비율nearfull
_ratio
-
이전 백업에서 Ceph Monitor 저장소를 복원하지 마십시오. 다음 단계를 사용하여 현재 클러스터 상태에서 Ceph Monitor 저장소를 다시 빌드하고 해당 위치에서 복원합니다.
4.7.1. BlueStore를 사용할 때 Ceph Monitor 저장소 복구
모든 Ceph Monitor에서 Ceph Monitor 저장소가 손상되고 BlueStore 백엔드를 사용하는 경우 다음 절차를 따르십시오.
컨테이너화된 환경에서는 이 방법으로 Ceph 리포지토리를 연결하고 컨테이너화되지 않은 Ceph 모니터로 먼저 복원해야 합니다.
이 절차에서는 데이터 손실을 초래할 수 있습니다. 이 절차의 어떤 단계에 대해 잘 모르는 경우 복구 프로세스에 대한 Red Hat 기술 지원에 문의하십시오.
사전 요구 사항
- 모든 OSD 컨테이너가 중지됩니다.
- 역할을 기반으로 Ceph 노드에서 Ceph 리포지토리를 활성화합니다.
-
ceph-test
및rsync
패키지가 OSD 및 모니터 노드에 설치됩니다. -
ceph-mon
패키지는 Monitor 노드에 설치됩니다. -
ceph-osd
패키지는 OSD 노드에 설치됩니다.
절차
Ceph 데이터가 있는 모든 디스크를 임시 위치에 마운트합니다. 모든 OSD 노드에 대해 이 단계를 반복합니다.
ceph-volume
명령을 사용하여 데이터 파티션을 나열합니다.예제
[ceph: root@host01 /]# ceph-volume lvm list
데이터 파티션을 임시 위치에 마운트합니다.
구문
mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i
SELinux 컨텍스트를 복원합니다.
구문
for i in {OSD_ID}; do restorecon /var/lib/ceph/osd/ceph-$i; done
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
OSD_ID 를 OSD 노드의 Ceph OSD ID의 숫자 공백으로 구분된 목록으로 교체합니다.
중요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
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
BLUESTORE-DATABASE 를 BlueStore 데이터베이스의 Volume Group(VG) 또는 LV(Logical Volume) 경로로 바꾸고 OSD-ID 를 OSD ID로 바꿉니다.
손상된 저장소와 함께 Ceph Monitor 노드에서 다음 명령을 사용합니다. 모든 노드의 모든 OSD에 대해 이를 반복합니다.
모든 OSD 노드에서 클러스터 맵을 수집합니다.
예제
[root@host01 ~]# cd /root/ [root@host01 ~]# ms=/tmp/monstore/ [root@host01 ~]# db=/root/db/ [root@host01 ~]# db_slow=/root/db.slow/ [root@host01 ~]# mkdir $ms [root@host01 ~]# 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
적절한 기능을 설정합니다.
예제
[ceph: root@host01 /]# ceph-authtool /etc/ceph/ceph.client.admin.keyring -n mon. --cap mon 'allow *' --gen-key [ceph: root@host01 /]# 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 *"
db
및db.slow
디렉토리에서 모든sst
파일을 임시 위치로 이동합니다.예제
[ceph: root@host01 /]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
수집된 맵에서 Monitor 저장소를 다시 빌드합니다.
예제
[ceph: root@host01 /]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
참고이 명령을 사용하면 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
HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 교체합니다.
손상된 저장소를 교체합니다. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.
구문
scp -r /tmp/monstore/store.db HOSTNAME:/var/lib/ceph/mon/ceph-HOSTNAME/
HOSTNAME 을 Monitor 노드의 호스트 이름으로 교체합니다.
새 저장소의 소유자를 변경합니다. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.
구문
chown -R ceph:ceph /var/lib/ceph/mon/ceph-HOSTNAME/store.db
HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 교체합니다.
임시 마운트된 모든 OSD를 모든 노드에서 마운트 해제합니다.
예제
[root@host01 ~]# umount /var/lib/ceph/osd/ceph-*
모든 Ceph Monitor 데몬을 시작합니다.
구문
systemctl start ceph-FSID@DAEMON_NAME
예제
[root@mon ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@mon.host01.service
모니터가 쿼럼을 형성할 수 있는지 확인합니다.
구문
ceph -s
HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 교체합니다.
Ceph Manager 인증 키를 가져오고 모든 Ceph Manager 프로세스를 시작합니다.
구문
ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring systemctl start ceph-FSID@DAEMON_NAME
예제
[root@host01 ~]# systemctl start ceph-b341e254-b165-11ed-a564-ac1f6bb26e8c@mgr.extensa003.exrqql.service
HOSTNAME 을 Ceph Manager 노드의 호스트 이름으로 교체합니다.
모든 OSD 노드에서 모든 OSD 프로세스를 시작합니다. 클러스터의 모든 OSD에 대해 반복합니다.
구문
systemctl start ceph-FSID@osd.OSD_ID
예제
[root@host01 ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@osd.0.service
OSD가 서비스로 돌아가 있는지 확인합니다.
예제
[ceph: root@host01 /]# ceph -s
추가 리소스
- Ceph 노드를 CDN(Content Delivery Network)에 등록하는 방법에 대한 자세한 내용은 Red Hat Ceph Storage 설치 가이드의 CDN에 Red Hat Ceph Storage 노드 등록 및 연결 섹션을 참조하십시오.