Postgres dengan arsitektur pgpool

9

Di bawah ini adalah contoh arsitektur pgpool:

masukkan deskripsi gambar di sini

Ini menyiratkan bahwa Anda hanya perlu memiliki pgpool pada satu server; Apakah ini benar? Ketika saya melihat konfigurasi saya juga melihat bahwa Anda mengkonfigurasi backends di dalamnya pgpool.conf; jadi lebih jauh menyiratkan ini. Tapi, itu tidak menjelaskan mengapa saya melihat pgpool di server backend juga.

Saat melihat dokumentasi, saya juga melihat:

Jika Anda menggunakan PostgreSQL 8.0 atau yang lebih baru, menginstal fungsi pgpool_regclass pada semua PostgreSQL untuk diakses oleh pgpool-II sangat disarankan, karena digunakan secara internal oleh pgpool-II.

Jadi saya tidak yakin harus berpikir apa; apakah itu praktik terbaik untuk memiliki pgpool di semua backends atau hanya server khusus?

Erwin Brandstetter
sumber
jika Anda ingin ketersediaan tinggi, Anda mungkin menginginkan dua server pgpool di depan setidaknya 2 server postgresql (semuanya pada kotak yang berbeda)
Neil McGuigan

Jawaban:

10

Umumnya Anda tidak akan menginstal Pgpool di server backend. Apa yang Anda lihat dalam gambar Anda adalah konfigurasi yang paling umum. Pgpool adalah server mandiri yang pada dasarnya duduk di depan basis data. Dua server Postgres sering dikonfigurasi dengan replikasi streaming; dengan satu menjadi tuan dan yang lain menjadi budak.

Ini memungkinkan Pgpool memuat keseimbangan semua kueri baca antara dua (atau lebih) database. Setiap pertanyaan yang melibatkan penulisan apa pun, akan dialihkan ke server master yang pada gilirannya akan bereplikasi ke slave.

Seperti yang dikatakan @Neil McGuigan , Anda juga dapat memiliki beberapa server Pgpool untuk mencapai ketersediaan tinggi yang lebih baik. Secara teknis Anda bisa menginstal Pgpool pada server database dalam konfigurasi ini, tetapi ini akan menjadi praktik yang buruk. Menjalankan beberapa server Pgpool adalah konfigurasi yang jauh lebih kompleks. Jika ini pertama kalinya Anda menggunakan Pgpool, saya akan mulai dengan satu server Pgpool sebelum membuat dua server berfungsi.

Dalam konfigurasi mana pun, server aplikasi Anda berpikir itu hanya terhubung ke database Postgres tunggal.

Tentang pgpool_regclass, yang seharusnya menjadi pertanyaan terpisah, ini dari FAQ Pgpool :

Jika Anda menggunakan PostgreSQL 8.0 atau yang lebih baru, menginstal fungsi pgpool_regclass pada semua PostgreSQL untuk diakses oleh pgpool-II sangat disarankan, karena digunakan secara internal oleh pgpool-II. Tanpa ini, penanganan nama tabel duplikat dalam skema yang berbeda dapat menyebabkan masalah (tabel sementara tidak menjadi masalah).

Jika Anda menggunakan PostgreSQL 9.4.0 atau lebih baru dan pgpool-II 3.3.4 atau yang lebih baru, 3.4.0 atau lebih baru, Anda tidak perlu menginstal pgpool_regclass karena PostgreSQL 9.4 memiliki pgpool_regclass bawaan seperti fungsi "to_regclass".

Jika Anda memerlukan ini, ini hanya beberapa kode SQL yang berjalan di server master Postgres Anda untuk menambahkan fungsi yang digunakan Pgpool.

Dengan regclass, ada langkah tambahan yang harus Anda lakukan (saya sedang memikirkan insert_lock). Jika Anda mengkompilasi dari sumber (umumnya sebagian besar distribusi memiliki versi Pgpool yang benar-benar ketinggalan zaman), Anda harus mengkompilasi pustaka Postgres juga.

Jika Anda dikompilasi dari sumber, Anda harus masuk ke .../pgpool-II-3.X.X/src/sql/pgpool-regclassfolder dan melakukan a ./configure; make.

Salin file pgpool-regclass.so ke direktori ekstensi Postgres. Pada saya Ubuntu 14.04 Server (hanya menggunakan Postgres 9.3 paket instalasi), terletak di: /usr/lib/postgresql/9.3/lib. Ingatlah untuk melakukan ini untuk semua server Postgres.

Setelah itu selesai, maka Anda bisa menjalankan pgpool-regclass.sqlmaster. Ini hanya memetakan pgpool_regclassfungsi ke perpustakaan yang Anda salin.

Trevor Dell
sumber
1

Seperti yang lainnya, ada banyak cara bagaimana Anda bisa mencapai penyebaran ketersediaan tinggi Anda. Di sini saya akan menyarankan sesuatu dari pengalaman saya (implementasi HA saya sendiri):

  1. Itu selalu lebih baik untuk memiliki beberapa contoh pgpool2 daripada satu. Alasannya jelas: pgpool2 tunggal adalah titik kegagalan tunggal. Karena pgpool telah memperkenalkan fitur anjing penjaga, hal ini mudah dilakukan.
  2. Secara umum sedikit lebih baik untuk memiliki instance pgpool2 pada mesin yang terpisah daripada berbagi mesin yang sama antara backend PostgreSQL dan pgpool2. Tetapi tidak ada kelemahan signifikan bahkan jika Anda menjalankannya di server yang sama dengan PostgreSQL. (Dalam implementasi HA saya, setiap mesin menjalankan satu instance PostgreSQL dan satu instance pgpool2.)

Akhirnya saya akan merekomendasikan tutorial ini selangkah demi selangkah yang akan menuntun Anda dari awal (menginstal server PostgreSQL ...) untuk menyelesaikan implementasi ketersediaan tinggi. Tutorial tersebut menjelaskan implementasi yang saya gunakan.

Saya harap ini membantu.

UPDATE: Terima kasih @ Moshe Katz - tautannya berubah. Sekarang diperbarui di sini, di posting asli juga.

Pesona Aleksandar
sumber
2
Situs web yang ditunjuk oleh Anda itenlight.com/blog/2016/05/18/… tampaknya sedang down. Bisakah Anda melihatnya?
user6807024
Sepertinya artikel itu sekarang tersedia di fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Moshe Katz