PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengelola Ketersediaan Tinggi PostgreSQL – Bagian I:Kegagalan Otomatis PostgreSQL

Mengelola Ketersediaan Tinggi (HA) di hosting PostgreSQL Anda adalah topik yang sangat penting untuk memastikan kluster penerapan database Anda mempertahankan waktu kerja yang luar biasa dan kinerja operasional yang kuat sehingga data Anda selalu tersedia untuk aplikasi Anda. Dalam postingan blog sebelumnya, kami memperkenalkan Anda untuk mengonfigurasi ketersediaan tinggi untuk PostgreSQL menggunakan replikasi streaming, dan sekarang kami akan menunjukkan cara terbaik mengelola ketersediaan tinggi sisi klien.

Ada beberapa alat yang tersedia untuk mengelola ketersediaan tinggi (HA) cluster penerapan PostgreSQL Anda menggunakan replikasi streaming. Solusi ini menawarkan kemampuan failover otomatis, memantau ketersediaan dan status sistem, replikasi, manajemen pengguna, dan tugas administratif berguna lainnya pada kasus penggunaan untuk database Postgres. Beberapa solusi open source terkemuka meliputi:

  1. Failover Otomatis PostgreSQL oleh ClusterLabs

  2. Manajer Replikasi untuk Cluster PostgreSQL oleh repmgr (Kuadran Kedua)

  3. Pelindung oleh Zalando

Setiap alat menyediakan caranya sendiri untuk mengelola kluster PostgreSQL dengan ketersediaan tinggi. Dalam rangkaian postingan tiga bagian kami di HA untuk PostgreSQL, kami akan membagikan ikhtisar, prasyarat, dan hasil kerja dan pengujian untuk masing-masing dari ketiga alat ini. Di sini, di Bagian 1, kita akan mendalami solusi PAF oleh ClusterLabs.

  • Mengelola Ketersediaan Tinggi di PostgreSQL – Bagian II:Manajer Replikasi
  • Mengelola Ketersediaan Tinggi di PostgreSQL – Bagian III:Patroni

Bagaimana Cara Mengelola Ketersediaan Tinggi untuk Database PostgreSQL Anda?

PostgreSQL Automatic Failover (PAF) adalah solusi manajemen ketersediaan tinggi untuk PostgreSQL oleh ClusterLabs. Ini menggunakan replikasi sinkron Postgres untuk menjamin bahwa tidak ada data yang hilang pada saat operasi failover. Itu menggunakan Pacemaker standar industri dan tumpukan Corosync yang populer. Dengan aplikasi Pacemaker dan Corosync secara bersamaan, Anda akan dapat mendeteksi kegagalan database PostgreSQL di sistem dan bertindak sesuai dengan itu.

Alat pacu jantung adalah layanan yang mampu mengelola banyak sumber daya, dan melakukannya dengan bantuan agen sumber daya mereka. Agen sumber daya kemudian memiliki tanggung jawab untuk menangani sumber daya tertentu, bagaimana mereka harus berperilaku, dan memberi tahu Pacemaker tentang hasil mereka.

Implementasi agen sumber daya Anda harus mematuhi spesifikasi Open Cluster Framework (OCF). Spesifikasi ini mendefinisikan perilaku agen sumber daya dan penerapan metode seperti stop, start, promote, demote, dan interaksi dengan Pacemaker.

PAF adalah agen sumber daya OCF untuk Postgres yang ditulis dalam Perl. Setelah kluster database Anda dibuat menggunakan replikasi streaming internal, PAF dapat memaparkan kepada Pacemaker status terkini dari instans PostgreSQL di setiap node database:master, slave, stop, catching up, load balancer, dll.

Cara Kerja Failover Otomatis Postgres

PAF berkomunikasi dengan Pacemaker mengenai status cluster dan memantau fungsi database PostgreSQL. Jika terjadi kegagalan, ini akan memberi tahu Pacemaker, dan jika tidak ada kemungkinan master saat ini dipulihkan, itu akan memicu pemilihan antara salah satu server database siaga saat ini. Dengan Alat Pacu Jantung yang tangguh, Postgres Automatic Failover akan melakukan tindakan manajemen seperti memulai, menghentikan, memantau, dan failover pada semua node database Postgres.

Mengelola Ketersediaan Tinggi di PostgreSQL - Bagian I:Kegagalan Otomatis oleh ClusterLabsKlik Untuk Tweet

Failover Otomatis PostgreSQL untuk Konfigurasi Ketersediaan Tinggi (HA)

  • PAF mendukung PostgreSQL versi 9.3 dan lebih tinggi.
  • PAF tidak bertanggung jawab atas pembuatan master/standby PostgreSQL atau penyiapannya - Anda harus membuat dan menyiapkan replikasi streaming sebelum menggunakan PAF.
  • PAF tidak mengedit konfigurasi atau persyaratan penyiapan apa pun dari PostgreSQL. Namun, ini mengharuskan pengguna basis data untuk mengikuti beberapa prasyarat seperti:
    • Slave harus dikonfigurasi sebagai hot standby. Node slave siaga panas  dapat dikueri sebagai database hanya-baca.
    • File template pemulihan (default:/recovery.conf.pcmk) harus disediakan dengan parameter di bawah ini:
      • mode_siaga =pada
      • garis waktu_target_pemulihan ='terbaru'
      • koneksi_primer harus memiliki parameter application_name yang ditentukan dan disetel ke nama node lokal seperti di Alat Pacu Jantung.
  • PAF mengekspos beberapa parameter yang terkait dengan pengelolaan sumber daya Postgres. Ini dapat dikonfigurasi agar sesuai dengan kebutuhan seseorang. Di bawah ini adalah parameternya:
    • bindir: lokasi biner PostgreSQL (default:/usr/bin)
    • pgdata: lokasi PGDATA instans Anda (default:/var/lib/pgsql/data)
    • dir data: path ke direktori yang diatur dalam data_directory dari file postgresql.conf Anda
    • pghost: direktori socket atau alamat IP yang akan digunakan untuk terhubung ke instance lokal (default:/tmp)
    • pgport: port untuk terhubung ke instance lokal (default:5432)
    • templat_pemulihan: template lokal yang akan disalin sebagai file PGDATA/recovery.conf. File template ini harus ada di semua node (default:$PGDATA/recovery.conf.pcmk)
    • start_opts: Argumen tambahan yang diberikan untuk proses Postgres saat startup. Lihat “postgres –help” untuk opsi yang tersedia. Berguna ketika file postgresql.conf tidak ada di direktori data (PGDATA), mis.:-c config_file=/etc/postgresql/9.3/main/postgresql.conf
    • pengguna_sistem: pemilik sistem dari proses instance Anda (default:postgres)
    • makslag: lag maksimum yang diizinkan pada standby sebelum kami menetapkan skor master negatif di atasnya

Pro Failover Otomatis Postgres

  • PAF memberi pengguna konfigurasi langsung dan penyiapan PostgreSQL.
  • PAF dapat menangani kegagalan node dan memicu pemilihan saat master mati.
  • Perilaku kuorum dapat diterapkan di PAF.
  • Ini akan memberikan solusi manajemen database ketersediaan tinggi (HA) yang lengkap untuk sumber daya, termasuk memulai, menghentikan, dan memantau, serta menangani skenario isolasi jaringan.
  • Ini adalah solusi terdistribusi, yang memungkinkan pengelolaan setiap node dari node lain.

Kontra Failover Otomatis Postgres

  • PAF tidak mendeteksi jika node siaga salah dikonfigurasi dengan node yang tidak dikenal atau tidak ada dalam konfigurasi pemulihan. Node akan ditampilkan sebagai slave, meskipun standby berjalan tanpa terhubung ke node standby master/cascading.
  • Memerlukan port tambahan (Default 5405) untuk dibuka untuk komunikasi komponen Pacemaker dan Corosync menggunakan UDP.
  • Tidak mendukung konfigurasi berbasis NAT.
  • Tidak ada dukungan pg_rewind.

Ketersediaan Tinggi untuk Skenario Pengujian PostgreSQL

Kami melakukan beberapa pengujian untuk menentukan kemampuan manajemen ketersediaan tinggi (ha) PostgreSQL menggunakan PAF pada beberapa kasus penggunaan. Semua pengujian ini dijalankan saat aplikasi sedang berjalan dan memasukkan data ke database PostgreSQL. Aplikasi ditulis menggunakan PostgreSQL Java JDBC Driver dengan memanfaatkan kemampuan failover koneksi.

Pengujian Server Siaga

Sl. Tidak Skenario Pengujian Pengamatan
1 Bunuh proses PostgreSQL Pacemaker mengembalikan proses PostgreSQL ke status berjalan. Tidak ada gangguan dalam aplikasi penulis.
2 Hentikan proses PostgreSQL Pacemaker mengembalikan proses PostgreSQL ke status berjalan. Tidak ada gangguan pada aplikasi penulis.
3 Reboot server Node server database siaga awalnya ditandai offline. Setelah server muncul setelah reboot, database PostgreSQL dimulai oleh Pacemaker dan server ditandai sebagai online. Jika pagar diaktifkan, node tidak akan ditambahkan secara otomatis ke cluster. Tidak ada gangguan dalam aplikasi penulis.
4 Hentikan proses Alat Pacu Jantung Ini juga akan menghentikan proses PostgreSQL, dan node server akan ditandai offline. Tidak ada gangguan pada aplikasi penulis.

Pengujian Server Master/Primer

Sl. Tidak Skenario Pengujian Pengamatan
1 Bunuh proses PostgreSQL Pacemaker mengembalikan proses PostgreSQL ke status berjalan. Primer dipulihkan dalam waktu ambang batas dan, karenanya, pemilihan tidak dipicu. Aplikasi penulis tidak aktif selama sekitar 26 detik.
2 Hentikan proses PostgreSQL Pacemaker mengembalikan proses PostgreSQL ke status berjalan. Primer dipulihkan dalam waktu ambang batas dan, karenanya, pemilihan tidak dipicu. Ada waktu henti di aplikasi penulis selama sekitar 26 detik.
3 Reboot server Pemilihan dipicu oleh Alat Pacu Jantung setelah waktu ambang saat master tidak tersedia. Server siaga yang paling memenuhi syarat dipromosikan sebagai master baru. Setelah master lama muncul setelah reboot, master tersebut ditambahkan kembali ke cluster database sebagai standby. Jika pagar diaktifkan, node tidak akan ditambahkan secara otomatis ke cluster. Layanan aplikasi penulis mati selama sekitar 26 detik.
4 Hentikan proses Alat Pacu Jantung Ini akan menghentikan proses PostgreSQL juga dan server akan ditandai offline. Pemilihan akan dipicu dan master baru akan dipilih. Ada waktu henti dalam aplikasi penulis.

Tes Isolasi Jaringan

Sl. Tidak Skenario Pengujian Pengamatan
1 Jaringan mengisolasi server siaga dari server lain Lalu lintas Corosync diblokir di server siaga. Server ditandai offline dan layanan PostgreSQL dimatikan karena kebijakan kuorum. Tidak ada gangguan pada aplikasi penulis.
2 Jaringan mengisolasi server master dari server lain (skenario split-brain) Lalu lintas Corosync diblokir di server master. Layanan PostgreSQL dimatikan dan server master ditandai offline karena kebijakan kuorum. Seorang master baru terpilih di partisi mayoritas. Ada waktu henti di aplikasi penulis.

Ujian Lain-Lain

Sl. Tidak Skenario Pengujian Pengamatan
1 Turunkan cluster dengan mematikan semua server standby. Ketika semua server siaga mati, layanan PostgreSQL pada master dihentikan karena kebijakan kuorum. Setelah pengujian ini, ketika semua server siaga dihidupkan, master baru dipilih. Ada waktu henti di aplikasi penulis.
2 Matikan semua server secara acak satu demi satu, mulai dengan master, dan kembalikan semuanya secara bersamaan Semua server muncul dan bergabung dengan cluster. Tuan baru terpilih. Ada waktu henti di aplikasi penulis.

Apakah PAF adalah solusi untuk PostgreSQL High Availability?

Failover Otomatis Postgres memberikan beberapa keuntungan dalam menangani ketersediaan tinggi (HA) PostgreSQL pada banyak kasus penggunaan. PAF menggunakan failover alamat IP alih-alih me-reboot standby untuk terhubung ke master baru selama peristiwa failover. Ini terbukti menguntungkan dalam skenario di mana pengguna tidak ingin me-restart node standby. PAF juga membutuhkan sangat sedikit intervensi manual dan mengelola kesehatan keseluruhan dari semua sumber daya database Postgres. Satu-satunya kasus di mana intervensi manual diperlukan adalah jika terjadi perbedaan data linimasa di mana pengguna dapat memilih untuk menggunakan pg_rewind.

Di Bagian 1, kita telah membahas kemampuan dan cara kerja PostgreSQL Automatic Failover (PAF) oleh ClusterLabs, dan di Bagian 2, kita akan membahas aspek ketersediaan tinggi yang sama menggunakan Manajer Replikasi untuk cluster PostgreSQL (repmgr) oleh 2ndQuadrant. Pastikan untuk memeriksa kembali Bagian 3, di mana kami juga akan membahas Patroni by Zalando dan membandingkan ketiga solusi open source untuk membantu Anda menentukan yang paling cocok untuk aplikasi Anda.

Di blog Bagian 1, kita telah membahas kemampuan, praktik terbaik, dan cara kerja PAF oleh ClusterLabs, dan di entri blog Bagian 2, kita akan diskusikan topik yang sama tentang aspek ketersediaan tinggi menggunakan Manajer Replikasi untuk klaster Postgresql (repmgr) oleh 2ndQuadrant. Pastikan untuk memeriksa kembali postingan blog kami di Bagian 3, di mana kami juga akan membahas Patroni by Zalando dan membandingkan ketiga solusi open source untuk membantu Anda menentukan praktik terbaik dan kecocokan ideal untuk aplikasi bisnis Anda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Susunan tidak bersarang dengan satu tingkat

  2. SQLAlchemy tidak ada kesalahan yang diberikan kata sandi

  3. Sepuluh Cara untuk Memperluas Fungsi PostgreSQL

  4. Data baru tidak bertahan ke kolom array Rails di Postgres

  5. Panduan Pakar untuk Replikasi Slony untuk PostgreSQL