Berikut ini skenarionya:
Ada dua mesin yang menjalankan CentOS 6.2 - machine0 dan machine1
Keduanya memiliki PostgreSQL 9.1 diinstal.
Salah satunya harus aktif, sebagai sistem master dan melalui replikasi streaming asinkron mesin lain, siaga harus menyalin perubahan ke database dari sistem master.
Dengan asumsi bahwa machine0 adalah master dan machine1 adalah siaga di awal.
Jika master (katakanlah machine0) gagal (kegagalan di sini berarti server postgresql lumpuh) siaga harus mengambil alih dari master dan menjadi master baru.
machine1, master baru menangani semua operasi database dan ketika server postgresql di machine0 kembali online, itu harus menjadi siaga, mulai menyinkronkan dari titik itu kehilangan kontak dengan machine1 dan menyalin semua perubahan ke database dan tetap dalam mode siaga.
Ketika machine1 gagal, seluruh siklus berulang.
Ketika siaga gagal dan kembali online, itu harus mulai membaca dari master dan menyinkronkan data.
Saya bingung alat apa yang perlu saya gunakan untuk mengatur ini karena saya mengerti PostgreSQL tidak datang dengan failover secara default.
Jika seseorang dapat menautkan saya ke utas / halaman yang menjelaskan cara melakukan apa yang saya coba, saya akan sangat berterima kasih.
sumber
Jawaban:
Jika Anda tertarik dengan Replikasi dan Failover DB sinkron, saya punya saran. Anda bisa melihat menggunakan dua alat:
DRBD (Disk Replicated Block Device) menyediakan Replikasi Level Disk (sinkron) antara disk pada dua server yang berbeda. Perubahan disk direplikasi melalui jaringan. Yang terbaik adalah menggunakan kabel crossover pada eth2 untuk NIC menggunakan netblock 192.168.xx.
ucarp memungkinkan manajemen DBVIP dan failover antara dua server yang berbeda.
Anda dapat menggunakannya bersamaan sebagai berikut:
Setup ucarp pada dua server yang berbeda sedemikian rupa sehingga setiap instance ucarp berkomunikasi dengan yang lain di sepanjang ID router virtual
DBServer1 akan memiliki
DBServer2 akan memiliki
Apa alasannya -b (siaran) adalah 3 pada satu server dan 4 pada yang lainnya? Jika kedua server di-restart, server dengan -b terendah akan membawa ucarp terlebih dahulu. Adapun -r, itu adalah rasio mati. Dengan demikian, DBServer1 akan muncul dalam 15 detik (3X5) dan DBServer2 muncul dalam 20 detik (4X5).
Katakanlah DBServer1 macet. ucarp pada DBServer2 akan memeriksa selama 20 detik untuk handshaking dari ucarp pada DBServer1. Jika tidak ada yang terdeteksi, skrip vip-up.sh pada DBServer2 akan mengendalikan DBVIP.
OK semua ini hanya untuk manajemen failover dan DBVIP. Bagaimana dengan database PostgreSQL? Anehnya, PostgreSQL hanya berjalan di satu server pada satu waktu. Siapa pun yang memiliki DBVIP harus memiliki DRBD di negara bagian Primer. Ini terkait kembali dengan skrip vip-up. Bagaimana Anda menulisnya?
Berikut ini skrip /usr/local/sbin/vip-down.sh (konseptual)
Berikut ini skrip /usr/local/sbin/vip-down.sh (konseptual)
Yang perlu Anda lakukan adalah mengatur pg_hba.conf untuk memastikan semua pengguna datang melalui 10.1.2.70
Intinya, vip-up melakukan urutan ini
Contrawise, vip-down melakukan urutan ini
Bagaimana dengan vipmon.sh? Anda dapat membuat skrip untuk memeriksa, dalam loop tidak terbatas, status postgres (sedang berjalan), periksa perangkat DRBD (dapatkah Anda masih menulis ke folder data posting)
Dengan pengaturan ini, Anda memiliki postgres pada DRBD Primary dan salinan level disk dari folder data postgres pada DBSserver lainnya (DRBD Secondary). postgres tidak berjalan di DRBD Secondary.
Ketika failover terjadi, Anda hanya perlu waktu untuk mendeteksi ucarp aman untuk me-mount data postgres, startup postgres, dan mengaktifkan skrip vipmon.
Yang hebat tentang pengaturan ini adalah bahwa jika terjadi failover, DBSserver yang menjadi DRBD Primer harus memiliki salinan level disk 100% dari server yang gagal Anda hindari. Jadi memulai postgres akan membuat Anda level pada kondisi yang konsisten. Log transaksi (dalam pg_xlog) harus dalam kebijaksanaan (dikurangi intermittency karena kegagalan)
Saya harap saran ini membantu. Meskipun saya seorang DBA MySQL, saya menggunakan MySQL dan DRBD di perusahaan hosting web perusahaan saya secara teratur. Saya menginstal MySQL / DRBD dengan cara yang disebutkan di atas. Saya melakukan ini sekali untuk klien menggunakan PostgreSQL / DRBD. Ini bekerja dengan baik. Ini Sumber Terbuka. Anda hanya perlu melakukan uji tuntas dalam mempelajari DRBD dan ucarp. Ini akan mencakup menghubungkan kembali DRBD setelah failover, menangani skenario otak terpecah di mana kedua DB Server menjadi Primer, dan hal-hal seperti ini.
sumber