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. :)
sumber
Jawaban:
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:
http://wiki.postgresql.org/wiki/NTT's_Development_Projects
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.
sumber
Dan untuk melemparkan solusi lain ke atas ring: rubyrep.
Untuk membandingkan dengan kebutuhan Anda:
Ya, itu sebenarnya fokus utama rubyrep.
Ya. Sebenarnya rubyrep melakukan replikasi master-master - untuk gagal, tidak ada tindakan yang diperlukan sama sekali. Mulai gunakan database lain.
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.
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
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.
sumber
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.
sumber
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.
sumber
Lihat diskusi di sini, mungkin itu bisa membantu:
http://blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html
dan
Pesaing ke Bucardo Versi Satu, ditemukan lebih rendah di halaman:
http://www.planetpostgresql.org/
sumber
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:
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.
sumber
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.
sumber
Postgres-R tampak menjanjikan tetapi saya tidak tahu apakah proyek itu masih hidup.
sumber
Saat ini saya sedang melihat replikator Tungsten, saya masih jauh dari kesimpulan yang pasti, tetapi mungkin layak untuk dilihat.
www.continuent.com
sumber