Replikasi PostgreSQL

45

Kami terus-menerus menangani ini di kantor, dan pertanyaannya terus muncul. Bagaimana Anda menangani replikasi PostgreSQL? Saya bahkan tidak perlu berbicara tentang cluster maju, hanya membuatnya sederhana dengan Master-Slave, Master-MultiSlave, dan Master-Master. Saya menemukan bahwa pengaturannya untuk MySQL biasanya cukup sederhana. Kegagalan mudah jika tidak sempurna, terutama untuk betapa mudahnya untuk mengkonfigurasi. Kami telah bermain dengan Slony, tapi agak terlalu praktis (perubahan skema memerlukan intervensi, database baru memerlukan intervensi, dll). PGPool2 cukup bagus, sampai sebuah node turun dan kami tidak dapat menemukan cara yang anggun (selain membawa semuanya ke bawah dan me-reseeding node yang jatuh) untuk mendapatkan replikasi kembali dalam sinkronisasi. Pada dasarnya inilah yang biasanya saya cari:

  • Pengaturan mudah (saya akan puas dengan pengaturan sulit, tetapi mudah diperluas)
  • Kegagalan sederhana
  • Membawa simpul yang jatuh kembali hanya membutuhkan waktu (yaitu seperti mysql. Server turun, Anda membawanya ke atas, dan menunggu replikasi untuk mengejar ketinggalan)
  • Perubahan skema tidak merusak replikasi
  • Menambahkan database baru ke server mulus (mis. Seperti mysql, Anda dapat mereplikasi seluruh server DB, sehingga database baru dibuat pada master, secara otomatis menyebar ke slave)

MySQL menangani sebagian besar dari ini dengan cukup baik, tetapi saya memiliki kesukaan tertentu untuk PostgreSQL. Selain itu, kami memiliki beberapa situasi di mana itu adalah satu-satunya pilihan kami, dan kami ingin menambahkan replikasi ke dalam campuran. Apa yang Anda gunakan saat ini, dan bagaimana perasaan Anda tentang solusi Anda? Saya berjanji, ini bukan postingan MySQL versus PostgreSQL, karena bukan itu yang saya coba untuk mulai. :)

f4nt
sumber
3
Saya tertarik dengan jawabannya. Berasal dari latar belakang MySQL, opsi replikasi untuk PSQL sangat sederhana.
Dave Cheney
Ya, sejauh ini setiap opsi yang saya mainkan memiliki kekurangan yang signifikan. Berharap aku kehilangan sesuatu yang jelas .. tapi saya tidak berpikir saya
f4nt
Saya menduga ada apa-apa lagi, tapi aku ingin seseorang untuk membuktikan saya salah
Vinko Vrsalovic
BTW, sudahkah Anda mencoba [email protected]?
Vinko Vrsalovic

Jawaban:

9

Jawaban singkat - belum ada solusi untuk PostgreSQL jika Anda membutuhkan budak yang hanya bisa dibaca secara online.

Ada dua proyek pengembangan besar yang sedang berlangsung di area ini yang termasuk dalam PostgreSQL 9.0 (Spring / Summer 2010), yaitu:

  • Replikasi Sinkron:

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

  • Baca hanya budak siaga panas:

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

yang secara kombinasi bertujuan untuk mencapai kemudahan penggunaan replikasi gaya MySQL dikurangi bug / masalah yang dimiliki MySQL plus keandalan yang diketahui pengguna dari PostgreSQL.

Semua ini dimulai oleh manifes dari Tim Inti PostgreSQL pada tahun 2008:

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

Solusi replikasi PostgreSQL untuk hari ini dengan basis pengguna terbesar adalah Slony-I (lebih mahal untuk menulis, membuat perubahan skema fiddly), pengiriman WAL / walmgr (Budak tidak dapat digunakan online) dan pgQ / londiste dari Skype / Skytools ( lebih banyak alat / blok bangunan daripada solusi yang sudah jadi).

Saya telah menulis beberapa hal tentang Pengiriman Log, walmgr dan Slony-I, lihat

http://blogs.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20 untuk informasi lebih lanjut.

Michael Renner
sumber
6
Replikasi Sinkron + Siaga Panas sekarang tersedia - lihat wiki.postgresql.org/wiki/… untuk ringkasan yang baik dari teknik yang tersedia
David Fraser
5

Dan untuk melemparkan solusi lain ke atas ring: rubyrep.

Untuk membandingkan dengan kebutuhan Anda:

  • Pengaturan mudah
    Ya, itu sebenarnya fokus utama rubyrep.
  • Kegagalan simplistis
    Ya. Sebenarnya rubyrep melakukan replikasi master-master - untuk gagal, tidak ada tindakan yang diperlukan sama sekali. Mulai gunakan database lain.
  • Perubahan skema tidak merusak replikasi
    Ya.
    Untuk replikasi perubahan kunci non-primer bahkan tidak harus berhenti (tetapi pastikan skema berubah di kedua sisi pada saat yang sama)
    Untuk menambah / menghapus tabel, cukup restart daemon replikasi. Hanya mengubah kolom kunci utama tabel membutuhkan sedikit usaha.
  • Menambahkan database baru ke server adalah mulus (yaitu seperti mysql, Anda dapat mereplikasi seluruh server DB, sehingga database baru dibuat pada master, secara otomatis menyebar ke slave)
    Ini hanya didukung dengan cara yang terbatas: setiap rubyrep setup hanya mereplikasi satu database pada suatu waktu. (Tetapi sangat mudah untuk mengatur replikasi untuk lebih dari satu database.)

sumber
4

Anda tidak menyebutkan memiliki hot-slave sebagai persyaratan, jadi saya akan mengusulkan menggunakan Heartbeat dengan penyimpanan bersama atau DRBD. Itu hanya melakukan hal yang benar dan administrasi sangat mudah. Ini setara dengan Linux dari Microsoft SQL Server clustering yang lebih lama. Satu node aktif dan node lainnya pasif sementara data dibagi antara keduanya. Anda tidak perlu khawatir tentang replikasi berbasis SQL karena semuanya ditangani lebih rendah di tingkat blok.

Serius, sejauh ini solusi terbaik jika Anda tidak perlu membaca budak. Hal-hal arsip WAL paling tipu dan Anda harus mengatur semuanya lagi jika Anda pernah mengganggu proses pengiriman untuk reboot server. slony dan londiste tidak memotong mustard. Jika Anda ingin tetap di pohon sumber utama dan tidak pergi komersial, Detak Jantung adalah taruhan terbaik Anda.

diq
sumber
2

Dari persyaratan Anda, tampaknya PITR adalah cara termudah untuk menyelesaikan masalah Anda:

Pencadangan online dan pemulihan point-in-time (PITR)

Anda tidak mengatakan bahwa Anda perlu meminta server slave, jadi PITR mungkin benar.

Ini adalah bagian standar dari PostgreSQL dari versi 8.0 sehingga Anda mungkin sudah memiliki semua yang diperlukan untuk menjalankannya.

Jika Anda menemukan instruksi terlalu bertele-tele, lihat SkyTools WalMgr yang akan membuat proses membuat / failover ke tugas perintah tunggal data hot-standby.

Untuk skenario replikasi yang lebih kompleks, saya punya pengalaman bagus Slony-1, tetapi PostgreSQL memiliki banyak opsi replikasi / HA yang baik tersedia.

dpavlin
sumber
dan opsi itu adalah ...?
Dave Cheney
... tercantum dalam posting blog blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html direferensikan dalam salah satu jawaban ...
dpavlin
2

Jika Anda ingin replikasi master / slave asinkron pertimbangkan Londiste (bagian dari paket skytools dari Skype) wiki.postgresql.org/wiki/Londiste_Tutorial

Sangat mudah untuk menginstal, menambahkan DB baru itu mudah, replikasi hanya "mengejar ketinggalan."

Failover tidak built-in. Anda perlu mengubah string koneksi aplikasi Anda atau mengaburkan koneksi DB di balik lapisan perangkat lunak lain.

Beberapa perubahan skema mudah. Yang lain lebih sulit. Itu tergantung pada aplikasi Anda. Versi skytools berikutnya (ver 3.0) seharusnya menangani DDL dan menyertakan fasilitas untuk mempermudah failover.

Kami pindah ke Londiste setelah mendapati Slony terlalu menyakitkan untuk digunakan.

KevinRae
sumber
1

Sebenarnya tidak ada cara gratis / sumber terbuka untuk menyediakan apa yang Anda cari. Jika Anda menginginkan sesuatu yang sangat turn-key, lihat berbagai solusi replikasi komersial pihak ketiga.

Sekarang, adalah mungkin untuk mengurutkan roll replikasi Anda sendiri dengan Postgres menggunakan write-head log (WAL) pengiriman:

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

Ini pada dasarnya di mana Anda dapat menempatkan simpul sekunder ke mode pemulihan berkelanjutan dan mengimpor log transaksi ke dalamnya setiap {interval kecil}. Konfigurasi Postgres memiliki "stubs" untuk memungkinkan Anda melakukan hal-hal tertentu ketika Postgres ketika WAL selesai dan tidak, dan itulah yang diprediksikan oleh setup itu - memanfaatkan "stubs" tersebut.

Namun, itu tidak memungkinkan Anda untuk melakukan master-master dan / atau replikasi melingkar.

Bagaimanapun, itu pasti berfungsi untuk erdundansi, tapi saya tidak akan menyebutnya "pengaturan mudah," "failover sederhana," "mulus," atau semacamnya.

Alex Balashov
sumber
jawaban ini merupakan duplikat dari saran PITR, karena PITR menggunakan WAL :-)
dpavlin
1

Kecuali untuk 'menambah basis data baru' Anda dapat mencoba Mammoth Replicator ( https://projects.commandprompt.com/public/replicator ). Ini open-source, mudah diatur dan mendukung failover. Keterbatasan utama adalah database tunggal dan ketidakmampuan untuk mereplikasi perubahan DDL, keduanya ada dalam daftar TODO.

Alexey Klyukin
sumber
0

Postgres-R tampak menjanjikan tetapi saya tidak tahu apakah proyek itu masih hidup.

brunoqc
sumber
0

Saat ini saya sedang melihat replikator Tungsten, saya masih jauh dari kesimpulan yang pasti, tetapi mungkin layak untuk dilihat.

www.continuent.com

Aleksandar Ivanisevic
sumber