5.5. OSD 드라이브 교체

Ceph는 내결함성을 위해 설계되었으므로 데이터가 손실되지 않고 성능이 저하된 상태에서 작동할 수 있습니다. 결과적으로 데이터 스토리지 드라이브가 실패해도 Ceph가 작동할 수 있습니다. 실패한 드라이브의 컨텍스트에서 성능이 저하된 상태는 다른 OSD에 저장된 데이터의 추가 복사본이 클러스터의 다른 OSD로 자동으로 백필링됨을 의미합니다. 그러나 이 경우 실패한 OSD 드라이브를 교체하고 OSD를 수동으로 다시 생성합니다.

드라이브에 실패하면 Ceph에서 OSD를 down 으로 보고합니다.

HEALTH_WARN 1/3 in osds are down
osd.0 is down since epoch 23, last address 192.168.106.220:6800/11080
참고

Ceph는 네트워킹 또는 권한 문제의 결과로 OSD를 down 으로 표시할 수 있습니다. 자세한 내용은 Down OSDs 를 참조하십시오.

일반적으로 서버는 핫스왑 가능 드라이브와 함께 배포되므로 장애가 발생한 드라이브를 가져와 노드를 중단하지 않고 새 드라이브로 교체할 수 있습니다. 전체 절차에는 다음 단계가 포함됩니다.

  1. Ceph 클러스터에서 OSD를 제거합니다. 자세한 내용은 Ceph 클러스터에서 OSD 제거 절차를 참조하십시오.
  2. 드라이브를 교체합니다. 자세한 내용은 Replacing the physical drive] 섹션을 참조하십시오.
  3. 클러스터에 OSD를 추가합니다. 자세한 내용은 Ceph 클러스터에 OSD 추가] 절차를 참조하십시오.

사전 요구 사항

  • Ceph 모니터 노드에 대한 루트 수준 액세스.
  • 다운 된 OSD 확인 :

    [root@mon ~]# ceph osd tree | grep -i down
    ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY
     0 0.00999         osd.0     down  1.00000          1.00000
  • OSD 프로세스가 중지되었는지 확인합니다. OSD 노드에서 다음 명령을 사용합니다.

    [root@mon ~]# systemctl status ceph-osd@_OSD_NUMBER_
  • OSD_NUMBERdown 으로 표시된 OSD의 ID로 바꿉니다. 예를 들면 다음과 같습니다.

    [root@mon ~]# systemctl status ceph-osd@osd.0
    ...
       Active: inactive (dead)

    ceph-osd 데몬이 실행 중인 경우. down 으로 표시되지만 해당 ceph-osd 데몬이 실행 중인 OSD 문제 해결에 대한 자세한 내용은 Down OSD를 참조하십시오.

절차: Ceph 클러스터에서 OSD 제거

  1. OSD 출력으로 표시합니다.

    [root@mon ~]# ceph osd out osd.OSD_NUMBER

    OSD_NUMBERdown 으로 표시된 OSD의 ID로 바꿉니다. 예를 들면 다음과 같습니다.

    [root@mon ~]# ceph osd out osd.0
    marked out osd.0.
    참고

    OSD가 다운 되면 Ceph는 OSD에서 하트비트 패킷을 받지 못하면 600초 후에 자동으로 출력됩니다. 이 경우 실패한 OSD 데이터의 복사본이 있는 기타 OSD가 백필을 시작하여 필요한 사본 수가 클러스터 내에 존재하는지 확인합니다. 클러스터가 백필링되는 동안 클러스터의 성능이 저하된 상태가 됩니다.

  2. 실패한 OSD가 다시 채워졌는지 확인합니다. 출력에는 다음과 유사한 정보가 포함됩니다.

    [root@mon ~]# ceph -w | grep backfill
    2017-06-02 04:48:03.403872 mon.0 [INF] pgmap v10293282: 431 pgs: 1 active+undersized+degraded+remapped+backfilling, 28 active+undersized+degraded, 49 active+undersized+degraded+remapped+wait_backfill, 59 stale+active+clean, 294 active+clean; 72347 MB data, 101302 MB used, 1624 GB / 1722 GB avail; 227 kB/s rd, 1358 B/s wr, 12 op/s; 10626/35917 objects degraded (29.585%); 6757/35917 objects misplaced (18.813%); 63500 kB/s, 15 objects/s recovering
    2017-06-02 04:48:04.414397 mon.0 [INF] pgmap v10293283: 431 pgs: 2 active+undersized+degraded+remapped+backfilling, 75 active+undersized+degraded+remapped+wait_backfill, 59 stale+active+clean, 295 active+clean; 72347 MB data, 101398 MB used, 1623 GB / 1722 GB avail; 969 kB/s rd, 6778 B/s wr, 32 op/s; 10626/35917 objects degraded (29.585%); 10580/35917 objects misplaced (29.457%); 125 MB/s, 31 objects/s recovering
    2017-06-02 04:48:00.380063 osd.1 [INF] 0.6f starting backfill to osd.0 from (0'0,0'0] MAX to 2521'166639
    2017-06-02 04:48:00.380139 osd.1 [INF] 0.48 starting backfill to osd.0 from (0'0,0'0] MAX to 2513'43079
    2017-06-02 04:48:00.380260 osd.1 [INF] 0.d starting backfill to osd.0 from (0'0,0'0] MAX to 2513'136847
    2017-06-02 04:48:00.380849 osd.1 [INF] 0.71 starting backfill to osd.0 from (0'0,0'0] MAX to 2331'28496
    2017-06-02 04:48:00.381027 osd.1 [INF] 0.51 starting backfill to osd.0 from (0'0,0'0] MAX to 2513'87544
  3. CRUSH 맵에서 OSD를 제거합니다.

    [root@mon ~]# ceph osd crush remove osd.OSD_NUMBER

    OSD_NUMBERdown 으로 표시된 OSD의 ID로 바꿉니다. 예를 들면 다음과 같습니다.

    [root@mon ~]# ceph osd crush remove osd.0
    removed item id 0 name 'osd.0' from crush map
  4. OSD와 관련된 인증 키를 제거합니다.

    [root@mon ~]# ceph auth del osd.OSD_NUMBER

    OSD_NUMBERdown 으로 표시된 OSD의 ID로 바꿉니다. 예를 들면 다음과 같습니다.

    [root@mon ~]# ceph auth del osd.0
    updated
  5. Ceph Storage 클러스터에서 OSD를 제거합니다.

    [root@mon ~]# ceph osd rm osd.OSD_NUMBER

    OSD_NUMBERdown 으로 표시된 OSD의 ID로 바꿉니다. 예를 들면 다음과 같습니다.

    [root@mon ~]# ceph osd rm osd.0
    removed osd.0

    OSD를 성공적으로 제거한 경우 다음 명령의 출력에 표시되지 않습니다.

    [root@mon ~]# ceph osd tree
  6. 베어 메탈 배포의 경우 실패한 드라이브를 마운트 해제합니다.

    [root@mon ~]# umount /var/lib/ceph/osd/CLUSTER_NAME-OSD_NUMBER

    클러스터 이름과 OSD의 ID를 지정합니다. 예를 들면 다음과 같습니다.

    [root@mon ~]# umount /var/lib/ceph/osd/ceph-0/

    드라이브를 마운트 해제한 경우 다음 명령의 출력에 표시되지 않습니다.

    [root@mon ~]# df -h

절차: 물리적 드라이브 교체

물리적 드라이브 교체에 대한 자세한 내용은 하드웨어 노드에 대한 설명서를 참조하십시오.

  1. 드라이브가 hot-swappable인 경우 실패한 드라이브를 새 드라이브로 교체합니다.
  2. 드라이브가 hot-swappable이 아니고 노드에 여러 OSD가 포함된 경우 전체 노드를 종료하고 물리 드라이브를 교체해야 할 수 있습니다. 클러스터가 백필되지 않도록 하십시오. 자세한 내용은 Red Hat Ceph Storage 문제 해결 가이드중지 및 리밸런싱 장을 참조하십시오.
  3. 드라이브가 /dev/ 디렉토리 아래에 표시되면 드라이브 경로를 기록합니다.
  4. OSD를 수동으로 추가하려면 OSD 드라이브를 찾고 디스크를 포맷합니다.

절차: Ceph 클러스터에 OSD 추가

  1. OSD를 다시 추가합니다.

    1. Ansible을 사용하여 클러스터를 배포한 경우 Ceph 관리 서버에서 ceph-anible 플레이북을 다시 실행합니다.

      • 베어 메탈 배포:

        구문

        ansible-playbook site.yml -i hosts --limit NEW_OSD_NODE_NAME

        예제

        [user@admin ceph-ansible]$ ansible-playbook site.yml -i hosts --limit node03

      • 컨테이너 배포:

        구문

        ansible-playbook site-container.yml -i hosts --limit NEW_OSD_NODE_NAME

        예제

        [user@admin ceph-ansible]$ ansible-playbook site-container.yml -i hosts --limit node03

    2. OSD를 수동으로 추가한 경우 Red Hat Ceph Storage 4 운영 가이드의 명령줄 인터페이스를 사용하여 Ceph OSD 추가 섹션을 참조하십시오.
  2. CRUSH 계층 구조가 정확한지 확인합니다.

    [root@mon ~]# ceph osd tree
  3. CRUSH 계층 구조의 OSD 위치에 만족하지 않으면 OSD를 원하는 위치로 이동합니다.

    [root@mon ~]# ceph osd crush move BUCKET_TO_MOVE BUCKET_TYPE=PARENT_BUCKET

    예를 들어 sdd:row1 에 있는 버킷을 루트 버킷으로 이동하려면 다음을 수행합니다.

    [root@mon ~]# ceph osd crush move ssd:row1 root=ssd:root

추가 리소스