Failover Manager with EDB Pgpool-II¶
Pgpool-IIは、読み取り専用トラフィックの負荷分散、接続プーリング、クラスター化プロキシとしての実行など、多くの機能を提供できる一般的な接続プーラーです。フェールオーバーマネージャーで可用性を管理し、正しいプライマリにプロキシするようにEDB Pgpool-IIを再構成すると、セットアップはオンプレミスセットアップとクラウドセットアップで高可用性を提供できます。
オンプレミスのEDB Pgpool-IIを使用したフェールオーバーマネージャー¶
オンプレミスセットアップの場合、VIPを使用して、トラフィックを使用可能なEDB Pgpool-IIインスタンスにルーティングできます。このセットアップでは、EDB Pgpool-IIの自動フェイルオーバーは無効になっており、フェールオーバーマネージャーはEDB Pgpool-IIを管理するように構成されています。
Failover Manager with Pgpool on-premises¶
図5:オンプレミスのEDB Pgpool-IIを使用したフェールオーバーマネージャーのトラフィックルーティング
クラウド内のEDB Pgpool-IIを使用したフェールオーバーマネージャー¶
ネットワークロードバランサーを使用する環境(クラウド環境など)では、ネットワークロードバランサー(NLB)を使用して、VIPを必要とせずに、使用可能なすべてのEDB Pgpool-IIインスタンスにトラフィックを分散できます。
Failover Manager with Pgpool in cloud¶
図6:クラウドでEDB Pgpool-IIを使用したフェールオーバーマネージャーのトラフィックルーティング
EDB Pgpool-IIでのフェールオーバーマネージャーの使用¶
インストール¶
次のようにAdvanced Serverデータベース、Failover Manager、およびEDB Pgpool-IIをインストールして構成します。
Systems |
Components |
|---|---|
PgDB server 1, server2, and server 3 |
Primary / standby node running Advanced Server 13 and Failover Manager 4.2 |
EDB Pgpool-II |
Pgpool node running EDB Pgpool-II 4.2 in a watchdog configuration. Register these three nodes as targets in the target group. Three is the minimum and is sufficient for most cases. |
EDBは、次の理由により、EDB Pgpool-IIとフェールオーバーマネージャー/ PostgreSQLが同じマシンで実行されているこのアーキテクチャをサポートしていません。
ソースと宛先が同じマシンにある場合、クラウドネットワークロードバランサーの制限により、トラフィックが適切にルーティングされません。
混合アーキテクチャでは、PgpoolとPostgres間のトラフィックがアンバランスになる場合があります。
PgpoolとPostgreSQLがリソースを競合する可能性があります。
フェールオーバーマネージャーの構成¶
フェールオーバーマネージャーは、障害が発生したデータベースノードをEDB Pgpool-II負荷分散から削除できます。また、フェールオーバーマネージャークラスターに戻ったときに、ノードをEDB Pgpool-IIに再接続できます。 EDB Pgpool-IIを使用して高可用性を実現するようにフェールオーバーマネージャーを構成するには、クラスタープロパティファイルで次のプロパティを設定する必要があります。
pgpool.enable = true
pcp.user = User invoking PCP commands
pcp.host = Virtual IP of EDB Pgpool-II or IP of NLB
pcp.port = 9898
pcp.pass.file = Absolute path of PCPPASSFILE
pgpool.bin = Absolute path of pgpool bin directory
EDB Pgpool-IIの構成¶
pgpool.conf ファイルでいくつかの重要なパラメーターを構成して、EDB
Pgpool-IIをフェールオーバーマネージャーと統合できます。
バックエンドノード設定¶
3つのPostgreSQLバックエンドノードがあります。1つのプライマリノードと2つのスタンバイノードです。
pgpool.conf
のbackend_*構成パラメーターを使用して構成し、すべてのノードに等しいバックエンドの重みを使用します。これにより、読み取りクエリがすべてのノードに均等に分散されます。
backend_hostname0 = server1_IP
backend_port0 = 5444
backend_weight0 = 1
backend_flag0 = ALLOW_TO_FAILOVER
backend_hostname1 = server2_IP
backend_port1 = 5444
backend_weight1 = 1
backend_flag1 = ALLOW_TO_FAILOVER
backend_hostname2 = server3_IP
backend_port2 = 5444
backend_weight2 = 1
backend_flag2 = ALLOW_TO_FAILOVER
ロードバランシングとストリーミングレプリケーションモードの有効化¶
pgpool.conf
ファイルで次の構成パラメーターを設定して、ロードバランシングとストリーミングレプリケーションモードを有効にします。
EDB Pgpool-IIバージョン4.2の場合:
backend_clustering_mode = streaming_replication
load_balance_mode = on
4.2より前のEDB Pgpool-IIバージョンの場合:
master_slave_mode = on
master_slave_sub_mode = stream
load_balance_mode = on
ヘルスチェックとフェイルオーバーの無効化¶
ヘルスチェックとフェールオーバーはFailover Managerによって処理されるため、EDB Pgpool-II側で無効にします。 EDB Pgpool-II側でヘルスチェックとフェイルオーバーを無効にするには、次の値を割り当てます。
health_check_period = 0
failover_on_backend_error = off
failover_if_affected_tuples_mismatch = off
failover_command =
failback_command =
pgpool.confファイルの値を設定する際には、次のことを確認してください。
pgpool.confのwd_priorityの値は、各ノードで異なるようにします。値が最も高いノードが最高の優先順位を取得します。プロパティ
backend_hostname0、backend_hostname1、backend_hostname2などは共有プロパティ(フェールオーバーマネージャーの用語)であり、すべてのEDB Pgpool-IIノードのpgpool.confファイルで同じ値を保持する必要があります。pgpool.confファイルのif_ *およびarpingcmd小道具の正しいインターフェイス値を更新します。すべてのノードの
pgpool.confファイル内のノード数に応じて、プロパティheartbeat_destination0、heartbeat_destination1、heartbeat_destination2などを追加します。ここでheartbeat_destination0をローカルノードのIPアドレスまたはホスト名に設定します。
PCPの設定¶
スクリプトはPCPインターフェイスを使用するため、パスワードプロンプトなしでPCP接続を許可するには、PCPおよび.PCPPASS
ファイルを設定する必要があります。
PCPをセットアップするには、次を参照してください。 Configuring pcp.conf 。
PCPPASSを設定するには、次を参照してください。 PCP commands 。
ロードバランシングがオンになって、スタンバイノード全体に読み取りトラフィックを分散することにより、読み取りのスケーラビリティを確保します。
フェールオーバーマネージャーは、ヘルスチェックの実行とフェールオーバーのトリガーを担当するため、ヘルスチェックとエラートリガーのバックエンドフェールオーバーはオフになります。この場合、フェールオーバーマネージャーとの競合またはフェールオーバーの時期尚早の実行を回避するために、EDB Pgpool-IIを使用してヘルスチェックを実行することはお勧めしません。
最後に、 search_primary_node_timeout
を低い値に設定して、フェールオーバーマネージャーによってトリガーされるフェールオーバー時にEDB
Pgpool-IIサービスの迅速な回復を保証します。
仮想IPアドレスの使用¶
EDB Pgpool-IIとフェールオーバーマネージャーはどちらも、シームレスなフェールオーバーのために仮想IPを採用する機能を提供します。どちらもこの機能を提供しますが、 EDB Pgpool-IIリーダーは、仮想IPを介してアプリケーション接続を受信するプロセスです。このデザインのように、そのような仮想IP管理はEDB Pgpool-IIウォッチドッグシステムによって実行されます。 Failover Manager VIPはこの設計では役に立たないため、無効にします。
EDB Pgpool-IIのアクティブインスタンス(サンプルアーキテクチャのプライマリEDB Pgpool-IIサーバー)の障害状況では、次に利用可能なスタンバイEDB Pgpool-IIインスタンス(ウォッチドッグ優先度による)がアクティブ化され、リーダーとして担当しますEDB Pgpool-IIインスタンス。
ネットワークロードバランサーの構成¶
AWSまたはAzureのネットワークロードバランサーを使用したFailover Manager / EDB Pgpool-II統合の場合、いくつかの追加手順を実行する必要があります。
EDB Pgpool-IIインスタンスが使用するセキュリティグループに次のルールを追加します。
・ EDB Pgpool-IIインスタンス(SG Pgpool)が利用するセキュリティグループのルール
Type |
Protocol |
Port range |
Source |
Description |
|---|---|---|---|---|
Custom TCP |
TCP |
9000 |
Entire Subnet |
ウォッチドッグ |
Custom TCP |
TCP |
9694 |
Entire Subnet |
ハートビート |
Custom TCP |
TCP |
9898 |
Entire Subnet |
PCP |
Custom TCP |
TCP |
9999 |
Entire Subnet |
Pgpool |
これらのルールに加えて、要件に応じてSSHとPingのルールを追加します。
データベースインスタンス(SG DB)が使用するセキュリティグループのルール:
Type |
Protocol |
Port range |
Source |
Description |
|---|---|---|---|---|
Custom TCP |
TCP |
7800 |
Entire Subnet |
フェールオーバーマネージャー |
Custom TCP |
TCP |
5444 |
Entire Subnet |
Postgres |
該当なし |
これらのルールを設定すると、データベース、フェールオーバーマネージャー、およびEDB Pgpool-IIの実行に必要なポートが、トラフィックルーティングとヘルスモニタリングのためにノードとロードバランサー間の通信用に開かれます。
これらのルールに加えて、要件に応じてSSHとPingのルールを追加します。
AzureでNLBを構成する¶
AWSを使用している場合、 AWSでNLBを設定する を参照してください。
Configuring the network load balancerで説明されているセキュリティグループルールを構成した後、Azureのドキュメントに従って、次のことを行います。
EDB Pgpool-IIインスタンスを実行しているすべての仮想マシンで構成されるバックエンドプールを作成します。仮想マシンのプライベート IP を使用して、バックエンド プールを作成します。
ヘルスプローブを追加して、EDB Pgpool-IIインスタンスが仮想マシンで利用できるかどうかを確認します。プロトコルを
TCPに、ポートを9999に設定します。ポート
9898とポート9999にそれぞれ1つずつ、2つの負荷分散ルールを追加します。これらのルールにより、そのポートに向かうネットワークトラフィックが、バックエンドプールに存在するすべての仮想マシンに均等に分散されます。タイプをPublicロードバランサーまたはInternalロードバランサーに設定します。
これらの構成を完了した後、ポート9999のネットワークロードバランサーのIPアドレスでデータベースに接続できます。プライマリデータベースサーバーで障害が発生すると、フェールオーバーマネージャーは新しいプライマリを昇格し、EDB
Pgpool-IIを再構成してトラフィックを再配布します。 。 EDB
Pgpool-IIプロセスのいずれかがトラフィックを受け入れることができない場合、ネットワークロードバランサーはすべてのトラフィックを残りの2つのEDB
Pgpool-IIプロセスに再分散します。 listen_backlog_multiplier
パラメーターが、フェイルオーバーの場合に多数の接続を補償するように調整されていることを確認してください。
AWSでNLBを設定する¶
サンプル構成では、次の前提が取られています。
すべてのEC2インスタンスとロードバランサーが同じサブネットにデプロイされます。必要に応じて、データベースノードを別のサブネットに追加できますが、これにはより複雑な構成が必要であり、パフォーマンスに影響を与える可能性があります。
EDB Pgpool-IIのセキュリティグループとデータベースインスタンスのセキュリティグループがあります。
Configuring the network load balancerで説明されているセキュリティグループルールを構成した後、AWSのドキュメントに従って、次のことを行います。
次の詳細で2つのターゲットグループを作成します。
Name |
Type |
Protocol |
Port |
VPC |
|---|---|---|---|---|
pcp |
Instances |
TCP |
9898 |
Select the VPC to which the instances are connected. |
pgpool |
Instances |
TCP |
9999 |
Select the VPC to which the instances are connected. |
残りの設定( ヘルスチェックTCP および 高度なヘルスチェック 設定)はデフォルトのままにします。
作成したターゲットグループをPgBouncerを実行しているインスタンスに登録します。
次の詳細でロードバランサーを作成します。
Type |
VPC |
Listener |
|---|---|---|
Public or Internal. EDB recommends using an internal load balancer. |
Choose a VPC and map it to the desired zones. |
Create a listener with TCP set to 9898, and forward it to the target group pcp. Create another listener with TCP set to 9999, and forward it to the target group pgpool. |
構成が完了したら、ポート9999でネットワークロードバランサーのIPアドレスのデータベースに接続できます。プライマリデータベースサーバーで障害が発生すると、フェールオーバーマネージャーは新しいプライマリを昇格し、EDB
Pgpool-IIを再構成してトラフィックを再配布します。 。 EDB
Pgpool-IIプロセスのいずれかがトラフィックを受け入れることができない場合、ネットワークロードバランサーはすべてのトラフィックを残りの2つのEDB
Pgpool-IIプロセスに再分散します。 listen_backlog_multiplier
がフェイルオーバーの場合に多数の接続を補償するように調整されていることを確認してください。