Postgres з архітектурою pgpool


9

Нижче наведено приклад архітектури pgpool:

введіть тут опис зображення

Це означає, що вам потрібно мати лише pgpool на одному сервері; це правда? Коли я дивлюся на конфігурацію, я також бачу, що ви налаштовуєте програмні пакети всередині pgpool.conf; тому далі це передбачає. Але це не пояснює, чому я також бачу pgpool на серверах бекенда.

Переглядаючи документацію, я також бачу:

Якщо ви використовуєте PostgreSQL 8.0 або пізнішої версії, настійно рекомендується встановити функцію pgpool_regclass на всі PostgreSQL, до яких можна отримати доступ з допомогою pgpool-II, оскільки її pgpool-II використовує внутрішньо.

Тож я не впевнений, що думати; якщо найкраща практика мати pgpool на всіх серверах або просто на спеціальному сервері?


якщо ви збираєтесь забезпечити високу доступність, ви, мабуть, хочете два сервери pgpool перед принаймні двома серверами postgresql (усі в різних полях)
Ніл МакГуйган

Відповіді:


10

Як правило, ви не встановлювали б Pgpool на задніх серверах. Те, що ви бачите на малюнку, є найпоширенішою конфігурацією. Pgpool - це окремий сервер, який по суті сидить перед базами даних. Два сервери Postgres часто налаштовуються за допомогою потокової реплікації; один з них господар, а другий раб.

Це дозволяє Pgpool завантажувати баланс всіх прочитаних запитів між двома (або більше) базами даних. Будь-які запити, що стосуються будь-яких записів, будуть перенаправлені на головний сервер, який, у свою чергу, копіюється на підлеглий.

Як сказав @Neil McGuigan , ви також можете мати кілька серверів Pgpool, щоб досягти кращої високої доступності. Технічно ви могли б встановити Pgpool на сервери баз даних у цій конфігурації, але це було б поганою практикою. Запуск декількох серверів Pgpool - це набагато складніша конфігурація. Якщо це ваш перший раз з Pgpool, я би почав з одного сервера Pgpool, перш ніж два працювати.

В будь-якій конфігурації ваш сервер додатків вважає, що це просто підключення до однієї бази даних Postgres.

Про те pgpool_regclass, що насправді має бути окремим запитанням, це питання із поширених запитань про Pgpool :

Якщо ви використовуєте PostgreSQL 8.0 або пізнішої версії, настійно рекомендується встановити функцію pgpool_regclass на всі PostgreSQL, до яких можна отримати доступ з допомогою pgpool-II, оскільки її pgpool-II використовує внутрішньо. Без цього обробка дублікатів назв таблиць у різних схемах може спричинити проблеми (тимчасові таблиці не є проблемою).

Якщо ви використовуєте PostgreSQL 9.4.0 або новішої версії та pgpool-II 3.3.4 або пізнішої версії, 3.4.0 або пізнішої версії, вам не потрібно встановлювати pgpool_regclass, оскільки PostgreSQL 9.4 має вбудований pgpool_regclass на зразок функції "to_regclass".

Якщо вам це потрібно, для додавання функції Pgpool використовується лише деякий SQL-код, запущений на вашому головному сервері Postgres.

З regclass є додатковий крок, який ви повинні зробити (я думав про insert_lock). Якщо ви компілюєте з джерела (як правило, більшість дистрибутивів мають справді застарілі версії Pgpool), вам також доведеться скласти бібліотеку Postgres.

Якщо ви компілювали з джерела, вам доведеться зайти в .../pgpool-II-3.X.X/src/sql/pgpool-regclassпапку і зробити ./configure; make.

Скопіюйте файл pgpool-regclass.so в каталог розширень Postgres. На моєму сервері Ubuntu 14.04 (тільки з допомогою пакета Postgres 9.3 установки), він розташований по адресою: /usr/lib/postgresql/9.3/lib. Не забудьте зробити це для всіх серверів Postgres.

Після того, як це буде завершено, ви можете запустити pgpool-regclass.sqlмайстра. Це просто відображає pgpool_regclassфункцію в бібліотеці, яку ви скопіювали.


1

Як і у всьому іншому, існує багато способів, як можна досягти розгортання високої доступності. Тут я запропоную щось із власного досвіду (власна реалізація НА):

  1. Завжди краще мати кілька екземплярів pgpool2, а не один. Причина очевидна: одиночний pgpool2 - це єдина точка відмови. Оскільки pgpool запровадив функцію сторожового собаки, це легко здійснити.
  2. Як правило, трохи краще мати екземпляри pgpool2 на окремих машинах, ніж ділити одну і ту ж машину між Backgre PostgreSQL і pgpool2. Але суттєвого недоліку немає, навіть якщо ви запускаєте їх на тому ж сервері, що і PostgreSQL. (У моїй реалізації HA кожен апарат запускає один екземпляр PostgreSQL та один екземпляр pgpool2.)

Нарешті, я порекомендую цей покроковий посібник, який приведе вас з нуля (встановлення PostgreSQL-сервера ...) до повного впровадження високої доступності. Згаданий підручник описує реалізацію, яку я використовую.

Сподіваюся, це допомогло.

ОНОВЛЕННЯ: Спасибі @Moshe Katz - посилання змінилося. Зараз оновлено тут, у оригінальній публікації також.


2
Веб-сайт, вказаний вами itenlight.com/blog/2016/05/18/…, схоже, не працює. Ви можете поглянути?
користувач6807024

Схоже, стаття тепер доступна на сайті fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Moshe Katz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.