第13章 OpenShift Data Foundation での ceph-monitor クォーラムの復元
状況によっては、ceph-mons がクォーラムを失う可能性があります。mons が再びクォーラムを形成できない場合は、クォーラムを再度取得する手動の手順があります。唯一の要件は、1 つ以上の mon が正常である必要があることです。以下の手順は、正常でない mon をクォーラムから削除し、単一の mon でクォーラムを再度作成してから、クォーラムを元のサイズに戻すことができます。
たとえば、3 つの mons があり、クォーラムが失われる場合は、クォーラムから 2 つの悪い mons を削除して、適切な mon がクォーラムの唯一の mon であることを通知してから、適切なmon を再起動する必要があります。
手順
monmapを変更する場合にmonsがフェイルオーバーしないように、rook-ceph-operatorを停止します。oc -n openshift-storage scale deployment rook-ceph-operator --replicas=0
# oc -n openshift-storage scale deployment rook-ceph-operator --replicas=0Copy to Clipboard Copied! Toggle word wrap Toggle overflow 新しい
monmapを注入します。警告monmapは非常に慎重に注入する必要があります。誤って実行すると、クラスターは永続的に破棄される可能性があります。Cephmonmapは、monクォーラムを追跡します。monmapは、正常な mon のみが含まれるように更新されます。この例では、正常な mon はrook-ceph-mon-bですが、正常でないmonはrook-ceph-mon-aおよびrook-ceph-mon-cになります。現在の
rook-ceph-mon-bデプロイメントのバックアップを作成します。oc -n openshift-storage get deployment rook-ceph-mon-b -o yaml > rook-ceph-mon-b-deployment.yaml
# oc -n openshift-storage get deployment rook-ceph-mon-b -o yaml > rook-ceph-mon-b-deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow YAML ファイルを開き、コマンド および 引数 を
monコンテナーからコピーします (以下の例の containers リストを参照)。これは、monmapの変更に必要です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow コピーした
commandおよびargsフィールドを、以下のように貼り付け可能なコマンドを形成するためにクリーンアップします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記--log-stderr-prefixフラグおよび括弧の周りの一重引用符を必ず削除し、ROOK_CEPH_MON_HOST、ROOK_CEPH_MON_INITIAL_MEMBERS、およびROOK_POD_IP) に渡されます。rook-ceph-mon-bデプロイメントにパッチを適用し、monPod を削除せずにこのmonの作業を停止します。oc -n openshift-storage patch deployment rook-ceph-mon-b --type='json' -p '[{"op":"remove", "path":"/spec/template/spec/containers/0/livenessProbe"}]' oc -n openshift-storage patch deployment rook-ceph-mon-b -p '{"spec": {"template": {"spec": {"containers": [{"name": "mon", "command": ["sleep", "infinity"], "args": []}]}}}}'# oc -n openshift-storage patch deployment rook-ceph-mon-b --type='json' -p '[{"op":"remove", "path":"/spec/template/spec/containers/0/livenessProbe"}]' # oc -n openshift-storage patch deployment rook-ceph-mon-b -p '{"spec": {"template": {"spec": {"containers": [{"name": "mon", "command": ["sleep", "infinity"], "args": []}]}}}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow mon-bPod で以下の手順を実行します。正常な
monの Pod に接続し、以下のコマンドを実行します。oc -n openshift-storage exec -it <mon-pod> bash
# oc -n openshift-storage exec -it <mon-pod> bashCopy to Clipboard Copied! Toggle word wrap Toggle overflow 変数を設定します。
monmap_path=/tmp/monmap
# monmap_path=/tmp/monmapCopy to Clipboard Copied! Toggle word wrap Toggle overflow ceph
monを適切なmonデプロイメントから貼り付け、--extract-monmap=${monmap_path}フラグを追加して、monmapをファイルにデプロイメントします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow monmapの内容を確認します。monmaptool --print /tmp/monmap
# monmaptool --print /tmp/monmapCopy to Clipboard Copied! Toggle word wrap Toggle overflow monmapから不正なmonsを削除します。monmaptool ${monmap_path} --rm <bad_mon># monmaptool ${monmap_path} --rm <bad_mon>Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、
mon0およびmon2を削除します。monmaptool ${monmap_path} --rm a monmaptool ${monmap_path} --rm c# monmaptool ${monmap_path} --rm a # monmaptool ${monmap_path} --rm cCopy to Clipboard Copied! Toggle word wrap Toggle overflow ceph
monコマンドを貼り付け、--inject-monmap=${monmap_path}フラグを以下のように追加することで、変更したmonmapを適切なmonに挿入します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - シェルを終了して続行します。
Rook
configmapsを編集します。Operator が
monを追跡するのに使用するconfigmapを編集します。oc -n openshift-storage edit configmap rook-ceph-mon-endpoints
# oc -n openshift-storage edit configmap rook-ceph-mon-endpointsCopy to Clipboard Copied! Toggle word wrap Toggle overflow data 要素で、以下のような 3 つの
mon(またはmoncountに応じて) が表示されることを確認します。data: a=10.100.35.200:6789;b=10.100.13.242:6789;c=10.100.35.12:6789
data: a=10.100.35.200:6789;b=10.100.13.242:6789;c=10.100.35.12:6789Copy to Clipboard Copied! Toggle word wrap Toggle overflow リストから問題の
monを削除し、末尾に適切なmonを 1 つ削除します。以下に例を示します。data: b=10.100.13.242:6789
data: b=10.100.13.242:6789Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ファイルを保存して終了します。
ここで、
monsおよびその他のコンポーネントに使用されるSecretを調整する必要があります。変数
good_mon_idの値を設定します。以下に例を示します。
good_mon_id=b
# good_mon_id=bCopy to Clipboard Copied! Toggle word wrap Toggle overflow oc patchコマンドを使用して、rook-ceph-configシークレットにパッチを適用し、mon_hostおよびmon_initial_membersの 2 つのキー/値のペアを更新できます。mon_host=$(oc -n openshift-storage get svc rook-ceph-mon-b -o jsonpath='{.spec.clusterIP}') oc -n openshift-storage patch secret rook-ceph-config -p '{"stringData": {"mon_host": "[v2:'"${mon_host}"':3300,v1:'"${mon_host}"':6789]", "mon_initial_members": "'"${good_mon_id}"'"}}'# mon_host=$(oc -n openshift-storage get svc rook-ceph-mon-b -o jsonpath='{.spec.clusterIP}') # oc -n openshift-storage patch secret rook-ceph-config -p '{"stringData": {"mon_host": "[v2:'"${mon_host}"':3300,v1:'"${mon_host}"':6789]", "mon_initial_members": "'"${good_mon_id}"'"}}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記hostNetwork: trueを使用している場合は、mon_host変数をmonがピニングされるノード IP (nodeSelector) に置き換える必要があります。これは、対象の “mode” で作成されたrook-ceph-mon-*サービスがないためです。
monを再起動します。変更を取得するには、元の
ceph-monコマンドで適切なmonPod を再起動する必要があります。monデプロイメント YAML ファイルのバックアップでoc replaceコマンドを使用します。oc replace --force -f rook-ceph-mon-b-deployment.yaml
# oc replace --force -f rook-ceph-mon-b-deployment.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注記--forceオプションはデプロイメントを削除し、新たに作成します。クラスターのステータスを確認します。
ステータスは、クォーラムの
monが 1 つ表示されるはずです。ステータスが適切であれば、クラスターは再度正常であるはずです。
クォーラムにある 2 つの mon デプロイメントを削除します。
以下に例を示します。
oc delete deploy <rook-ceph-mon-1> oc delete deploy <rook-ceph-mon-2>
# oc delete deploy <rook-ceph-mon-1> # oc delete deploy <rook-ceph-mon-2>Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、削除するデプロイメントは
rook-ceph-mon-aおよびrook-ceph-mon-cです。Operator を再起動します。
rook Operator を再び起動し、クラスターの健全性の監視を再開します。
注記多数のリソースがすでに存在するエラーを無視するのは安全です。
oc -n openshift-storage scale deployment rook-ceph-operator --replicas=1
# oc -n openshift-storage scale deployment rook-ceph-operator --replicas=1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Operator は
monsをさらに追加し、mon数に応じて再びクォーラムサイズを増やします。