Балансировка нагрузки
|
ПРИМЕЧАНИЕ
Балансировка нагрузки доступна в версии ADPG Enterprise.
|
В кластере 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.
|