フェンシング¶
CloudNativePG のフェンシングは、PostgreSQL クラスターの 1
つ、複数、またはすべてのインスタンスのデータが誤動作しているように見える場合に、そのデータを保護する究極のプロセスです。インスタンスがフェンシングされると、ポッドが実行され続けている間、PostgreSQL
サーバー プロセス (postmaster )
がシャットダウンされることが保証されます。これにより、フェンスが解除されるまで、Pod
上のデータが PostgreSQL
によって変更されず、デバッグやトラブルシューティングの目的でファイル
システムを調査できることが保証されます。
インスタンスをフェンシングする方法¶
CloudNativePG では、以下をフェンシングできます。
特定のインスタンス
インスタンスのリスト
Postgres
Cluster全体
フェンシングは、cnpg.io/fencedInstances
アノテーションの内容によって制御されます。これは、インスタンス名の JSON
形式のリストを想定しています。注釈が '["*"]'
(ワイルドカードを含むシングルトン リスト)
に設定されている場合、クラスター全体がフェンシングされます。アノテーションが空の
JSON
リストに設定されている場合、オペレーターはアノテーションが設定されていないかのように動作します。
例えば:
cnpg.io/fencedInstances: '["cluster-example-1"]'はcluster-example-1インスタンスのみをフェンスしますcnpg.io/fencedInstances: '["cluster-example-1","cluster-example-2"]'はcluster-example-1およびcluster-example-2インスタンスをフェンスしますcnpg.io/fencedInstances: '["*"]'は、クラスター内のすべてのインスタンスをフェンシングします。
注釈は、たとえば kubectl annotate コマンドを使用して、または
kubectl cnpg fencing on
サブコマンドを使用して透過的な方法で、Kubernetes
オブジェクトに手動で設定できます。
# to fence only one instance
kubectl cnpg fencing on cluster-example 1
# to fence all the instances in a Cluster
kubectl cnpg fencing on cluster-example "*"
以前にフェンシングされたインスタンスを持つ Cluster
の例を次に示します。
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
annotations:
cnpg.io/fencedInstances: ["cluster-example-1"]
[...]
フェンシングの持ち上げ方¶
フェンシングは、注釈をクリアするか、別の値に設定することで解除できます。
フェンシングに関しては、これは kubectl annotate
を使用して手動で行うか、次のように kubectl cnpg fencing
サブコマンドを使用して行うことができます。
# to lift the fencing only for one instance
# N.B.: at the moment this wont work if the whole cluster was fenced previously,
# in that case you will have to manually set the annotation as explained above
kubectl cnpg fencing off cluster-example 1
# to lift the fencing for all the instances in a Cluster
kubectl cnpg fencing off cluster-example "*"
フェンシングの仕組み¶
インスタンスがフェンシング用に設定されると、postmaster
プロセスをシャットダウンする手順が開始されます。これは、タイムアウトが
.spec.stopDelay に設定された最初のスマート
シャットダウンと、その後の必要に応じた高速シャットダウンで構成されます。それから:
Pod は存続します
Pod は Ready としてマークされません
Postgres インスタンスの起動を必要としないすべての変更が調整されます。これには以下が含まれます。 - 構成ファイル - 証明書とすべての暗号化マテリアル
1 に設定される
cnpg_collector_fencing_onを除いて、メトリクスは収集されません
警告
**プライマリ インスタンス**がフェンスされている場合、そのポストマスター プロセスはシャットダウンされますが、フェイルオーバーは実行されず、アプリケーションの操作性が中断されます。フェンスが解除されると、フェイルオーバーを実行せずにプライマリ インスタンスが再起動されます。
そのため、厳密に必要な場合にのみプライマリ インスタンスをフェンシングすることをお勧めします。
フェンシングされたインスタンスが削除された場合、ポッドは正常に再作成されますが、postmaster
は開始されません。これは、インスタンスが Crashlooping
の場合に非常に役立ちます。