2.2. 디스크 오류
Ceph는 내결함성을 위해 설계되었습니다. 즉, 데이터를 손실하지 않고 Ceph가 성능이 저하된
상태에서 작동할 수 있습니다. 데이터 스토리지 드라이브가 실패해도 Ceph가 계속 작동할 수 있습니다. 성능이 저하된
상태는 다른 OSD에 저장된 추가 데이터 사본이 스토리지 클러스터의 다른 OSD로 자동으로 다시 입력됨을 의미합니다. OSD가 아래로
표시되면 드라이브가 실패할 수 있습니다.
드라이브에 오류가 발생하면 초기에 OSD 상태가 다운
되지만 스토리지 클러스터에서는 여전히 OSD 상태가 중지 됩니다
. 네트워킹 문제가 실제로 작동 중이더라도 OSD를 다운
상태로
표시할 수도 있습니다. 먼저 환경의 네트워크 문제를 확인합니다. 네트워킹이 확인되면 OSD 드라이브가 실패할 가능성이 큽니다.
최신 서버는 일반적으로 핫 스왑 가능 드라이브로 배포하므로 오류가 발생한 드라이브를 가져와 노드를 중단하지 않고 새 드라이브로 교체할 수 있습니다. 그러나 Ceph를 사용하면 OSD의 소프트웨어 정의 부분도 제거해야 합니다.
2.2.1. 실패한 OSD 디스크 교체
OSD를 교체하는 일반적인 절차에는 스토리지 클러스터에서 OSD를 제거하고 드라이브를 교체한 다음 OSD를 다시 생성해야 합니다.
BlueStore OSD의 데이터베이스 파티션이 포함된 BlueStore block.db
디스크를 교체할 때 Red Hat은 Ansible을 사용하여 모든 OSD의 재배포만 지원합니다. 손상된 block.db
파일은 해당 block.db
파일에 포함된 모든 OSD에 영향을 미칩니다.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- 오류가 발생한 디스크.
절차
스토리지 클러스터 상태를 확인합니다.
# ceph health
CRUSH 계층 구조에서 OSD 위치를 식별합니다.
# ceph osd tree | grep -i down
OSD 노드에서 OSD를 시작합니다.
# systemctl start ceph-osd@$OSD_ID
명령에서 OSD가 이미 실행 중임을 나타내는 경우 하트비트 또는 네트워킹 문제가 있을 수 있습니다. OSD를 다시 시작할 수 없는 경우 드라이브가 실패할 수 있습니다.
참고OSD가
다운
되면 OSD가결국
표시됩니다. 이는 Ceph Storage의 정상적인 동작입니다. OSD가 표시되지 않으면 실패한 OSD 데이터 복사본이 있는기타
OSD가 스토리지 클러스터 내에 필요한 복사본 수가 있는지 확인하기 위해 백필을 시작합니다. 스토리지 클러스터가 백필되는 동안 클러스터가저하된
상태가 됩니다.Ceph의 컨테이너화된 배포의 경우 OSD와 연결된 드라이브를 참조하여 OSD 컨테이너를 시작합니다.
# systemctl start ceph-osd@$OSD_DRIVE
명령에서 OSD가 이미 실행 중임을 나타내는 경우 하트비트 또는 네트워킹 문제가 있을 수 있습니다. OSD를 다시 시작할 수 없는 경우 드라이브가 실패할 수 있습니다.
참고OSD와 연결된 드라이브는 컨테이너 OSD ID를 드라이브에 매핑하여 확인할 수 있습니다.
실패한 OSD 마운트 지점을 확인합니다.
참고Ceph 컨테이너 배포의 경우 OSD가 다운되고 OSD 드라이브가 마운트 해제되므로 run
df
를 실행하여 마운트 지점을 확인할 수 없습니다. 다른 방법을 사용하여 OSD 드라이브가 실패했는지 확인합니다. 예를 들어 컨테이너 노드의 드라이브에서smartctl
을 실행합니다.# df -h
OSD를 다시 시작할 수 없는 경우 마운트 지점을 확인할 수 있습니다. 마운트 지점이 더 이상 나타나지 않으면 OSD 드라이브를 다시 마운트하고 OSD를 다시 시작할 수 있습니다. 마운트 지점을 복원할 수 없는 경우 OSD 드라이브가 실패할 수 있습니다.
smartctl
유틸리티 cab를 사용하면 드라이브가 정상인지 확인합니다. 예를 들면 다음과 같습니다.# yum install smartmontools # smartctl -H /dev/$DRIVE
드라이브가 실패하면 교체해야합니다.
OSD 프로세스를 중지합니다.
# systemctl stop ceph-osd@$OSD_ID
FileStore 를 사용하는 경우 저널을 디스크로 플러시합니다.
# ceph osd -i $$OSD_ID --flush-journal
Ceph의 컨테이너화된 배포의 경우 OSD와 연결된 드라이브를 참조하여 OSD 컨테이너를 중지합니다.
# systemctl stop ceph-osd@$OSD_DRIVE
스토리지 클러스터에서 OSD를 제거합니다.
# ceph osd out $OSD_ID
실패한 OSD가 다시 입력되었는지 확인합니다.
# ceph -w
CRUSH 맵에서 OSD를 제거합니다.
# ceph osd crush remove osd.$OSD_ID
참고이 단계는 OSD를 영구적으로 제거하고 재배포하지 않는 경우에만 필요합니다.
OSD의 인증 키를 제거합니다.
# ceph auth del osd.$OSD_ID
OSD 키가 나열되지 않았는지 확인합니다.
# ceph auth list
스토리지 클러스터에서 OSD를 제거합니다.
# ceph osd rm osd.$OSD_ID
실패한 드라이브 경로를 마운트 해제합니다.
참고Ceph의 컨테이너화된 배포의 경우 OSD가 다운되고 OSD 드라이브가 마운트 해제됩니다. 이 경우 마운트 해제할 항목이 없으며 이 단계를 건너뛸 수 있습니다.
# umount /var/lib/ceph/osd/$CLUSTER_NAME-$OSD_ID
물리적 드라이브를 교체하십시오. 노드의 하드웨어 벤더 설명서를 참조하십시오. 드라이브를 핫 스왑할 수 있는 경우 오류가 발생한 드라이브를 새 드라이브로 바꾸기만 하면 됩니다. 드라이브가 핫 스왑할 수 없고 노드에 여러 OSD가 포함된 경우, 노드를 중단하여 실제 드라이브를 교체해야 합니다. 노드를 일시적으로 중단해야 하는 경우 백필을 방지하기 위해 클러스터를
noout
으로 설정할 수 있습니다.# ceph osd set noout
드라이브를 교체하고 노드와 OSD를 다시 온라인 상태가 되면,
noout
설정을 제거하십시오.# ceph osd unset noout
계속 진행하기 전에 새 드라이브가
/dev/
디렉터리에 표시되도록 허용하고 드라이브 경로를 기록합니다.- OSD 드라이브를 찾아서 디스크를 포맷합니다.
OSD를 다시 생성합니다.
CRUSH 계층 구조를 확인하여 정확한지 확인합니다.
# ceph osd tree
CRUSH 계층 구조의 OSD 위치에 만족하지 않으면
move
명령으로 이동할 수 있습니다.# ceph osd crush move $BUCKET_TO_MOVE $BUCKET_TYPE=$PARENT_BUCKET
- OSD가 온라인 상태인지 확인합니다.
2.2.2. OSD ID를 유지하면서 OSD 드라이브 교체
실패한 OSD 드라이브를 교체하는 경우 원래 OSD ID와 CRUSH 맵 항목을 유지할 수 있습니다.
ceph-volume lvm
명령의 기본값은 OSD의 BlueStore입니다. FileStore OSD를 사용하려면 --filestore
,--data
및 --journal
옵션을 사용합니다.
자세한 내용은 OSD 데이터 준비 및 저널 드라이브 준비 섹션을 참조하십시오.
사전 요구 사항
- 실행 중인 Red Hat Ceph Storage 클러스터.
- 오류가 발생한 디스크.
절차
OSD를 삭제합니다.
ceph osd destroy $OSD_ID --yes-i-really-mean-it
예제
$ ceph osd destroy 1 --yes-i-really-mean-it
교체 디스크를 이전에 사용한 경우 선택적으로 디스크를
zap
해야 합니다.ceph-volume lvm zap $DEVICE
예제
$ ceph-volume lvm zap /dev/sdb
기존 OSD ID를 사용하여 새 OSD를 생성합니다.
ceph-volume lvm create --osd-id $OSD_ID --data $DEVICE
예제
$ ceph-volume lvm create --osd-id 1 --data /dev/sdb