검색

4.6. Ceph Monitor 저장소 복구

download PDF

Ceph Monitor는 클러스터 맵을 RocksDB와 같은 키-값 저장소에 저장합니다. 저장소가 모니터에 손상된 경우 모니터가 예기치 않게 종료되고 다시 시작되지 않습니다. 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-toolceph-objectstore-tool 이라는 유틸리티를 사용하여 OSD 노드에 저장된 정보로 복구할 수 있습니다.

중요

이러한 절차는 다음 정보를 복구할 수 없습니다.

  • 메타데이터 데몬 서버(MDS) 인증 키링 및 맵
  • 배치 그룹 설정:

    • ceph pg set_ full _ratio 명령을 사용하여 설정된 전체 비율
    • ceph pg set_ nearfull _ratio 명령을 사용하여 설정된 nearfull 비율
중요

이전 백업에서 Ceph Monitor 저장소를 복원하지 마십시오. 다음 단계를 사용하여 현재 클러스터 상태에서 Ceph Monitor 저장소를 다시 빌드하고 해당 위치에서 복원합니다.

4.6.1. BlueStore를 사용할 때 Ceph Monitor 저장소 복구

Ceph Monitor 저장소가 모든 Ceph 모니터에서 손상되고 BlueStore 백엔드를 사용하는 경우 다음 절차를 따르십시오.

컨테이너화된 환경에서 이 방법을 사용하려면 먼저 Ceph 리포지토리를 연결하고 컨테이너화되지 않은 Ceph 모니터로 복원해야 합니다.

주의

이 절차는 데이터 손실을 유발할 수 있습니다. 이 절차의 단계에 대해 잘 모르는 경우 Red Hat 기술 지원팀에 문의하여 복구 프로세스에 대한 지원을 받으십시오.

사전 요구 사항

  • 모든 OSD 컨테이너가 중지됩니다.
  • 역할을 기반으로 Ceph 노드에서 Ceph 리포지토리를 활성화합니다.
  • ceph-testrsync 패키지는 OSD 및 모니터 노드에 설치됩니다.
  • ceph-mon 패키지는 모니터 노드에 설치됩니다.
  • ceph-osd 패키지는 OSD 노드에 설치됩니다.

프로세스

  1. Ceph 데이터가 있는 모든 디스크를 임시 위치에 마운트합니다. 모든 OSD 노드에 대해 이 단계를 반복합니다.

    1. ceph-volume 명령을 사용하여 데이터 파티션을 나열합니다.

      예제

      [ceph: root@host01 /]# ceph-volume lvm list

    2. 데이터 파티션을 임시 위치에 마운트합니다.

      구문

      mount -t tmpfs tmpfs /var/lib/ceph/osd/ceph-$i

    3. SELinux 컨텍스트를 복원합니다.

      구문

      for i in {OSD_ID}; do restorecon /var/lib/ceph/osd/ceph-$i; done

      OSD_ID 를 OSD 노드에서 공백으로 구분된 숫자의 Ceph OSD ID 목록으로 바꿉니다.

    4. 소유자 및 그룹을 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 디렉토리를 사용하도록 하는 버그로 인해 이러한 디렉터리도 복사해야 합니다. 이렇게 하려면 다음을 수행합니다.

      1. 컨테이너 외부의 임시 위치를 준비하여 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로 바꿉니다.

      2. BlueStore 데이터베이스와 block.db 사이에 심볼릭 링크를 만듭니다.

        구문

        ln -snf BLUESTORE DATABASE /var/lib/ceph/osd/ceph-OSD-ID/block.db

        BLUESTORE-DATABASE 를 BlueStore 데이터베이스의 볼륨 그룹(VG) 또는 논리 볼륨(LV) 경로로 바꾸고 OSD-ID 를 OSD의 ID로 바꿉니다.

  2. 손상된 저장소와 함께 Ceph Monitor 노드의 다음 명령을 사용합니다. 모든 노드의 모든 OSD에 대해 이를 반복합니다.

    1. 모든 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

    2. 적절한 기능을 설정합니다.

      예제

      [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 *"

    3. dbdb.slow 디렉토리에서 임시 위치로 모든 sst 파일을 이동합니다.

      예제

      [ceph: root@host01 /]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db

    4. 수집된 맵에서 Monitor 저장소를 다시 빌드합니다.

      예제

      [ceph: root@host01 /]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin

      참고

      이 명령을 사용하면 OSD에서 추출된 인증 키만 Ceph의 인증 데이터베이스에 있는 ceph-monstore-tool 명령줄에 지정된 인증 키만 있습니다. 클라이언트가 클러스터에 액세스할 수 있도록 클라이언트, Ceph Manager, Ceph Object Gateway 등과 같은 기타 모든 인증 키를 다시 생성하거나 가져와야 합니다.

    5. 손상된 저장소를 백업하십시오. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.

      구문

      mv /var/lib/ceph/mon/ceph-HOSTNAME/store.db /var/lib/ceph/mon/ceph-HOSTNAME/store.db.corrupted

      HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.

    6. 손상된 저장소를 교체합니다. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.

      구문

      scp -r /tmp/monstore/store.db HOSTNAME:/var/lib/ceph/mon/ceph-HOSTNAME/

      HOSTNAME 을 Monitor 노드의 호스트 이름으로 바꿉니다.

    7. 새 저장소의 소유자를 변경합니다. 모든 Ceph Monitor 노드에 대해 이 단계를 반복합니다.

      구문

      chown -R ceph:ceph /var/lib/ceph/mon/ceph-HOSTNAME/store.db

      HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.

  3. 모든 노드에서 임시 마운트된 OSD를 모두 마운트 해제합니다.

    예제

    [root@host01 ~]# umount /var/lib/ceph/osd/ceph-*

  4. 모든 Ceph Monitor 데몬을 시작합니다.

    구문

    systemctl start ceph-FSID@DAEMON_NAME

    예제

    [root@mon ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@mon.host01.service

  5. 모니터가 쿼럼을 구성할 수 있는지 확인합니다.

    구문

    ceph -s

    HOSTNAME 을 Ceph Monitor 노드의 호스트 이름으로 바꿉니다.

  6. Ceph Manager 인증 키를 가져오고 모든 Ceph Manager 프로세스를 시작합니다.

    구문

    ceph auth import -i /etc/ceph/ceph.mgr.HOSTNAME.keyring
    systemctl start ceph-FSID@DAEMON_NAME

    예제

    [root@mon ~]# systemctl start ceph-b341e254-b165-11ed-a564-ac1f6bb26e8c@mgr.extensa003.exrqql.service

    HOSTNAME 을 Ceph Manager 노드의 호스트 이름으로 바꿉니다.

  7. 모든 OSD 노드에서 모든 OSD 프로세스를 시작합니다. 클러스터의 모든 OSD에 대해 반복합니다.

    구문

    systemctl start ceph-FSID@osd.OSD_ID

    예제

    [root@host01 ~]# systemctl start ceph-b404c440-9e4c-11ec-a28a-001a4a0001df@osd.0.service

  8. OSD가 서비스로 돌아가는지 확인합니다.

    예제

    [ceph: root@host01 /]# ceph -s

추가 리소스

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.