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

Failover Manager with Pgpool on-premises

図5:オンプレミスのEDB Pgpool-IIを使用したフェールオーバーマネージャーのトラフィックルーティング

クラウド内のEDB Pgpool-IIを使用したフェールオーバーマネージャー

ネットワークロードバランサーを使用する環境(クラウド環境など)では、ネットワークロードバランサー(NLB)を使用して、VIPを必要とせずに、使用可能なすべてのEDB Pgpool-IIインスタンスにトラフィックを分散できます。

Failover Manager with Pgpool in cloud

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_ * およびarping cmd小道具の正しいインターフェイス値を更新します。

  • すべてのノードの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 がフェイルオーバーの場合に多数の接続を補償するように調整されていることを確認してください。