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-toolceph-objectstore-tool 이라는 유틸리티를 사용하여 OSD 노드에 저장된 정보로 복구할 수 있습니다.

중요

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

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

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

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

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

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

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

주의

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

사전 요구 사항

  • 모든 OSD 컨테이너가 중지됩니다.
  • 역할을 기반으로 Ceph 노드에서 Ceph 리포지토리를 활성화합니다.
  • ceph-testrsync 패키지가 OSD 및 모니터 노드에 설치됩니다.
  • ceph-mon 패키지는 Monitor 노드에 설치됩니다.
  • 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 데이터베이스의 Volume Group(VG) 또는 LV(Logical Volume) 경로로 바꾸고 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-monstore-tool 명령줄에 지정된 키 키만 Ceph 인증 데이터베이스에 있습니다. 클라이언트, 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@host01 ~]# 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.