2.3. 단일 복제본이 있는 스토리지 클래스
애플리케이션에서 사용할 단일 복제본이 있는 스토리지 클래스를 생성할 수 있습니다. 이렇게 하면 중복 데이터 사본을 방지하고 애플리케이션 수준에서 복원력을 관리할 수 있습니다.
이 기능을 활성화하면 데이터 복제 없이 단일 복제본 풀이 생성되어 애플리케이션에 자체 복제가 없는 경우 데이터 손실, 데이터 손상 및 잠재적 시스템 불안정의 위험이 증가합니다. OSD가 손실된 경우 이 기능을 사용하려면 복구에 매우 중단된 단계가 필요합니다. 모든 애플리케이션은 데이터를 손실할 수 있으며 OSD가 실패한 경우 다시 생성해야 합니다.
프로세스
다음 명령을 사용하여 단일 복제본 기능을 활성화합니다.
$ oc patch storagecluster ocs-storagecluster -n openshift-storage --type json --patch '[{ "op": "replace", "path": "/spec/managedResources/cephNonResilientPools/enable", "value": true }]'
storagecluster
가Ready
상태인지 확인합니다.$ oc get storagecluster
출력 예:
NAME AGE PHASE EXTERNAL CREATED AT VERSION ocs-storagecluster 10m Ready 2024-02-05T13:56:15Z 4.15.0
각 실패 도메인에 대해 새
cephblockpools
가 생성됩니다.cephblockpools
가Ready
상태인지 확인합니다.$ oc get cephblockpools
출력 예:
NAME PHASE ocs-storagecluster-cephblockpool Ready ocs-storagecluster-cephblockpool-us-east-1a Ready ocs-storagecluster-cephblockpool-us-east-1b Ready ocs-storagecluster-cephblockpool-us-east-1c Ready
새 스토리지 클래스가 생성되었는지 확인합니다.
$ oc get storageclass
출력 예:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer true 104m gp2-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 104m gp3-csi ebs.csi.aws.com Delete WaitForFirstConsumer true 104m ocs-storagecluster-ceph-non-resilient-rbd openshift-storage.rbd.csi.ceph.com Delete WaitForFirstConsumer true 46m ocs-storagecluster-ceph-rbd openshift-storage.rbd.csi.ceph.com Delete Immediate true 52m ocs-storagecluster-cephfs openshift-storage.cephfs.csi.ceph.com Delete Immediate true 52m openshift-storage.noobaa.io openshift-storage.noobaa.io/obc Delete Immediate false 50m
새 OSD Pod가 생성됩니다. 3개의 osd-prepare Pod 및 3개의 추가 Pod가 있습니다. 새 OSD Pod가
Running
상태인지 확인합니다.$ oc get pods | grep osd
출력 예:
rook-ceph-osd-0-6dc76777bc-snhnm 2/2 Running 0 9m50s rook-ceph-osd-1-768bdfdc4-h5n7k 2/2 Running 0 9m48s rook-ceph-osd-2-69878645c4-bkdlq 2/2 Running 0 9m37s rook-ceph-osd-3-64c44d7d76-zfxq9 2/2 Running 0 5m23s rook-ceph-osd-4-654445b78f-nsgjb 2/2 Running 0 5m23s rook-ceph-osd-5-5775949f57-vz6jp 2/2 Running 0 5m22s rook-ceph-osd-prepare-ocs-deviceset-gp2-0-data-0x6t87-59swf 0/1 Completed 0 10m rook-ceph-osd-prepare-ocs-deviceset-gp2-1-data-0klwr7-bk45t 0/1 Completed 0 10m rook-ceph-osd-prepare-ocs-deviceset-gp2-2-data-0mk2cz-jx7zv 0/1 Completed 0 10m
2.3.1. 단일 복제본에서 OSD 손실 후 복구
복제본 1을 사용하는 경우 OSD가 손실되면 단일 복제본이 있는 스토리지 클래스가 데이터 손실이 보장됩니다. 손실된 OSD는 실패 상태로 전환됩니다. OSD가 손실된 후 복구하려면 다음 단계를 사용합니다.
프로세스
복제본 1에서 데이터 손실 후 애플리케이션을 다시 실행하려면 다음 복구 단계를 따르십시오. 먼저 실패한 OSD가 있는 도메인을 식별해야 합니다.
실패한 OSD가 있는 장애 도메인을 알고 있는 경우 다음 명령을 실행하여 다음 단계에 필요한
replica1-pool-name
을 가져옵니다. 실패한 OSD가 어디에 있는지 모르는 경우 2 단계로 건너뜁니다.$ oc get cephblockpools
출력 예:
NAME PHASE ocs-storagecluster-cephblockpool Ready ocs-storagecluster-cephblockpool-us-south-1 Ready ocs-storagecluster-cephblockpool-us-south-2 Ready ocs-storagecluster-cephblockpool-us-south-3 Ready
다음 단계에서 사용할 해당 실패 도메인 이름을 복사한 다음 4 단계로 건너뜁니다.
Error
상태 또는CrashLoopBackoff
상태의 OSD Pod를 찾아 실패한 OSD를 찾습니다.$ oc get pods -n openshift-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가 실행 중인 노드의 failureDomainLabel을 식별합니다.
failure_domain_label=$(oc get storageclass ocs-storagecluster-ceph-non-resilient-rbd -o yaml | grep domainLabel |head -1 |awk -F':' '{print $2}')
failure_domain_value=$”(oc get pods $failed_osd_id -oyaml |grep topology-location-zone |awk ‘{print $2}’)”
출력에는 OSD가 실패하는 replica-1 풀 이름이 표시됩니다. 예를 들면 다음과 같습니다.
replica1-pool-name= "ocs-storagecluster-cephblockpool-$failure_domain_value”
여기서
$failure_domain_value
는 failureDomainName입니다.
replica-1 풀을 삭제합니다.
toolbox Pod에 연결합니다.
toolbox=$(oc get pod -l app=rook-ceph-tools -n openshift-storage -o jsonpath='{.items[*].metadata.name}') oc rsh $toolbox -n openshift-storage
replica-1 풀을 삭제합니다. 명령에 replica-1 풀 이름을 두 번 입력해야 합니다. 예를 들면 다음과 같습니다.
ceph osd pool rm <replica1-pool-name> <replica1-pool-name> --yes-i-really-really-mean-it
replica1-pool-name
을 이전에 확인한 실패 도메인 이름으로 교체합니다.
- 장치 교체 가이드의 플랫폼에 따라 "운영 또는 실패한 스토리지 장치 교체" 섹션의 단계에 따라 실패한 OSD를 제거합니다.
rook-ceph Operator를 다시 시작합니다.
$ oc delete pod -l rook-ceph-operator -n openshift-storage
- 해당 avaialbity 영역에서 영향을 받는 애플리케이션을 다시 생성하여 동일한 이름의 새 풀을 사용하기 시작합니다.