Postgres-XCを試しましたが、まだ完全なSQLを実装していません(SERIALなど)
Postgres-Rはおもしろそうに見えますが、開発者によると「生産準備が整っていません」。
そこで、pgpool-II 3.0.1を使用しました。はい、うまく動作します。しかし、私が見る限り、2つのPGノードのみです。
実際に生産準備が整っており、複数のPGノードで動作できるものはありますか?
Postgres-XCを試しましたが、まだ完全なSQLを実装していません(SERIALなど)
Postgres-Rはおもしろそうに見えますが、開発者によると「生産準備が整っていません」。
そこで、pgpool-II 3.0.1を使用しました。はい、うまく動作します。しかし、私が見る限り、2つのPGノードのみです。
実際に生産準備が整っており、複数のPGノードで動作できるものはありますか?
回答:
Peterの評価に同意する必要があります。現在、Postgresには本当に良いマルチマスターレプリケーションはありません。(真のマルチマスター複製を行うことは非常に難しい問題であり、利用可能なソリューションに夢中になりません。)
調査する可能性のある潜在的なソリューションのウィキペディアのリストを作成:
PostgreSQLは、2フェーズコミットに基づくソリューションを含む、マルチマスターレプリケーション用の複数のソリューションを提供しています。Bucardo、rubyrep、PgPoolとPgPool-II、PgClusterとSequoia、および独自のソリューションがあります。熱心な(同期)レプリケーションを実装する別の有望なアプローチはPostgres-Rですが、まだ開発中です。同期レプリケーションを実装するさらに別のプロジェクトは、Postgres-XCです。Postgres-XCもまだ開発中です。
これは重いJava指向ですが、ネイティブデータベースクライアントAPIをJDBCデータソースにブリッジできます。Tungsten Myosotisは、JDBCブリッジにネイティブなMySQLの例です。
Tungsten Enterprieseは、マルチマスター非同期に適しています。MySQL、PostgreSQL、およびOracleで動作すると思います。スタンドアロンで実行することも、Javaアプリケーションに組み込むこともできます。MySQLで動作するのを見てきましたが、彼らはPostgreSQLを主張しています。Replicatorコンポーネントはオープンソースですが、完全なソリューションにはより多くの部品が含まれており、ライセンスコストが必要です。Continuentはもともとマルチマスター同期用にSequoiaを使用していましたが、それを放棄し、代わりにマルチマスター非同期用にTungstenを作成しました。TungstenはJavaで記述されているため、Myosotisにネイティブデータベースクライアントをブリッジする理由が提供されています。
SymmetricDSはマルチマスター非同期に適しています。オープンソースです。binロギングの代わりに、トリガーをインストール/アンインストールして更新をキャプチャします。スタンドアロンで実行することも、Javaアプリケーションに組み込むこともできます。
HA-JDBCはマルチマスター同期に適しています。C-JDBCやSequoiaのような古い機能のないソフトウェアに取って代わります。オープンソースです。2フェーズコミットを使用し、PostgreSQL、MySQL、Oracle、SQL Server、Derby、Sybase、その他多くの方言で動作します。主に組み込み用であるため、Javaアプリケーションに埋め込み、PostgreSQLにブリッジします。分散ロック、シーケンス、時間、ランドなどは、Redhat / JBossのjGroupsによって処理されます。アプリのデッドロックが発生し、ロールバックがサポートされていない場合、優れた機能の1つは、トランザクションモードが「パラレル」ではなく「シリアル」であることです。この「シリアル」モードを使用して、DBクラスターに対応していないレガシーアプリを後付けすることに成功したため、トランザクションの再試行コードが欠落していました。シリアルモードは1日を節約し、厄介な書き換えを避けました。
H2はマルチマスター同期に適しています。オープンソースです。HA-JDBCアーキテクチャと同様に、2フェーズコミットを使用してスタンドアロンデータベースまたはクラスターをサポートしますが、2フェーズコミットに追加のコンポーネントを必要とするのではなく、1つにまとめられています。それ自体が分散ロックを行うのか、jGroupsやHazelcastのようなサードパーティに依存するのかはわかりません。
アプリケーションがすでにJavaで記述されていない限り、PostgreSQLおよびその他のデータベースのJDBCベースのレプリケーションにはJDBCブリッジへのネイティブが必要です。MySQLの場合、Tungsten EnterpriseはMyosotisと呼ばれるオプションのコンポーネントを提供します。これを使用して、PHP / Perl / C / mysqlclientをJDBCにブリッジしました。JDBCデータソースは、4ノードMySQL / InnoDBクラスターを指すHA-JDBCプロキシデータソースでした。
Tungstenは、ReplicatorおよびRouterコンポーネントでPostgreSQLをサポートしていますが、Myosotisコンポーネントについては不明です。多分。Tungsten Replicator / Routerコンポーネントはマルチマスター非同期用ですが、Myosotisは同期用にHA-JDBCやH2などの代替JDBCバックエンドにブリッジできます。
JDBCブリッジにネイティブなPostgreSQLがある場合、それについて聞きたいと思います。理論的には、JDBC Type 4ドライバーを備えた任意のデータベースをブリッジできます。タイプ4 JDBCは、そのデータベースのネイティブクライアントインターフェイスと同様にネイティブデータベースプロトコルを使用するため、ネイティブコールとJDBCコールの1対1のマッピングが必要です。
私は過去2年間、postgresqlのマルチマスターレプリケーションにlondisteを使用しています。
pg_queueを使用してテーブルをキューに配置し、各キューに必要な他の多くのデータベースをサブスクライブできます。レプリケーションはキューごとにアトミックであり、非常に復元力があります。
londisteについてはこちら(http://pgfoundry.org/projects/skytools/)で読むことができます。これは、Skypeのユーザーがクラスターに使用するものであり、作成したものです。
まだ興味がある場合は、これを試してください:http : //www.symmetricds.org/ (Javaのみ)
使用可能な「マルチマスター」レプリケーションシステムが見つかりました。
RabbitMQ http://www.rabbitmq.com/を入手してください -これはメッセージミドルウェアです。
RabbitでRabbit MQクラスターを構成します。
クラスタ内の各ノードのキューを作成し、それらを「ファンアウト」タイプの交換にバインドします。
この方法により、メッセージは任意のノードおよびキューに送信され、他のすべてのノードに複製されます。私はこれのために機能するコードを持っています!