セッション状態のfailover

Bruce Momjian October 23, 2017

サーバー側では、高可用性とはスタンバイハードウェアに素早く フェールオーバー できる能力を持ち、うまくいけばデータが失われないことを意味します。クライアント側でのフェイルオーバーの動作は、より微妙なものになります。

例えば、failoverが発生した場合、接続しているクライアントはどうなるでしょうか?接続プーラーが使用されていない場合、失敗したマシンに接続されているクライアントは、データベース作業を続行するために新しいサーバーに再接続する必要があります。failover手順では、障害が発生したサーバーへのすべての接続が終了し、新しい接続が確立されないことを保証する必要があります。(障害の発生したサーバーに再接続すると、結果が不正確になり、変更が失われる可能性があります。)クライアントがプライマリに昇格されたスタンバイに接続されている場合、既存のクライアント接続と新しい接続は、読み書き可能です。

クライアントは、仮想IPアドレス(vip、良好なブログエントリ)、または短い有効期限(ttl)でのdnsエントリ(ttl)のいずれかで、オペレーティングシステム固有の方法で新しいプライマリに接続します。これは通常、専用の高可用性またはclusteringソフトウェアを使用して実行されます。Postgres 10では、クライアントが複数のホスト名を試すこともできます。

接続プールを使用しているクライアントの場合、状況はさらに複雑になります。論理的には、クライアントは障害の発生したサーバーに直接接続していないため、同じセッションで途切れることなくクエリーを続けることができるはずです。しかし、これは一般的なケースではありません。

まず、クライアントが障害中にクエリーを実行していた可能性があるため、クライアントがクエリーを再試行できるように、クエリーエラーコードをクライアントに返す必要があります(クエリーの再試行ロジックが、アプリケーションに組み込まれていると仮定します)。二番目に、セッションがトランザクション・ブロックの途中にあった可能性があります。つまり、トランザクションの一部であったすべてのクエリーを再送信する必要があります(クライアントにそのような再試行ロジックがあると仮定します)。三番目に、いくつかのサーバー・コンフィグレーション・パラメータがセッション・レベルで変更されている可能性があります。クライアントは、適切な操作のためにこれらの設定に依存している可能性があるため、新しいセッションで再変更する必要があります。四番目に、再作成が必要な追加のセッション状態である可能性があります。廃棄マニュアルページを調べることで、可能なセッション状態の変更を知ることができます。

これは、クライアントが接続プーラーを継続することを可能にするための多くの困難に思えるかもしれませんが、事実その通りです。どのPostgresプーリングツールも、中断のないfailoverを可能にすることはできません。Pgpoolは自動的にすべてのクライアントの接続を切断し、再接続を可能にします。(pgpool 3.6以降では、実行中のスタンバイ・サーバーに接続されているクライアントは影響を受けません)。PgBouncerはfailoverを検出しません。

多くのクエリーは過去のクエリーの結果に依存するため、クライアントに対しfailoverが途切れることがないような限られた場合に実行する時でも、接続プーラーはセッション状態の変更、クライアントのクエリー、さらにはクライアントの結果を記録する必要があります。例:アップグレードのために選択。このすべての追跡が実行されたとしても、変更されたクエリー結果は、中断のない動作を不可能にします。この複雑さをすべて勘案すると、failoverに対する標準的なアプローチが、セッション状態の再接続、リセット、および今後のクエリーが依存するすべてのクエリの再実行によって、クライアントがそのようなケースを処理するようにプログラムされることは、驚くようなことではありません。

Bruce Momjian氏は、EnterpriseDBの上級データベース設計者です。 

このポストはもともとBruceの個人的な投稿です。blog

Bruce Momjian

Bruce Momjian is a co-founder of the PostgreSQL Global Development Group, and has worked on PostgreSQL since 1996 as a committer and community leader. He is a frequent speaker and Postgres evangelist and travels worldwide appearing at conferences to help educate the community on the business value of Postgres advances and new technology enhancements. He is the author of PostgreSQL: Introduction and Concepts, published by Addison-Wesley.