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


9

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

ここに画像の説明を入力してください

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

見ているときのドキュメント私はまた、以下を参照してください。

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

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


高可用性を必要とする場合、おそらく2つのpgpoolサーバーを少なくとも2つのpostgresqlサーバーの前に配置する必要があります(すべて異なるボックス上)
Neil McGuigan

回答:


10

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

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

以下のよう@Neilマクギガンは言った、あなたはまた、より良い高可用性を実現するために、複数の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をインストールする必要はありません。

これが必要な場合は、Postgresマスターサーバー上で実行され、Pgpoolが使用する関数を追加する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/libすべての Postgresサーバーに対してこれを行うことを忘れないでください。

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


1

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

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

最後に、このステップバイステップのチュートリアルをお勧めします。このチュートリアルでは、高可用性の実装を完了するために、最初から(PostgreSQLサーバーのインストール...)紹介します。上記のチュートリアルは、私が使用する実装について説明しています。

お役に立てば幸いです。

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


2
itenlight.com/blog/2016/05/18/…で指定されているWebサイトがダウンしているようです。見ていただけますか?
user6807024

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.