Closed3

pgpollとは(概要)

ピン留めされたアイテム
ebi_yuebi_yu

前提となる用語理解

pool(プール)

すぐに使うことになりそうリソースを一時的に溜めておく仕組み

  • 接続プール
    • データベースやサーバーへの接続をプール化して管理すること。
    • 接続の確立と解除に要する時間とリソースを節約し、システムのパフォーマンスを向上させます。
  • スレッドプール
    • プログラムやアプリケーションで使用されるスレッドの集合を管理する方法。
    • スレッドを事前に作成しプールしておくことで、必要に応じて迅速にアクセスし、リソースの消費を抑える。
  • メモリプール
    • メモリ割り当てを効率化するために使われる技術
    • 事前に確保したメモリブロックを効率的に管理し、必要に応じてプログラムに割り当てる。

スレーブサーバ(Slave Server)

サーバー(マスターサーバ)のデータや処理を複製または同期させるために使用されるサーバー。

  • レプリケーション
    • マスターサーバーからスレーブサーバーへデータをコピーすることで、データのバックアップと冗長性を確保する
    • マスターサーバーに障害が発生した場合でも、スレーブサーバーがデータを提供し続けることができます。
  • 負荷分散
    • 読み取り処理をスレーブサーバーに振り分けることで、マスターサーバーの負荷を軽減させる。
    • 全体のシステムパフォーマンスを向上させる。
  • バックアップ
    • 定期的にスレーブサーバーにデータを保存することで、データの安全を保つ。
ebi_yuebi_yu

参考

https://www.pgpool.net/mediawiki/jp/index.php/メインページ

https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/pgpool2/

pgpool-IIとは

  • pgpool-II(ピージープールツー)は、PostgreSQLに対して、冗長化や負荷分散を可能にするミドルウェア。
    PostgreSQL用のALBみたいなもの
  • PostgreSQLサーバとクライアントの間でデータベースプロキシとして稼働し、アプリケーションとPostgreSQLを透過的に中する。

アーキテクチャ

Pgpool-IIは、PostgreSQLのバックエンド・フロントエンドプロトコルを理解し、両者の間でメッセージを転送する機能を備えている。

そのため、データベースアプリケーション(フロントエンド)からは、Pgpool-IIがあたかも実際のPostgreSQLサーバーのように振る舞い、サーバー(バックエンド)からは、Pgpool-IIがフロントエンドとして機能しているように見える。

また、Pgpool-IIはサーバーとクライアントの間で透過的に動作するため、既存のデータベースアプリケーションのソースコードに変更を加えることなく、そのまま利用することが可能。

【OSS情報アーカイブ】pgpool-II

ebi_yuebi_yu

pgpookの主な機能

- 負荷分散 (Load Balancing)
- 接続プーリング (Connection Pooling)
- レプリケーションの管理 (Replication Management)
- フェイルオーバー管理 (Failover Management)
- オンラインリカバリー (Online Recovery)
- Watchdog

https://www.fujitsu.com/jp/products/software/resources/feature-stories/postgres/article-index/pgpool2/

負荷分散 (Load Balancing)

  • クエリを複数のデータベースサーバー間で分散する機能
  • backend_weightでサーバー間の負荷分散比率を設定可能。

pgpool.conf

load_balance_mode = on             # 負荷分散を有効化
backend_hostname0 = '192.168.1.1'  # マスターサーバーのホスト
backend_port0 = 5432
backend_weight0 = 1                # マスターの重み

backend_hostname1 = '192.168.1.2'  # スレーブサーバー1のホスト
backend_port1 = 5432
backend_weight1 = 1                # スレーブの重み
backend_flag1 = 'ALLOW_TO_FAILOVER'

https://www.pgpool.net/docs/latest/ja/html/runtime-config-load-balancing.html

接続プーリング (Connection Pooling)

  • アクティブなデータベース接続をプールして再利用する機能
  • 接続の確立と解除にかかるオーバーヘッドを削減し、データベースサーバーの負荷を軽減する。

pgpool.conf

connection_cache = on           # 接続プーリングを有効化
num_init_children = 32          # プール内の初期接続数
max_pool = 4                       # 同じユーザー/データベースの接続を共有する数

https://www.pgpool.net/docs/41/ja/html/runtime-config-connection-pooling.html

レプリケーションの管理 (Replication Management)

  • マスターから複数のスレーブへのデータレプリケーションを管理する機能
  • データの冗長性が確保され、データベースの障害耐性が向上させる。
  • 不整合が起きた場合に自動停止するオプションも設定可能。

pgpool.conf

replication_mode = on              # レプリケーションを有効化
replication_stop_on_mismatch = on  # マスターとスレーブの不一致時に停止
enable_query_cache = on            # クエリキャッシュとの併用も可能

https://www.pgpool.net/docs/pgpool-II-3.7.6/ja/html/runtime-config-running-mode.html

フェイルオーバー管理 (Failover Management)

  • データベースサーバーに障害が発生した場合、自動的にフェイルオーバーを行い、別のサーバーへリクエストを切り替える。
  • failover_commandで特定のコマンドも実行可能

pgpool.conf

failover_command = '/usr/local/bin/failover.sh %d %H %P %m %M %D %r' # フェイルオーバースクリプト
failover_on_backend_error = on                                     # 障害発生時にフェイルオーバー

https://www.pgpool.net/docs/latest/ja/html/runtime-config-failover.html

オンラインリカバリー (Online Recovery) の設定

  • スレーブサーバーが再接続可能になった際に、クラスターに復帰させる機能。
  • フェイルオーバー管理と一緒に使うことで、データベースサーバーの障害発生時に自動的にサーバの切り替え、復旧ができる。

pgpool.conf

recovery_user = 'pgpool'                        # リカバリ処理を実行するユーザー
recovery_password = 'password'                 # リカバリユーザーのパスワード
recovery_1st_stage_command = 'basebackup.sh'   # 最初のリカバリコマンド
recovery_2nd_stage_command = ''                # 必要に応じて2段階目のリカバリ処理を指定
follow_master_command = 'follow_master.sh'     # マスター切り替え後の追従スクリプト

https://www.pgpool.net/docs/41/ja/html/runtime-online-recovery.html

クエリキャッシュ (Query Caching)

  • データベースへのクエリ結果(SELECT分の結果)をキャッシュする
  • 同じクエリが再度実行されたときに、データベースへの負荷を減らし、応答時間を短縮する。
  • キャッシュサイズや安全なメモリ量を指定できる

pgpool.conf

enable_query_cache = on            # クエリキャッシュを有効化
memory_cache_enabled = on          # メモリキャッシュを有効化
query_cache_size = 64MB            # クエリキャッシュの最大サイズ
cache_safe_mem = 512KB             # 安全に使える最小メモリ

https://www.pgpool.net/docs/latest/ja/html/runtime-in-memory-query-cache.html

Watchdog

  • 複数のPgpool-IIインスタンスを連携させ、可用性を高める機能
  • 1つのPgpool-IIインスタンスが停止しても他のPgpool-IIインスタンスが機能を引き継ぐ。
  • DB自体ではなく、Pgpool-II自身を冗長化構成にするためのもの。

https://lets.postgresql.jp/documents/technical/pgpool-II-3.3-watchdog/1

https://www.pgpool.net/docs/pgpool-II-4.3.5/ja/html/runtime-watchdog-config.html

このスクラップは2024/05/12にクローズされました