2.3. 단일 복제본이 있는 스토리지 클래스
애플리케이션에서 사용할 단일 복제본이 있는 스토리지 클래스를 생성할 수 있습니다. 이렇게 하면 중복 데이터 사본을 방지하고 애플리케이션 수준에서 복원력을 관리할 수 있습니다.
이 기능을 활성화하면 데이터 복제 없이 단일 복제본 풀이 생성되어 애플리케이션에 자체 복제가 없는 경우 데이터 손실, 데이터 손상 및 잠재적 시스템 불안정의 위험이 증가합니다. OSD가 손실된 경우 이 기능을 사용하려면 복구하기 위해 매우 불충분한 단계가 필요합니다. 모든 분할은 데이터를 손실할 수 있으며 OSD가 실패한 경우 다시 생성해야 합니다.
프로세스
다음 명령을 사용하여 단일 복제본 기능을 활성화합니다.
$ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[\{ "op": "replace", "path": "/spec/managedResources/cephNonResilientPools/enable", "value": true }]'
2.3.1. 단일 복제본에서 OSD 손실 후 복구
복제본 1을 사용하는 경우 OSD가 손실되면 단일 복제본이 있는 스토리지 클래스가 데이터 손실이 보장됩니다.
프로세스
데이터 손실 후 애플리케이션을 다시 실행하려면 다음 복구 단계를 따르십시오.
Error
또는CrashLoopBackoff
상태의 OSD Pod를 찾습니다.$ oc get pods -nopenshift-storage -l app=rook-ceph-osd | grep 'CrashLoopBackOff\|Error'
실패한 OSD가 있는 replica-1 풀을 식별합니다.
오류가 발생한 OSD가 실행 중인 노드를 확인합니다.
failed_osd_id=0 #replace with the ID of the failed OSD
실패한 OSD가 실행 중인 해당 노드의 영역을 확인합니다.
failure_domain=$(oc get storageclass ocs-storagecluster-ceph-non-resilient-rbd -o yaml | grep domainLabel)
domainLabel=$”(oc get pods rook-ceph-osd-$failed_osd_id -o yaml | grep topology-location-$failure_domain:)”
출력에는 풀이 표시됩니다. 예를 들면 다음과 같습니다.
poolName= "ocs-storage cluster-ceph block pool-$domaiLabel”
여기서
$domaiLabel
은 zoneName입니다.
replica-1 풀을 삭제합니다.
toolbox Pod에 연결합니다.
toolbox=$(kubectl get pod -l app=rook-ceph-tools -noperator-namespace -o jsonpath='{.items[*].metadata.name}') oc rsh $toolbox -noperator-namespace
replica-1 풀을 삭제합니다.
ceph osd pool rm replica1-pool-name replica1-pool-name yes-I-really-really-mean-it
실패한 OSD Pod의 배포를 축소합니다.
failed_osd_id=0 #replace with the ID of the failed OSD oc scale deployment -nopenshift-storage rook-ceph-osd-$failed_osd_id --replicas=0
- 위에서 확인한 OSD를 삭제합니다. 장치 교체 가이드의 플랫폼에 따라 "운영 또는 실패한 스토리지 장치 교체 " 섹션의 단계를 사용합니다.
- LSO를 사용하는 플랫폼의 경우 wipe 또는 Replace 디스크입니다.
rook-ceph Operator를 다시 시작합니다.
$ oc delete pod -l rook-ceph-operator -nopenshift-storage
- 해당 avaialbity 영역에서 영향을 받는 애플리케이션을 다시 생성하여 동일한 이름의 새 풀을 사용하기 시작합니다.