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