PostgreSQL Failover - Alat apa yang harus saya gunakan?


8

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.


Saya memiliki masalah dengan UCARP ketika saya tidak bisa melakukan ping VIP

punya Anda solusi untuk mengkonfigurasi UCARP dengan CentOs

tidak tahu apakah Anda berhasil dalam apa yang Anda inginkan tetapi di sini adalah beberapa langkah demi langkah howtos untuk apa yang Anda inginkan: howtoforge.com/… library.linode.com/linux-ha/… Semoga ini bisa membantu.
Dragan Matic

Jawaban:


5

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.


UPDATE: Kunjungan singkat ke situs web DRBD dan beberapa bacaan telah menjawab pertanyaan saya di atas. Dan pengaturan yang Anda sebutkan tampaknya menjadi alat yang sempurna. Saya masih akan menghargainya jika Anda menautkan saya ke beberapa pelajaran / tutorial bagus di atas, karena saya bermaksud untuk mempelajarinya selama akhir pekan :)
wingedrhino

Hai, ini tidak memperhitungkan jika hanya server postgres (layanan) yang gagal. Mesin masih menyala dan memiliki IP virtual, tetapi layanan tidak berjalan di mesin itu.
GypsyCosmonaut
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.