web-dev-qa-db-ja.com

Postgresでマルチマスターレプリケーションを使用できますか?

  1. 私はPostgres-XCを試しましたが、まだ完全なSQLを実装していません(SERIALなど)

  2. 開発者によると、Postgres-Rは興味深いように見えますが、「本番環境には対応していません」。

そこで、pgpool-II 3.0.1を使用しました。はい、うまくいきます。しかし、私が見る限りでは、PGノードは2つだけです。

実際に運用準備が整っていて、複数のPGノードを操作できるものはありますか?

16
mrkafk

Bucardo を検討しましたか?非同期マルチマスターです。それは完全に追いついておらず、一般的な解決策ではありませんが、試してみる価値があるかもしれません。

6

Peterの評価に同意する必要があります。現在、Postgresには実際にはgoodマルチマスターレプリケーションはありません。 (真のマルチマスターレプリケーションを実行することは非常に難しい問題であり、利用可能な解決策に夢中になることはありません。)

あなたが調査したいと思うかもしれないウィキペディアの潜在的な解決策のリストをクリビング:

PostgreSQLは、2フェーズコミットに基づくソリューションを含む、マルチマスターレプリケーション用の複数のソリューションを提供します。 Bucardo、rubyrep、PgPoolおよびPgPool-II、PgClusterおよびSequoia、およびいくつかの独自のソリューションがあります。熱心な(同期)レプリケーションを実装するもう1つの有望なアプローチはPostgres-Rですが、まだ開発中です。同期レプリケーションを実装するさらに別のプロジェクトは、Postgres-XCです。 Postgres-XCもまだ開発中です。

3
voretaq7

これは重いJava指向ですが、ネイティブデータベースクライアントAPIはJDBCデータソースにブリッジできます。タングステンMyosotisはMySQLネイティブJDBCブリッジの例です。


  • Tungsten Enterprieseは、マルチマスター非同期に適しています。 MySQL、PostgreSQL、Oracleで動作すると思います。スタンドアロンで実行することも、Javaアプリケーションに埋め込むこともできます。MySQLで動作することを確認しましたが、PostgreSQLを主張しています。Replicatorコンポーネントはオープンソースですが、完全なソリューションには多くのパーツがあり、ライセンスが必要ですContinuentは当初、マルチマスター同期用にSequoiaを持っていましたが、それを放棄し、マルチマスター非同期用に代わりにタングステンを作成しました-同期ACIDの一貫性よりも戦略的なビジネスのスケールアウトを検討しています。タングステンはJavaで書かれているため、 Myosotisにネイティブデータベースクライアントの橋渡しをする。

  • SymmetricDSは、マルチマスター非同期に適しています。オープンソースです。ビンのログではなく、トリガーをインストール/アンインストールして更新をキャプチャします。スタンドアロンで実行することも、Javaアプリケーションに埋め込むこともできます。

  • HA-JDBCは、マルチマスター同期に適しています。これは、C-JDBCやSequoiaなどの旧式の古いソフトウェアに取って代わります。オープンソースです。 2フェーズコミットを使用し、方言を介してPostgreSQL、MySQL、Oracle、SQL Server、Derby、Sybaseなどの多くで機能します。これは主に埋め込み用なので、Javaアプリケーションに埋め込んでPostgreSQLにブリッジします。分散ロック、シーケンス、時間、RandなどはRedhat/JBossのjGroupsによって処理されます。OneNic​​eアプリでデッドロックが発生し、ロールバックがサポートされていない場合、機能は「並列」ではなく「シリアル」のトランザクションモードです。この「シリアル」モードを使用して、DBクラスターに対応していないレガシーアプリを改造したため、トランザクションがありませんでしたコードを再試行します。シリアルモードはその日を節約し、厄介な書き換えを回避しました。

  • H2はマルチマスター同期に適しています。オープンソースです。 HA-JDBCアーキテクチャーと同様に、2フェーズコミットを使用してスタンドアロンデータベースまたはクラスターをサポートしますが、2フェーズコミットに追加のコンポーネントを必要とするのではなく、オールインワンです。分散ロック自体を行うのか、jGroupsやHazelcastなどのサードパーティに依存するのかは不明です。

アプリケーションがすでにJavaで記述されていない限り、PostgreSQLおよびその他のデータベース用のJDBCベースのレプリケーションには、JDBCへのネイティブブリッジが必要です。 MySQLの場合、Tungsten EnterpriseはMyosotisと呼ばれるオプションのコンポーネントを提供します。私はこれを使用してPHP/Perl/C/mysqlclientをJDBCにブリッジしましたが、JDBCデータソースはたまたま4ノードのMySQL/InnoDBクラスターを指すHA-JDBCプロキシデータソースでした。

タングステンは、レプリケーターおよびルーターコンポーネントでPostgreSQLをサポートしていますが、Myosotisコンポーネントについては不明です。多分。 Tungsten Replicator/Routerコンポーネントはマルチマスター非同期用ですが、Myosotisは同期のためにHA-JDBCやH2などの代替JDBCバックエンドにブリッジできます。

JDBCブリッジにネイティブのPostgreSQLがある場合は、それについてお聞きしたいと思います。理論的には、JDBC Type 4ドライバーを備えたすべてのデータベースをブリッジできます。 Type 4 JDBCは、そのデータベースのネイティブクライアントインターフェイスと同じようにネイティブデータベースプロトコルを話します。したがって、JDBC呼び出しへのネイティブ呼び出しの1対1のマッピングが必要です。

3
Justin

それに対する答えは、全くノーです。

2

それでも興味がある場合は、これを試してください: http://www.symmetricds.org/ (Javaのみ)

1
Herberth Amaral

私は過去2年間、postgresqlでのマルチマスターレプリケーションにlondisteを使用しています。

Pg_queueを使用してテーブルをキューに入れ、他のデータベースを必要なだけ各キューにサブスクライブできます。レプリケーションはキューごとにアトミックであり、非常に弾力性があります。

Londisteについては、こちら( http://pgfoundry.org/projects/skytools/ )を参照してください。これは、Skypeの担当者がクラスターに使用しているもので、作成したものなので、2倍になっています。 )

1
lynxman