web-dev-qa-db-ja.com

共有ディスクを備えた複数のPostgresサーバー(1つのライター、複数のリーダー)

シナリオは次のとおりです。

  1. 1つのシャードディスク(Gluster)
  2. 複数のPostgresサーバー

要件:

  1. 共有ディスクを使用してデータベースファイルを保存する
  2. 最大の効率を提供する構成を使用する

これまでの調査結果、

  1. このように、共有ディスクを使用してデータを保存することができます document 。ただし、「もう1つの問題は、プライマリサーバーの実行中にスタンバイサーバーが共有ストレージにアクセスしてはならないことです」とも記載されています。つまり、すべてのサーバー(マスターサーバーを除く)が未使用のままになっているため、ほとんど受け入れられません。

  2. 共有ディスクを使用しているため、レプリケーションはありません。これで document いくつかの構成(RawおよびMaster/Slaveモード)で十分であることがわかりました。しかし、他の問題は、それらが上記の問題を引き起こす可能性があるということです。

問題:

  1. Webには多くのドキュメントがあり、それらの要件と機能について混乱しました。私の理解は正しいですか?
  2. もしそうなら、このデザインを達成する可能性はありますか(pgpoolまたは他のツールを使用して)
  3. もしそうなら、私がより多くの情報を見つけることができるように、ツールやキーワードに名前を付けていただけませんか。

注(できるだけ多くの質問を閉じることに興味がある人のために)-それは私に以前に起こりました。意見に基づいた答えを探していると言う人もいます。実際、私はそうではありません。私が探しているのは、何があっても、テクノロジーの名前またはある種のキーワードです。それらを使用することで、より多くの情報を検索できるようになります。情報を検索して見つけるために、いくつかのキーワードを知る必要がある場合があります。

前もって感謝します。

5
Rad

1つを除いてすべてが読み取り専用であっても、同じデータディレクトリから複数のPostgreSQLサーバーを実行することはできません。完全に100%サポートされていません。できません。今あきらめます。

誰かがいつかそのような機能を追加するかもしれませんが、Pgはプロセス間同期のために共有メモリと信号に大きく依存しているため、PostgreSQLに主要な変更が必要になります。また、shared_buffersには、まだ書き出されていない「ダーティ」バッファが含まれています。 PostgreSQLはすべてのバックエンドがそこから読み取り、データがshared_buffersにない場合にのみディスクに移動することを知っているため、これらは遅延して書き出すことができます。

allの場合、PostgreSQLに小さな変更を加えてそれを行うのはおそらく実用的ですサーバーは読み取り専用ですが、かなり面白くないユースケースであるため、調査していません。

これまでに見た共有ストレージへの参照は、フェイルオーバーの場合のみであり、同時操作ではありません。このマニュアルは、複数のDBサーバーによるストレージへの同時アクセスを防ぐために適切なフェンシングが適切に配置されていることを確認する必要があり、そうしないと重大な破損が発生することを非常に具体的に示しています。

レプリケーションに依存するか、共有ストレージをサポートする(そして結果として生じるパフォーマンスへの影響に対処する)別のDBエンジンを使用する必要があります。

ただし、これとは別に、DBはI/Oが制限されていることがよくあります。 2000を実行できる1つのサーバーではなく、1000tpsを実行できる2つのサーバーがある場合、共有ストレージは何も得られません。または、低遅延バスを使用した共有ストレージシステムの同期のオーバーヘッドを考えると(Infiniband/Myrinetを考えてください) )、それぞれ200tpsが可能な2台のサーバーのようなものです。

7
Craig Ringer