4.14. Regional-DR を使用した代替クラスターへの復旧
プライマリークラスターに障害が発生した場合、修復するか、既存のクラスターの回復を待つか、クラスターが交換不可能な場合はクラスター全体を交換するかのオプションが表示されます。このソリューションは、障害が発生したプライマリークラスターを新しいクラスターに置き換えるときにガイドし、この新しいクラスターへのフォールバック (再配置) を有効にします。
この手順では、アプリケーションをインストールして保護した後に、RHACM マネージドクラスターを置き換える必要があることを前提としています。このセクションでは、RHACM マネージドクラスターを 代替クラスター とし、置換されないクラスターを 存続クラスター、新しいクラスターを リカバリークラスター とします。
検出対象アプリケーションの代替クラスターへの復旧は、現在サポートされていません。管理対象アプリケーションのみがサポートされています。
前提条件
- Regional-DR 環境が、Red Hat Advance Cluster Management (RHACM) を使用してインストールされたアプリケーションで設定されている。
- アプリケーションをクラスター障害から保護するデータポリシーが割り当てられている。
手順
- ハブクラスターで、Applications に移動し、障害が発生した代替クラスター上の保護されたすべてのアプリケーションを、存続クラスターにフェイルオーバーします。
次のステップに進む前に、保護されたすべてのアプリケーションが存続クラスター上で実行されていることを確認します。
注記各アプリケーションの
DRPlacementControl
の PROGRESSION 状態には、Cleaning Up
と表示されます。代替クラスターがオフラインの場合またはダウンしている場合、これは想定される動作です。ハブクラスターから、代替クラスター の DRCluster を削除します。
$ oc delete drcluster <drcluster_name> --wait=false
注記DRCluster は後の手順まで削除されないため、
--wait=false
を使用します。存続クラスター上の保護された各アプリケーションの障害復旧を無効にします。次のサブステップは、すべてハブクラスターで実行します。
各アプリケーションについて、Placement を編集し、存続クラスターが選択されていることを確認します。
$ oc edit placement <placement_name> -n <namespace>
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: annotations: cluster.open-cluster-management.io/experimental-scheduling-disable: "true" [...] spec: clusterSets: - submariner predicates: - requiredClusterSelector: claimSelector: {} labelSelector: matchExpressions: - key: name operator: In values: - cluster1 <-- Modify to be surviving cluster name [...]
注記サブスクリプションベースのアプリケーションの場合、関連する Placement は、マネージドクラスターと同様に、ハブクラスター上の同じ namespace にあります。ApplicationSets ベースのアプリケーションの場合、関連する Placement は、ハブクラスター上の
openshift-gitops
namespace にあります。保護されたアプリケーションの VolumeReplicationGroup ごとに、残りのクラスター上で次のコマンドを実行して、代替クラスターの
s3Profile
が削除されていることを確認します。$ oc get vrg -n <application_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jq
保護されたアプリケーションから削除された存続クラスターと代替クラスターの s3Profile を使用するように、保護されたアプリケーションの Placement リソースをすべて設定した後に、ハブクラスター からすべての
DRPlacementControl
(DRPC) リソースを削除します。DRPC を削除する前に、各アプリケーションの DRPC を編集し、アノテーション
drplacementcontrol.ramendr.openshift.io/do-not-delete-pvc: "true"
を追加します。$ oc edit drpc {drpc_name} -n {namespace}
apiVersion: ramendr.openshift.io/v1alpha1 kind: DRPlacementControl metadata: annotations: ## Add this annotation drplacementcontrol.ramendr.openshift.io/do-not-delete-pvc: "true"
保護された各アプリケーションについて、存続クラスター上の関連する
VolumeReplicationGroup
(VRG) にアノテーションがコピーされていることを確認します。$ oc get vrg -n {namespace} -o jsonpath='{.items[*].metadata.annotations}' | jq
DRPC を削除します。
$ oc delete drpc {drpc_name} -n {namespace}
注記サブスクリプションベースのアプリケーションの場合、関連する DRPlacementControl は、ハブクラスター上のマネージドクラスターと同じ namespace にあります。ApplicationSets ベースのアプリケーションの場合、関連する DRPlacementControl は、ハブクラスターの
openshift-gitops
namespace にあります。次の手順に進む前に、すべての DRPlacementControl リソースが削除されていることを確認してください。このコマンドは、すべての namespace を対象にするクエリーです。リソースが見つからないはずです。
$ oc get drpc -A
各アプリケーションの Placement を編集し、アノテーション
cluster.open-cluster-management.io/experimental-scheduling-disable: "true"
を削除します。$ oc edit placement {placement_name} -n {namespace}
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: annotations: ## Remove this annotation cluster.open-cluster-management.io/experimental-scheduling-disable: "true" [...]
- 存続したクラスター上で保護されたアプリケーションごとに、最後のステップとサブステップで説明したプロセスを繰り返します。保護されたアプリケーションの DR の無効化が完了しました。
ハブクラスター で次のスクリプトを実行して、存続クラスター と ハブクラスター からすべての障害復旧設定を削除します。
#!/bin/bash secrets=$(oc get secrets -n openshift-operators | grep Opaque | cut -d" " -f1) echo $secrets for secret in $secrets do oc patch -n openshift-operators secret/$secret -p '{"metadata":{"finalizers":null}}' --type=merge done mirrorpeers=$(oc get mirrorpeer -o name) echo $mirrorpeers for mp in $mirrorpeers do oc patch $mp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $mp done drpolicies=$(oc get drpolicy -o name) echo $drpolicies for drp in $drpolicies do oc patch $drp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $drp done drclusters=$(oc get drcluster -o name) echo $drclusters for drp in $drclusters do oc patch $drp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $drp done oc delete project openshift-operators managedclusters=$(oc get managedclusters -o name | cut -d"/" -f2) echo $managedclusters for mc in $managedclusters do secrets=$(oc get secrets -n $mc | grep multicluster.odf.openshift.io/secret-type | cut -d" " -f1) echo $secrets for secret in $secrets do set -x oc patch -n $mc secret/$secret -p '{"metadata":{"finalizers":null}}' --type=merge oc delete -n $mc secret/$secret done done oc delete clusterrolebinding spoke-clusterrole-bindings
注記このスクリプトでは、コマンド
oc delete project openshift-operators
を使用して、ハブクラスター上のこの namespace にある Disaster Recovery (DR) Operator を削除します。この namespace に他の DR 以外の Operator がある場合は、OperatorHub から再度インストールする必要があります。openshift-operators
namespace が再び作成された後に、障害復旧メトリクスを収集するために monitoring ラベルを追加します。$ oc label namespace openshift-operators openshift.io/cluster-monitoring='true'
存続クラスター で、DR のインストール中に作成されたオブジェクトバケットが削除されていることを確認します。スクリプトによって削除されなかった場合は、オブジェクトバケットを削除します。DR に使用されるオブジェクトバケットの名前は、
odrbucket
で始まります。$ oc get obc -n openshift-storage
RHACM コンソールを使用して、代替クラスター (障害が発生したクラスター) の Submariner だけをアンインストールします。
Infrastructure
Clusters Clustersets Submariner add-ons ビューに移動し、代替クラスターの Submariner だけをアンインストールします。 注記代替クラスター (障害が発生したクラスター) の Submariner のアンインストールプロセスは、代替クラスターが RHACM コンソールからデタッチされるまで、緑色のままになり、完了しません。
- Clusters view に戻り、代替クラスターをデタッチします。
-
新しい OpenShift クラスター (リカバリークラスター) を作成し、Infrastructure
Clusters view にインポートします。 -
Submariner が使用する
Clusterset
に新しいリカバリークラスターを追加します。 新しい リカバリークラスター に対してのみ Submariner アドオン をインストールします。
注記存続クラスターに GlobalNet が使用されている場合は、リカバリークラスターでも GlobalNet を有効にしてください。
リカバリークラスター に OpenShift Data Foundation をインストールします。OpenShift Data Foundation のバージョンは、OpenShift Data Foundation 4.16 (またはそれ以上) であり、存続クラスターと同じバージョンの ODF である必要があります。ストレージクラスターの作成中に、Data Protection ステップで、Prepare cluster for disaster recovery (Regional-DR only) チェックボックスを選択する必要があります。
注記Submariner のインストール時に GlobalNet を有効にした場合は、ドキュメントのオプションの手順に従って、必ずリカバリークラスター上の OpenShift Data Foundation ストレージクラスターを変更してください。
- ハブクラスター で、OperatorHub から ODF Multicluster Orchestrator Operator をインストールします。手順は、OpenShift Data Foundation Multicluster Orchestrator Operator のインストール の章を参照してください。
RHACM コンソールを使用して、Data Services
Disaster recovery Policies タブに移動します。 - Create DRPolicy を選択し、ポリシーに名前を付けます。
- リカバリークラスター と 存続クラスター を選択します。
- ポリシーを作成します。手順は、ハブクラスターでの障害復旧ポリシーの作成 の章を参照してください。
DRPolicy のステータスが
Validated
に変更された後にのみ、次の手順に進みます。cephblockpool
の ID が変更されていないことを確認します。リカバリークラスター で次のコマンドを実行します。
$ oc get cm -n openshift-storage rook-ceph-csi-mapping-config -o yaml
この結果はサンプルの出力です。
apiVersion: v1 data: csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"1"}]}]' kind: ConfigMap [...]
存続クラスター で次のコマンドを実行します。
$ oc get cm -n openshift-storage rook-ceph-csi-mapping-config -o yaml
この結果はサンプルの出力です。
apiVersion: v1 data: csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"3":"1"}]}]' kind: ConfigMap [...]
両方のクラスターの yaml 内の
RBDPoolIDMapping
を確認します。RBDPoolIDMapping
が一致しない場合は、次の例に示すように、リカバリークラスター のrook-ceph-csi-mapping-config
config map を編集して、追加または不足しているRBDPoolIDMapping
を直接追加します。csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"1"}]},{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"3"}]}]’
注記configmap を編集した後、Pod を削除して、存続クラスターの namespace
openshift-storage
内の rook-ceph-operator Pod を再起動してください。
- 代替クラスターに障害が発生する前に元々保護されていた、存続クラスター上のアプリケーションに DRPolicy を適用します。
- 存続クラスター 上の新しい保護されたアプリケーションを新しい リカバリークラスター に再配置します。RHACM コンソールを使用して、Applications メニューに移動して再配置を実行します。
このプロセスの実行中に問題が発生した場合は、Red Hat カスタマーサポート にお問い合わせください。