Replikasi multi-master yang dapat digunakan untuk Postgres?


16
  1. Saya mencoba Postgres-XC dan belum mengimplementasikan SQL penuh (seperti SERIAL)

  2. Postgres-R terlihat menarik tetapi "belum siap produksi" menurut pengembang.

Jadi saya menggunakan pgpool-II 3.0.1. Ya, itu bekerja dengan baik. Tapi sejauh yang saya bisa lihat itu hanya untuk 2 node PG.

Apakah ada sesuatu di luar sana yang sebenarnya siap produksi DAN mampu bekerja dengan banyak node PG?


Beberapa tahun yang lalu kami mendarat dengan masalah yang sama. Akhirnya kami memindahkan semua barang kami ke Oracle. Semoga Anda dapat menemukan replikasi multimaster yang dapat digunakan hari ini, saya belum melihat ... Semoga beruntung, tidak ada yang kurang.
grufftech

2
Dokumentasi PostgreSQL sendiri mengatakan untuk menggunakan aplikasi middleware :) .. " Synchronous Multimaster Replication .. PostgreSQL tidak menawarkan jenis replikasi ini, meskipun PostgreSQL dua fase komit (SIAPKAN TRANSAKSI dan KOMIT DILAKUKAN) dapat digunakan untuk mengimplementasikan ini dalam kode aplikasi atau middleware "
warren

Anda tidak terbatas pada dua node.
foocorpluser

Jawaban:


6

Sudahkah Anda mempertimbangkan Bucardo ? Ini multimaster asinkron. Ini belum sepenuhnya diketahui dan bukan solusi umum, tetapi mungkin patut dicoba.


1
Tampaknya saya tidak cukup spesifik: Saya perlu replikasi sinkron. Selain itu, apa artinya ini di FAQ? "Bisakah Bucardo mereplikasi lebih dari dua tuan? Tidak. Saat ini, Bucardo hanya mendukung master to master (dan juga master untuk banyak budak tentu saja)." Jadi itu multi-master atau tidak?
mrkafk

4
Hanya jika definisi Anda tentang "multi" adalah "2"!
hmallett

Harap dicatat bahwa mulai dengan Bucardo 5 batasan hanya 2 tuan telah dicabut
Joril

3

Saya harus setuju dengan penilaian Peter: Tidak ada replikasi multi-master yang benar - benar bagus untuk Postgres sekarang. (Melakukan replikasi multi-master sejati adalah masalah yang sangat sulit, dan saya tidak terpikat dengan solusi yang tersedia.)

Dengan mengutip daftar solusi potensial Wikipedia yang mungkin ingin Anda selidiki:

PostgreSQL menawarkan beberapa solusi untuk replikasi multi-master, termasuk solusi berdasarkan komit dua fase. Ada Bucardo, rubyrep, PgPool dan PgPool-II, PgCluster dan Sequoia serta beberapa solusi berpemilik. Pendekatan lain yang menjanjikan, menerapkan replikasi bersemangat (sinkron) adalah Postgres-R, namun masih dalam pengembangan. Namun proyek lain, menerapkan replikasi sinkron adalah Postgres-XC. Postgres-XC juga masih dalam pengembangan.


Wow, hanya membaca daftar itu menyebabkan kejutan dan teror bagi saya. :)
Peter Eisentraut

Bagi saya itu adalah depresi dan benci :-)
voretaq7

Saya akan berpikir bahwa menggunakan sistem yang mirip dengan etcd untuk konfigurasi dan komunikasi akan mungkin, mungkin menjalankan pernyataan pembaruan dalam komit dua fase ... bagian yang sulit adalah menjaga simpul keluar sampai diangkat dan cocok dengan node lain .. Saya sangat suka solusi automagic dekat untuk ini
Tracker1

3

Ini berorientasi pada Java, tetapi API klien basis data asli dapat dijembatani ke sumber data JDBC. Tungsten Myosotis adalah contoh untuk MySQL asli untuk JDBC bridging.


  • Tungsten Enterpriese baik untuk multi-master asinkron. Saya pikir ini berfungsi untuk MySQL, PostgreSQL, dan Oracle. Itu dapat menjalankan mandiri atau tertanam di aplikasi Java. Saya telah melihatnya berfungsi untuk MySQL, tetapi mereka mengklaim PostgreSQL. Komponen Replikator mereka adalah open-source, tetapi solusi lengkap memiliki lebih banyak bagian dan membutuhkan biaya lisensi. Continuent awalnya memiliki Sequoia untuk multi-master sinkron tetapi mereka meninggalkannya, dan menciptakan Tungsten sebagai gantinya untuk multi-master asinkron - mereka menganggap skala bisnis yang lebih strategis daripada konsistensi ACID sinkron. Tungsten ditulis di Jawa, oleh karena itu mereka menawarkan Myosotis untuk menjembatani klien database asli.

  • SymmetricDS baik untuk multi-master asynchronous. Ini adalah open-source. Ini menginstal / mencopot pemasangan memicu untuk menangkap pembaruan, bukan bin logging. Itu dapat menjalankan mandiri atau tertanam di aplikasi Java.

  • HA-JDBC baik untuk multi-master sinkron. Ini menggantikan perangkat lunak lama yang tidak berfungsi seperti C-JDBC dan Sequoia. Ini adalah open-source. Ia menggunakan komit dua fase dan berfungsi untuk PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase, dan banyak lainnya melalui dialek. Ini terutama untuk embedded, jadi embed dalam aplikasi Java untuk menjembataninya ke PostgreSQL. Kunci, urutan, waktu, rand, dan sebagainya yang didistribusikan, ditangani oleh jGroups dari Redhat / JBoss. Salah satu fitur yang bagus adalah mode transaksi "serial" alih-alih "paralel", jika aplikasi Anda mengalami kebuntuan dan tidak mendukung rollback. Saya berhasil menggunakan mode "serial" ini untuk me-retrofit aplikasi lawas yang tidak disadari DB-cluster, jadi tidak ada kode coba lagi transaksi. Mode serial menyelamatkan hari dan menghindari penulisan ulang yang tidak menyenangkan.

  • H2 baik untuk multi-master sinkron. Ini adalah open-source. Ini mendukung database atau cluster mandiri menggunakan komit dua fase, mirip dengan arsitektur HA-JDBC, tetapi semuanya dalam satu alih-alih memerlukan komponen tambahan untuk komit dua fase. Tidak yakin apakah kunci itu didistribusikan sendiri, atau tergantung pada pihak ketiga seperti jGroups atau Hazelcast.

Setiap replikasi berbasis JDBC untuk PostgreSQL dan basis data lainnya memerlukan asli ke jembatan JDBC, kecuali aplikasi Anda sudah ditulis dalam Java. Untuk MySQL, Tungsten Enterprise menawarkan komponen opsional yang disebut Myosotis. Saya berhasil menggunakan ini untuk menjembatani PHP / Perl / C / mysqlclient ke JDBC, di mana sumber data JDBC kebetulan merupakan sumber data proxy HA-JDBC yang menunjuk ke 4-node MySQL / InnoDB cluster.

Tungsten mendukung PostgreSQL dalam komponen Replicator dan Router mereka, tetapi tidak yakin tentang komponen Myosotis. Mungkin. Tungsten Replicator / Router komponen untuk multi-master asynchronous, tetapi Myosotis dapat menjembatani Anda ke back-end JDBC alternatif seperti HA-JDBC atau H2 untuk sinkron.

Jika ada PostgreSQL asli dari JDBC bridge, saya ingin mendengarnya. Secara teori, basis data apa pun dengan driver JDBC Type 4 dapat dijembatani. Tipe 4 JDBC berbicara protokol basis data asli seperti antarmuka klien asli untuk basis data itu, jadi harus ada pemetaan satu-ke-satu dari panggilan asli ke panggilan JDBC.


2

Jawabannya adalah no.


sudah beberapa tahun sejak saya melakukan penelitian, tetapi perusahaan saya sampai pada kesimpulan ini ketika kami mencoba.
grufftech

1

Saya telah menggunakan londiste selama 2 tahun terakhir untuk replikasi multi-master di postgresql.

Anda menempatkan tabel Anda dalam antrian menggunakan pg_queue dan Anda dapat berlangganan sebanyak mungkin basis data lain yang Anda inginkan untuk setiap antrian, replikasinya bersifat atomis demi antrian dan sangat tangguh.

Anda dapat membaca tentang londiste di sini ( http://pgfoundry.org/projects/skytools/ ), inilah yang digunakan orang-orang Skype untuk kluster mereka, juga mereka yang membuatnya, jadi gandakan kerennya :)


Hmm itu menarik, tetapi menurut apa yang saya lihat di sini: wiki.postgresql.org/wiki/… , Londiste adalah Master-Slave dan Asynchronous? Jadi bagaimana bisa multi-master? Selain itu, saya benar-benar membutuhkan replikasi sinkron: transaksi harus gagal jika salah satu dari node cluster (aktif) gagal.
mrkafk

Replikasi ini bersifat post-transaksional kalau tidak akan cukup lambat
lynxman

Saya tidak bermaksud terdengar seperti rasa sakit di pantat (nitpicking), tapi ... 1. Saya telah menggunakan pgpool-II dan transaksi berjalan cukup cepat (meskipun saya belum melakukan benchmark), dan 2. meskipun transaksi individu mungkin lebih lambat, saya tidak melihat alasan yang baik untuk keseluruhan throughput transaksi menjadi rendah. Bagaimanapun, mungkin poin yang lebih penting adalah bagaimana Londiste multi-master? Dapatkah saya menulis ke server pg 1 dan membuatnya direplikasi ke 2, dan menulis ke server pg 2 dan membuatnya direplikasi ke server 1?
mrkafk


-2

Saya menemukan sistem replikasi "multi-master" yang dapat digunakan:

  1. dapatkan RabbitMQ http://www.rabbitmq.com/ - ini adalah pesan middleware.

  2. mengkonfigurasi cluster Rabbit MQ di Rabbit.

  3. buat antrian untuk setiap node dalam sebuah cluster dan ikat mereka ke pertukaran tipe 'fanout'.

Dengan cara ini pesan dikirim ke simpul mana saja dan antrian apa pun akan direplikasi ke semua simpul lainnya. Saya punya kode yang berfungsi untuk ini!


2
@mrafk - Anda memposting / menautkan "kode kerja" yang Anda miliki?
warren

2
Apa hubungannya ini dengan replikasi dengan postgres? Ini akan mendistribusikan pesan, tetapi dari mana Anda mendapatkan pesan / pembaruan data dari DB dan bagaimana cara memperbarui node yang menerima pesan pada antrian pesan?
monksy

3
Ini mungkin solusi untuk masalah mendasar yang Anda hadapi, tetapi itu bukan jawaban untuk pertanyaan ini.
Tom Anderson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.