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

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

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

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

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

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

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

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

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

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

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

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