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:
- DBServer1 memiliki IP 10.1.2.30
- DBServer2 memiliki IP 10.1.2.40
- DB VIP adalah 10.1.2.70
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
/usr/local/sbin/ucarp -v 200 -p sometagname --interface=eth2 -a 10.1.2.70 -s 10.1.2.30 -b 3 -r 5 --upscript=/usr/local/sbin/vip-up.sh --downscript=/usr/local/sbin/vip-down.sh --neutral -z -B
DBServer2 akan memiliki
/usr/local/sbin/ucarp -v 200 -p sometagname --interface=eth2 -a 10.1.2.70 -s 10.1.2.40 -b 4 -r 5 --upscript=/usr/local/sbin/vip-up.sh --downscript=/usr/local/sbin/vip-down.sh --neutral -z -B
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)
#! /bin/sh
exec 2> /dev/null
/sbin/drbdadm disconnect drbd0
/sbin/drbdadm primary drbd0 &&
/bin/mount postgres-data-folder /mnt/drbd0
/sbin/ip addr add 10.1.2.70/24 dev eth2
/sbin/service postgres start &&
/usr/local/sbin/vipmon.sh &
touch /tmp/vip-up
Berikut ini skrip /usr/local/sbin/vip-down.sh (konseptual)
#! /bin/sh
exec 2> /dev/null
/sbin/service postgres stop
/bin/umount -l /dev/drbd0
/sbin/drbdadm secondary drbd0
/sbin/ip addr del 10.1.2.70/24 dev eth2
/bin/rm /tmp/vip-up
/usr/bin/killall -9 ucarp
/usr/local/sbin/vip-down.sh
kill `ps auxww | grep vipmon | awk '{print $2}'`
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
- Suruh DRBD masuk Pratama
- Pasang folder data postgres di / dev / drbd0
- Postup startup
- mulai proses vipmon
Contrawise, vip-down melakukan urutan ini
- Shutdown postgres
- tak terhitung / dev / drbd0
- Minta DRBD menjadi Sekunder
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.