Mengotomatiskan failover di PostgreSQL 9.1

18

Bagaimana caranya mensetup dua server identik untuk failover otomatis di PostgreSQL 9.1.

OS

Centos 5
PostgreSQL 9.1 dikompilasi dari sumber
. Akun pengguna postgres ada di kedua mesin dan memiliki kunci ssh tanpa kata sandi untuk terhubung ke kedua mesin.

Pengaturan Saya Saat Ini:

Konfigurasi server master:

postgresql.conf:

listen_address = '*'
wal_level = hot_standby
max_wal_senders = 3
checkpoint_segments = 16    
wal_keep_segments = 8 
archive_mode = on    
archive_command = 'cp "%p" /opt/pgsql91/archive/"%f"'  

pg_hba.conf:

 host  replication   all   10.0.66.1/32      trust
 host  replication   all   10.0.66.2/32      trust

Server Siaga

postgresql.conf dan pg_hba.conf identik dengan apa yang dikonfigurasikan pada server master.

recovery.conf:

 standby_mode = 'on'
 primary_conninfo = 'host=10.0.66.1'
 trigger_file = '/opt/pgsql91/data/trigger.txt'

Berkat hzRoot, saya sekarang mengerti cara beralih server dari standby ke master.

Dengan menggunakan perintah berikut, saya dapat menyinkronkan budak baru dengan master baru dan kemudian mendapatkan cadangan replikasi dan berjalan.

Pada master baru (10.0.66.2)

  1. su - postgres
  2. sentuh trigger.txt di / opt / pgsql91 / data /
  3. recovery.conf menjadi recovery.done
  4. psql -c "; SELECT pg_start_backup ('backup', true)";
  5. rsync -a -v -e ssh / opt / pgsql91 / data / 10.0.66.1:/opt/pgsql91/data/ - kecuali postmaster.pid
  6. psql -c "; SELECT pg_stop_backup ()";

Pada budak baru (10.0.66.1)

  1. buat recovery.conf: cp recovery.done ke recovery.conf
  2. vi recovery.conf ubah alamat ip: primary_conninfo = 'host = 10.0.66.2'
  3. mulai postgresql

Jadi pertanyaan saya sekarang:

  1. Apakah ini cara yang benar untuk berganti peran?
  2. Adakah yang mengotomatiskan proses ini, jika demikian apa yang Anda lakukan?
  3. Jika replikasi sinkron diaktifkan, saya perhatikan server master baru tidak akan melakukan transaksi apa pun karena menunggu budak merespons. Namun tidak ada budak karena server lain, master lama turun. Apakah ini benar atau apakah saya perlu menonaktifkan replikasi sinkron sementara sementara budak baru turun?
Craig Efrein
sumber
1. ya benar 2. mungkin lebih baik tidak mengotomatiskan proses itu. 3. jadi Anda membutuhkan 2 budak dan 1 master setidaknya. karena seperti yang Anda katakan sinkronisasi. replikasi membutuhkan setidaknya 2 node untuk mendorong sinkronisasi. jika hanya ada satu node master, Anda tidak akan dapat melakukan ..
sftsz
langkah 4, 5, dan 6 tidak diperlukan pada master baru karena, well, Anda mereplikasi untuk memulai. Kedua, bagaimana jika master itu mati dan sedang offline - Anda tidak akan dapat terhubung dengannya. Langkah 4,5, & 6 biasanya dilakukan pada node slave baru yang bergabung dengan kumpulan replikasi.
Eric
@ Eric saat saya bermain dengan ini, langkah 4,5,6 diperlukan untuk membawa kembali master lama ke kondisi kerja. Membuat siaga baru utama segera membuat entri WAL baru, jadi sekarang 1 entri di depan master lama. Memulai master lama dalam mode standy melemparkan kesalahan pada saya, jadi saya harus membuat langkah 4,5,6 pada master lama untuk menyinkronkannya dengan master baru (dengan menggunakan pg_basebackup, yang dapat mengalirkan seluruh xlog dari master baru - menggantikan langkah 4,5,6 di postgres> = 9,1 saya pikir). Apakah saya benar atau apakah saya melakukan sesuatu yang salah dan ini tidak perlu?
Dalibor Filus

Jawaban:

8

Lihat repmrg :

repmgr adalah seperangkat alat sumber terbuka yang membantu DBA dan administrator Sistem mengelola sekelompok database PostgreSQL ..

Dengan memanfaatkan kemampuan Hot Standby yang diperkenalkan pada PostgreSQL 9, repmgr sangat menyederhanakan proses pengaturan dan pengelolaan basis data dengan ketersediaan tinggi dan persyaratan skalabilitas.

repmgr menyederhanakan administrasi dan manajemen harian, meningkatkan produktivitas dan mengurangi biaya keseluruhan cluster PostgreSQL dengan:

  • memantau proses replikasi; memungkinkan DBA untuk mengeluarkan tinggi
  • operasi ketersediaan seperti switch-overs dan fail-overs.

Ia melakukan dua hal:

  1. repmgr: program perintah yang melakukan tugas-tugas di cluster Anda dan kemudian keluar
  2. repmgrd: daemon manajemen dan pemantauan yang mengawasi cluster dan dapat mengotomatiskan tindakan jarak jauh.

Untuk failover otomatis, repmgrd melakukan trik dan bukan SPOF di jaringan Anda, seperti pgPool. Namun, masih penting untuk memantau semua diaken dan membawanya kembali setelah kegagalan.

Versi 2.0 akan segera dirilis, termasuk RPM.

Frank Heikens
sumber
Halo Frank, terima kasih atas jawaban Anda. Saya belum pernah mendengar tentang repmrg dan saya pasti akan mencobanya.
Craig Efrein
Halo lagi Frank, Terima kasih untuk repmgr, itu persis apa yang saya cari. Saya akhirnya harus mencobanya hari ini.
Craig Efrein
4

dalam file recovery.conf Anda, Anda harus menambahkan baris yang memberitahu postgres untuk failover dari master ke slave. Anda harus menambahkan

trigger_file = '/any/file/to/trigger'

ketika Anda membuat file ini di jalur yang diberikan. node akan berubah. (file tidak termasuk apa pun itu hanya pemicu)

Anda dapat menemukan informasi tambahan tentang replikasi streaming

di sisi lain, mungkin akan membuatnya secara otomatis dibuat dengan beberapa trik tetapi menggunakan alat pemantauan dan membuat kegagalan manual akan lebih baik ..

sftsz
sumber
Terima kasih atas tanggapannya. Mungkin perlu beberapa hari sebelum saya bisa mengujinya tetapi saya pasti akan membalas Anda.
Craig Efrein
Saya akan memberi Anda +1 untuk jawaban trigger_file yang telah membantu saya untuk merampingkan proses. Bukan seluruh jawaban yang bagaimana mengotomatisasi proses sepenuhnya. Satu hal lain yang saya perhatikan adalah bahwa ketika master sedang down, transaksi tidak akan selesai karena menunggu master untuk mengakui. Ini diselesaikan dengan menggunakan replikasi async
Craig Efrein
Itu luar biasa. Saya memiliki banyak kritik tentang kurangnya fleksibilitas dalam implementasi replikasi PostgreSQL, tetapi ini adalah cara yang bagus dan sederhana untuk menangani failover.
Aaron Brown
1
Namun itu mengambil alih peran master bahkan ketika master itu sendiri masih berjalan (jadi Anda memiliki dua tuan). Ini tidak otomatis oleh postgres itu sendiri.
Dalibor Filus
0

Adakah yang mempertimbangkan menggunakan pgpool-II untuk ini?

http://pgpool.projects.postgresql.org/contrib_docs/simple_sr_setting/index.html

Saya mengatur replikasi untuk PostgreSQL. Tampaknya bagian yang sulit terjadi ketika tuan tua kembali.

Dari apa yang saya baca, pgpool sepertinya bisa mengotomatisasi sebagian besar dari itu. Namun saya tidak yakin apakah memanfaatkan fitur replikasi yang sudah ada di PostgreSQL 9.1.

Paulo SantAnna
sumber
1
pgPool adalah satu-satunya titik kegagalan, Anda kehilangan segalanya saat turun.
Frank Heikens
1
Terima kasih atas jawaban Anda. Saya telah mencoba PGPool II dengan hasil beragam pada CentOS dan Debian dan akhirnya menyerah.
Craig Efrein
1
Mengapa tidak menggunakan pgpool II dengan HAproxy? Dengan detak jantung dan ip mengambang mendengarkan?
mikiemorales
Hanya untuk referensi bersejarah, pgpool-ii juga saat ini tidak berjalan di Windows.
tommed