web-dev-qa-db-ja.com

pgpoolアーキテクチャを備えたPostgres

以下はpgpoolアーキテクチャの例です:

enter image description here

これは、単一のサーバーにpgpoolを置くだけでよいことを意味します。これは本当ですか?構成を見ると、pgpool.conf;内でバックエンドを構成していることがわかります。これはさらにこれを意味します。ただし、バックエンドサーバーでもpgpoolが表示される理由は説明されていません。

ドキュメント を見ると、次も表示されます。

PostgreSQL 8.0以降を使用している場合は、pgpool-IIが内部的に使用するpgpool-regclass関数を、pgpool-IIがアクセスするすべてのPostgreSQLにインストールすることを強くお勧めします。

だから私は何を考えればいいのかわかりません。すべてのバックエンドまたは専用サーバーにpgpoolを配置するのがベストプラクティスかどうか。

9
user20459

通常、Pgpoolをバックエンドサーバーにインストールしません。写真に表示されているのは、最も一般的な構成です。 Pgpoolは、基本的にデータベースの前に位置するスタンドアロンサーバーです。多くの場合、2つのPostgresサーバーはストリーミングレプリケーションで構成されています。 1つはマスターで、もう1つはスレーブです。

これにより、Pgpoolは2つ(またはそれ以上)のデータベース間ですべての読み取りクエリの負荷を分散できます。書き込みを含むクエリは、マスターサーバーにルーティングされ、マスターサーバーがスレーブに複製されます。

@ Neil McGuiganが言った のように、複数のPgpoolサーバーを使用して、高可用性を向上させることもできます。技術的には、この構成のデータベースサーバーにPgpoolをインストールできますが、これは悪い習慣です。複数のPgpoolサーバーの実行は、はるかに複雑な構成です。 Pgpoolを使用するのが初めての場合は、2つ動作させる前に1つのPgpoolサーバーから始めます。

どちらの構成でも、アプリケーションサーバーは、単一のPostgresデータベースに接続していると見なします。

pgpool_regclassについて、これは実際には別の質問であるはずです これはPgpool FAQからです

PostgreSQL 8.0以降を使用している場合は、pgpool-IIが内部的に使用するpgpool-regclass関数を、pgpool-IIがアクセスするすべてのPostgreSQLにインストールすることを強くお勧めします。これがないと、異なるスキーマで重複するテーブル名を処理すると問題が発生する可能性があります(一時テーブルは問題ではありません)。

PostgreSQL 9.4.0以降およびpgpool-II 3.3.4以降、3.4.0以降を使用している場合、PostgreSQL 9.4には関数 "to_regclass"のようなpgpool_regclassが組み込まれているため、pgpool_regclassをインストールする必要はありません。

これが必要な場合、Pgpoolが使用する関数を追加するためにPostgresマスターサーバーで実行されるSQLコードの一部です。

Regclassを使用すると、追加の手順を実行する必要があります(私はinsert_lockを考えていました)。ソースからコンパイルしている場合(一般に、ほとんどのディストリビューションではPgpoolのバージョンが本当に古い)、Postgresライブラリもコンパイルする必要があります。

ソースからコンパイルした場合は、.../pgpool-II-3.X.X/src/sql/pgpool-regclassフォルダーに移動して./configure; makeを実行する必要があります。

Pgpool-regclass.soファイルをPostgres拡張ディレクトリにコピーします。私のUbuntu 14.04サーバー(Postgres 9.3パッケージインストールを使用しているだけ)では、次の場所にあります:/usr/lib/postgresql/9.3/liballPostgresサーバーに対してこれを行うことを忘れないでください。

それが完了すると、マスターでpgpool-regclass.sqlを実行できます。これは、コピーしたライブラリにpgpool_regclass関数をマップするだけです。

10
Trevor Dell

他のすべてと同様に、高可用性展開を実現する方法はたくさんあります。ここで私は私の経験から何かを提案します(私自身のHA実装):

  1. 単一のインスタンスではなく、常に複数のpgpool2インスタンスを使用することをお勧めします。その理由は明らかです。単一のpgpool2が単一障害点です。 pgpoolはウォッチドッグ機能を導入しているため、簡単に実行できます。
  2. 一般に、PostgreSQLバックエンドとpgpool2の間で同じマシンを共有するよりも、別々のマシンにpgpool2インスタンスを置く方が少し良いです。ただし、PostgreSQLと同じサーバーで実行しても、大きな欠点はありません。 (私のHA実装では、すべてのマシンで1つのPostgreSQLインスタンスと1つのpgpool2インスタンスが実行されます。)

最後に、 このステップバイステップのチュートリアル をお勧めします(PostgreSQLサーバーのインストールなど)。上記のチュートリアルは、私が使用する実装について説明しています。

お役に立てば幸いです。

更新:ありがとう@Moshe Katz-リンクは変更されました。元の投稿でもここに更新されました。

1