PostgreSQLレプリケーション


45

私たちは絶えずこれをオフィスの周りで打ち負かしており、疑問が持ち上がり続けています。PostgreSQLのレプリケーションはどのように対処しますか?Master-Slave、Master-MultiSlave、およびMaster-Masterを使用して単純に保つだけで、必ずしも高度なクラスターについても話しているわけではありません。通常、MySQL用に設定するのは非常に簡単です。フェイルオーバーは、特に構成が簡単なため、完璧ではないにしても簡単です。Slonyで遊んだことがありますが、手間がかかりすぎます(スキーマの変更には介入が必要、新しいデータベースには介入が必要など)。PGPool2は、ノードがダウンし、レプリケーションを同期状態に戻すための適切な方法(すべてをダウンさせ、フォールドしたノードを再シードする以外の方法)を見つけることができなくなるまで、非常に優れていました。基本的にここに私が通常探しているものがあります:

  • 簡単なセットアップ(難しいセットアップは済ませますが、簡単に拡張できます)
  • 単純なフェイルオーバー
  • 落ちたノードを元に戻すには時間が必要です(つまり、mysqlのように。サーバーがダウンし、起動して、レプリケーションが追いつくのを待ちます)。
  • スキーマの変更は複製を壊しません
  • サーバーへの新しいデータベースの追加はシームレスです(つまり、mysqlのように、DBサーバー全体を複製できるため、マスター上に新しいデータベースが作成され、自動的にスレーブに伝搬されます)

MySQLはこれらのほとんどをかなりうまく処理しますが、PostgreSQLにはある種の好みがあります。それに、それが唯一の選択肢である状況がいくつかあり、その中に複製を追加したいと思います。現在何を使用していますか?また、ソリューションについてどのように感じていますか?これはMySQL対PostgreSQLの投稿ではありません、私は約束します、それは私が始めようとしているものではないからです。:)


3
これに対する答えに興味があります。MySQLのバックグラウンドから来ると、PSQLのレプリケーションオプションは控えめに言っても農業的です。
デイブチェイニー

ええ、これまで私がプレイしたすべてのオプションには重大な欠点がありました。私は明白な何かを見逃していると思っています。しかし、私はそうではないと思います
f4nt

他に何もないと思うが、誰かが間違っていることを証明してくれることを切望している
ヴィンコヴサロビッチ

ところで、pgsql-general @ postgresql.orgを試しましたか?
ビンコヴサロヴィッチ2009年

回答:


9

簡単な答え-読み取り専用のオンラインスレーブが必要な場合、PostgreSQLにはそのようなソリューションはまだありません。

PostgreSQL 9.0(Spring / Summer 2010)に含まれる2つの主要な開発プロジェクトが現在この分野で進行中です。すなわち:

  • 同期レプリケーション:

http://wiki.postgresql.org/wiki/NTT's_Development_Projects

  • 読み取り専用のホットスタンバイスレーブ:

http://wiki.postgresql.org/wiki/Hot_Standby

組み合わせて、MySQLスタイルのレプリケーションの使いやすさから、MySQLが持っているバグ/問題とユーザーがPostgreSQLで知っている信頼性を差し引いたものを実現することを目指しています。

これらはすべて、2008年にPostgreSQLコアチームからのマニフェストによって開始されました。

http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

最大のユーザーベースを備えた今日のPostgreSQLレプリケーションソリューションは、Slony-I(書き込みコストが高く、スキーマの変更が面倒です)、WAL shipping / walmgr(スレーブはオンラインで使用できません)、pgQ / londisteのSkype / Skytools(完成したソリューションよりも多くのツール/ビルディングブロック)。

Log Shipping、walmgr、およびSlony-Iについていくつか記述しました。

詳細については、http://blogs.amd.co.at/mt/mt-search.cgi?blog_id = 1&tag = pgrep&limit = 20


6
同期レプリケーション+ホットスタンバイが利用可能になりました-参照wiki.postgresql.org/wiki/...利用可能な技術の良い要約のために
デヴィッド・フレイザー

5

そして、別の解決策をリングに投げ込む:rubyrep。

要件と比較するには:

  • 簡単なセットアップ
    はい、それは実際にrubyrepの主な焦点です。
  • 単純なフェイルオーバー
    はい。実際、rubyrepはマスターとマスターのレプリケーションを行います。フェイルオーバーするには、アクションはまったく必要ありません。他のデータベースの使用を開始してください。
  • スキーマを変更してもレプリケーションが中断されることはありません
    はい。
    主キー以外の変更の場合、レプリケーションは停止する必要さえありません(ただし、スキーマが両方の側で同時に変更されていることを確認してください)
    テーブルを追加/削除するには、単にレプリケーションデーモンを再起動します。テーブルの主キー列を変更するだけで、少し手間がかかります。
  • サーバーへの新しいデータベースの追加はシームレスです(つまり、mysqlのように、DBサーバー全体を複製できるため、マスター上に新しいデータベースが作成され、自動的にスレーブに伝搬されます)
    これは、限定的な方法でのみサポートされます:各rubyrepセットアップは、一度に1つのデータベースのみを複製します。(ただし、複数のデータベースのレプリケーションをセットアップするのは非常に簡単です。)

4

ホットリードスレーブが要件であることは言及していませんでしたので、共有ストレージまたはDRBDでHeartbeatを使用することを提案します。正しいことをするだけで、管理は簡単です。これは、古いMicrosoft SQL ServerクラスタリングのLinux版です。1つのノードがアクティブで、もう1つのノードがパッシブである間、データは2つのノード間で共有されます。SQLベースのレプリケーションはブロックレベルですべて下位に処理されるため、心配する必要はありません。

真剣に、それはあなたが奴隷を読む必要がない場合、断然最高の解決策です。WALアーカイブはせいぜい粗末なものであり、サーバーの再起動のために出荷プロセスを中断した場合は、すべてを再設定する必要があります。slonyとlondisteはマスタードをカットしません。メインソースツリーにとどまり、商用化したくない場合は、Heartbeatが最善の策です。


2

要件から、PITRが問題を解決する最も簡単な方法のようです。

オンラインバックアップとポイントインタイムリカバリ(PITR)

スレーブサーバーに問い合わせる必要があるとは言わなかったので、PITRがちょうどいいかもしれません。

バージョン8.0からのPostgreSQLの標準部分ですので、おそらくそれを立ち上げて実行するために必要なものはすべて揃っています。

指示が冗長すぎる場合は、SkyTools WalMgrご覧ください。これにより、ホットスタンバイデータの単一コマンドタスクの作成/フェールオーバーのプロセスが行われます。

より複雑なレプリケーションシナリオについては、Slony-1の優れた経験がありましたが、PostgreSQLには多くの優れたレプリケーション/ HAオプションが用意されています。


これらのオプションは...?
デイブチェイニー

...ブログの記事に記載されているblog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html ...答えの一つで参照
dpavlin

2

非同期のマスター/スレーブ複製が必要な場合は、Londiste(Skypeのskytoolsパッケージの一部)wiki.postgresql.org/wiki/Londiste_Tutorialを検討してください。

インストールは簡単で、新しいDBの追加は簡単で、レプリケーションは「追いつく」だけです。

ただし、フェイルオーバーは組み込まれていません。アプリケーション接続文字列を変更するか、ソフトウェアの別のレイヤーの背後にあるDB接続を難読化する必要があります。

一部のスキーマの変更は簡単です。その他はもっと難しいです。アプリケーションによって異なります。skytoolsの次のバージョン(ver 3.0)は、DDLを処理し、フェイルオーバーを容易にする機能を含むことになっています。

Slonyを使うのは苦痛すぎると感じた後、Londisteに移動しました。



1

あなたが探しているものを提供する無料の/オープンソースの方法は本当にありません。すぐに使えるものが必要な場合は、さまざまなサードパーティの商用複製ソリューションをご覧ください。

これで、ライトヘッドログ(WAL)を使用してPostgresで独自のレプリケーションを並べ替えることできます。

http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

これは基本的に、セカンダリノードを連続リカバリモードにし、{small interval}ごとにトランザクションログをインポートできる場所です。Postgresの設定には「スタブ」があり、WALの完​​了時にPostgresが特定のことを実行できるようにします。

ただし、これにより、マスター/マスターまたは循環レプリケーション、あるいはその両方を行うことはできません。

いずれにせよ、間違いなく間違いなく機能しますが、「簡単なセットアップ」、「単純なフェイルオーバー」、「シームレス」などとは呼びません。


PITRはWALを使用しているため、この回答はPITRの提案と重複しています:
dpavlin 09年



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