검색

4.8. Ceph 모니터 저장소 복구

download PDF

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

프로덕션 환경 Red Hat Ceph Storage 클러스터에서는 Ceph 모니터를 3개 이상 사용하므로 오류가 발생할 경우 다른 모니터로 교체할 수 있습니다. 그러나 특정 상황에서 모든 Ceph 모니터가 저장소가 손상될 수 있습니다. 예를 들어 Ceph Monitor 노드의 디스크 또는 파일 시스템 설정이 잘못 구성된 경우 정전이 발생하면 기본 파일 시스템이 손상될 수 있습니다.

모든 Ceph 모니터에 손상이 있는 경우 ceph-monstore-tool 및 ceph-objectstore-tool 이라는 유틸리티를 사용하여 OSD 노드에 저장된 정보로 복구할 수 있습니다.

중요

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

  • 메타데이터 데몬 서버(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 기술 지원에 문의하십시오. 복구 프로세스에 대한 지원이 제공됩니다.

사전 요구 사항

  • 베어 메탈 배포

    • rsyncceph-test 패키지가 설치됩니다.
  • 컨테이너 배포

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

절차

  1. 컨테이너에서 Ceph를 사용하는 경우 Ceph 데이터가 있는 모든 디스크를 임시 위치에 마운트합니다. 모든 OSD 노드에 대해 이 단계를 반복합니다.

    1. 데이터 파티션을 나열합니다. 장치를 설정하는 데 사용한 유틸리티에 따라 ceph-volume 또는 ceph-disk 를 사용합니다.

      [root@osd ~]# ceph-volume lvm list

      또는

      [root@osd ~]# ceph-disk 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 Monitor를 복원하는 데 필요한 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 모니터 노드에서 다음 명령을 사용합니다. 모든 노드의 모든 OSD에 대해 반복합니다.

    1. 모든 OSD 노드에서 클러스터 맵을 수집합니다.

      [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
    2. 적절한 기능을 설정합니다.

      [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 *"
    3. db 및 db .slow 디렉토리에서 임시 위치로 모든 sst 파일을 이동합니다.

      [root@mon ~]# mv /root/db/*.sst /root/db.slow/*.sst /tmp/monstore/store.db
    4. 수집된 맵에서 Monitor 저장소를 다시 빌드합니다.

      [root@mon ~]# ceph-monstore-tool /tmp/monstore rebuild -- --keyring /etc/ceph/ceph.client.admin
      참고

      이 명령을 사용하고 나면 OSD에서 추출한 인증 키와 ceph-monstore-tool 명령줄에 지정된 인증 키만 Ceph의 인증 데이터베이스에 표시됩니다. 클라이언트가 클러스터에 액세스할 수 있도록 클라이언트, Ceph 관리자, Ceph 개체 게이트웨이 등과 같은 기타 인증 키를 다시 생성하거나 가져와야 합니다.

    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 을 모니터 노드의 호스트 이름으로 바꿉니다.

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

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

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

  3. 컨테이너에서 Ceph를 사용하는 경우 모든 노드에서 임시 마운트된 OSD를 모두 마운트 해제합니다.

    [root@osd ~]# umount /var/lib/ceph/osd/ceph-*
  4. 모든 Ceph Monitor 데몬을 시작합니다.

    [root@mon ~]# systemctl start ceph-mon *
  5. 모니터가 쿼럼을 구성할 수 있는지 확인합니다.

    • 베어 메탈 배포

      [root@mon ~]# ceph -s
    • 컨테이너

      [user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s

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

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

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

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

  7. 모든 OSD 노드에서 모든 OSD 프로세스를 시작합니다.

    [root@osd ~]# systemctl start ceph-osd *
  8. OSD가 서비스로 반환되는지 확인합니다.

    • 베어 메탈 배포

      [root@mon ~]# ceph -s
    • 컨테이너

      [user@admin ~]$ docker exec ceph-mon-_HOSTNAME_ ceph -s

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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.