2.3. レプリカを 1 つ含まれるストレージクラス
アプリケーションで使用するレプリカが 1 つ含まれるストレージクラスを作成できます。これにより、冗長なデータコピーが回避され、アプリケーションレベルでの復元管理が可能になります。
この機能を有効にすると、データレプリケーションのない単一のレプリカプールが作成され、アプリケーションに独自のレプリケーションがない場合は、データ損失、データ破損、および潜在的なシステム不安定のリスクが増加します。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
各障害ドメインに新しい
cephblockpool
が作成されます。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 に進みます。
障害が発生している OSD を見つけるには、
Error
状態またはCrashLoopBackOff
状態の OSD Pod を見つけます。$ 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 プール名を 2 回入力する必要があることに注意してください。次に例を示します。
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
- 影響を受けるアプリケーションをそのアベイラビリティーゾーン内に再作成して、同じ名前の新しいプールの使用を開始します。