PGDGroup parting#
削除とファイナライザー#
PGDグループを削除する場合、オペレーターは最初にグループ内のすべてのノードの分割を開始します。アクティブなインスタンスに接続し、ターゲットグループ内のすべてのノードを分割します。ノードが分離されると、レプリケーションとコンセンサス操作に参加しなくなります。ノードが削除される前に正しく分割されることを確認するために、オペレーターはk8s.pgd.enterprisedb.io/partNodes
ファイナライザーを使用します。状況については、 kubernetes document on finalizers を参照してください。
注釈
PGDグループを保持する名前空間が直接削除される場合、削除と分割シーケンスが正しく実行されることを保証できません。名前空間を削除する前に、含まれるすべてのPGDグループを削除することをお勧めします。
制限時間#
ノードを分離するとき、オペレーターはアクティブなインスタンスに接続してbdr.part_node
ファンクションを実行する必要があります。この操作のハングを回避するために、ファイナライザーの時間制限が使用されます。デフォルトでは300秒です。時間制限が経過すると、ファイナライザーが削除され、いずれにせよノードが削除されます。グローバルPGDカタログに古いメタデータが残る可能性があります。この時間制限は、秒単位で指定されるspec.failingFinalizerTimeLimitSeconds
を介して構成できます。
ファイナライザーをスキップ#
テスト目的のみで、オペレーターはファイナライザーk8s.pgd.enterprisedb.io/noFinalizers
をスキップするためのアノテーションも提供します。このアノテーションがPGDグループに追加されると、PGDグループが削除されるときにファイナライザーがスキップされ、ノードはPGDクラスターから分離されません。
PGDグループのクリーンアップ#
分割されたノードのクリーンアップ#
PGDGroupが削除されると、そのメタデータは、bdr.node_summary
テーブルのPARTED 状態でカタログに残ります。 PGD4Kオペレーターは、
PGDGroupCleanup という名前のCRDを定義して、PARTED
PGDGroupのクリーンアップに役立ちます。
以下の例では、 PGDGroupCleanup はregion-a
からローカルに実行され、すべてのノードがPARTED
状態である必要があるという前提条件で、すべてのリージョンbをクリーンアップします。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroupCleanup
metadata:
name: region-b-cleanup
spec:
executor: region-a
target: region-b
ターゲットグループこの例ではregion-b にPARTED
状態にないノードが含まれている場合、グループクリーンアップはPGDGroupCleanup - Target PGDGroup is not parted, waiting for it to be parted before executing PGDGroupCleanup
フェーズで停止することに注意してください。非常に必要な場合は、force
オプションを追加できます。
警告
force を使用すると、PGDクラスターが一貫性のない状態のままになる場合があります。他の方法でグループノードを分離できない障害から回復するためにのみ使用します。
apiVersion: pgd.k8s.enterprisedb.io/v1beta1
kind: PGDGroupCleanup
metadata:
name: region-b-cleanup
spec:
force: true
executor: region-a
target: region-b