Балансировка нагрузки

ПРИМЕЧАНИЕ
Балансировка нагрузки доступна в версии ADPG Enterprise.

В кластере ADPG реализована балансировка нагрузки, которая заключается в распределении запросов от пользователей по разным репликам базы данных. Это позволяет выполнять большее количество запросов одновременно.

Балансировка нагрузки в ADPG
Балансировка нагрузки в ADPG
Балансировка нагрузки в ADPG
Балансировка нагрузки в ADPG

Для того чтобы реализовать балансировку нагрузки, в ADPG используется HAProxy (High Availability Proxy). HAProxy является программным балансировщиком нагрузки TCP/HTTP. HAProxy слушает два порта: подключения к одному из них передаются лидеру, запросы ко второму распределяются по ADPG-нодам. Транзакции на запись должны приходить на первый порт, а на чтение на второй. Если транзакция на запись передаётся на порт для запросов на чтение, ADPG может ее отклонить.

ПРИМЕЧАНИЕ
HAProxy не определяет, является ли текущая транзакция запросом на запись или только на чтение. Выбирать корректный порт для подключений должны клиентские приложения.

В соответствии с заданными правилами HAProxy выбирает какой ноде передать клиентский запрос. Запросы на запись обрабатываются только нодой-лидером, а на чтение передаются репликам. Также можно настроить HAProxy так, чтобы лидер мог обрабатывать запросы на чтение. Настройка сервиса балансировки описана в статье Настройка балансировки нагрузки.

Если в кластере включена утилита PgBouncer, которая управляет пулом соединений, запросы на запись будут передаваться в экземпляр PgBouncer ноды-лидера ADPG, а запросы на чтение — экземплярам PgBouncer нод-реплик. См. Настройка PgBouncer.

В качестве распределенного хранилища конфигурации (Distributed Configuration Store, DCS) ADPG использует etcd-кластер. Сервис Patroni, реализующий потоковую репликацию, сохраняет информацию о конфигурации ADPG-кластера в Etcd. За дополнительной информацией об организации репликации в ADPG обратитесь к статье Обзор отказоустойчивости ADPG.

Сервис conf.d отвечает за обновление конфигурационных файлов HAProxy при изменении конфигурации кластера (добавлении новой ноды, смене лидера). Сервис conf.d устанавливается на один хост с HAProxy и подписывается на обновления конфигурации кластера ADPG, сохраняемые в Etcd. Когда конфигурация изменяется, conf.d генерирует новые конфигурационные файлы для HAProxy и перезагружает HAProxy, чтобы применить изменения.

HAProxy также использует Patroni REST API для дополнительной проверки — какая нода является лидером, а какая репликой.

РЕКОМЕНДАЦИЯ
Для повышения отказоустойчивости HAProxy можно использовать технологии, не имеющие прямого отношения к ADPG. Например, хосты HAProxy могут быть добавлены как записи A/AAAA с одним FQDN в таблицу соответствия DNS-сервера. Кроме того, утилиту keepalived можно использовать для управления несколькими хостами HAProxy.
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней