web-dev-qa-db-ja.com

postgresqlスレーブからマスターテーブルへのレプリケーション

私は現在、rsyslogを使用してVPN経由で中央データベースにデータをプッシュする数十のサイトを持っています。これらのレコードはすべて1つのテーブルに入れられます(サイトごとに1秒あたり約20〜30が挿入されます)。したがって、1つのテーブルには約3,000万件のレコードがあり、急速に成長しています。データベースの設計は、後で処理する別の問題です。

私の目標は、syslogを収集するこの1つのテーブルを使用して各サイトにローカルデータベースをセットアップし、それを中央データベースに(できれば同期的に)ファシリティにちなんで名付けられた新しいテーブルに複製することです(17のファシリティデータすべてを収集する1つの大きなテーブルではありません) )。

Bucardo、Slony、およびSymmetricDSを見てきましたが、これらはすべて冗長性/バックアップソリューションのように見えますが、本当に必要なのは、各サイトから中央データベースへの基本的な単一テーブルレプリケーションのようです。

Bucardoの最初の印象は、これを実現するには、各サイトにインストールする必要があるということです。誰かがアドバイスを提供できるなら、私は少しのガイダンスを探しています。私はグーグルを死に至らしめたと信じているが、間違っていることが証明されることを望んでいる。

3
whobbs

PostgreSQL用のよく知られた論理レプリケーションシステムのそれぞれがこれに適しています:Bucardo、Londiste、Slony。それらは必ずしも冗長性ソリューションだけではありません。 (おそらく、それらはかなり悪い冗長ソリューションです。)あなたが一番好きなものを選んでください。おそらくLondisteは始めるのが最も簡単ですが、YMMVです。 (私はSymmetricDSに精通していません。)

1

Postgres 9.3以降、Foreign Data Wrappersを使用してこれを実行できるはずです 簡単な説明はここにあります

基本的に、中央サーバーに適切なテーブルを作成してから、外部テーブルとしてテーブルを作成します( CREATE FOREIGN TABLE )リモートサイトのPostgresインスタンス。その後、すべての変更が「実際の」サーバーに返送されることを除いて、外部テーブルを他のテーブルと同じように扱うことができます。


非同期機能が必要な場合、これは機能しないことに注意してください(中央サーバーがオフラインのときにリモートサイトのテーブルに書き込み、中央サーバーが戻ってきたときに送信します)。そのためには、 Peterが提案したように実行し、トランザクションベースのレプリケーションツールの1つを使用します

0
voretaq7