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, который действительно должен быть отдельным вопросом, это из FAQ 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".

Если вам это нужно, это всего лишь некоторый SQL-код, запущенный на вашем главном сервере Postgres, чтобы добавить функцию, используемую Pgpool.

С 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

Как и во всем остальном, есть много способов, как вы можете выполнить развертывание высокой доступности. Здесь я предложу кое-что из моего опыта (моя собственная реализация HA):

  1. Всегда лучше иметь несколько экземпляров pgpool2 вместо одного. Причина очевидна: один pgpool2 является единственной точкой отказа. Поскольку в pgpool появилась функция сторожевого таймера, это легко сделать.
  2. Обычно лучше иметь экземпляры pgpool2 на разных компьютерах, чем использовать один и тот же компьютер между бэкэндом PostgreSQL и pgpool2. Но нет существенного недостатка, даже если вы запускаете их на том же сервере, что и PostgreSQL. (В моей реализации HA каждая машина запускает один экземпляр PostgreSQL и один экземпляр pgpool2.)

Наконец, я порекомендую этот пошаговый учебник, который приведет вас с нуля (установка сервера PostgreSQL ...) для завершения реализации высокой доступности. Упомянутый учебник описывает реализацию, которую я использую.

Надеюсь, это помогло.

ОБНОВЛЕНИЕ: Спасибо @Moshe Katz - ссылка действительно изменилась. Теперь обновлено здесь, в оригинальном посте также.


2
Указанный вами сайт itenlight.com/blog/2016/05/18/…, кажется, не работает. Вы можете посмотреть?
user6807024

Похоже, что статья теперь доступна на fatdragon.me/blog/2016/05/postgresql-ha-pgpool-ii-part-1
Моше Кац
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.