Связаться по:
vkarabedyants Telegram Viber
+7 (499) 350-10-69

Блог о системном администрировании серверов и сайтов

Установка, настройка программного обеспечения Linux, Windows операционных систем

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

В данной статье рассмотрим один из способов обеспечения доступности высоко нагруженных систем такой как балансировщик нагрузки. Для примера будет использовать Pacemaker и IPaddr, который может быть запущен как Active-Passive кластер для обеспечения отказоустойчивости и Active-Active для балансировки нагрузки.

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

Преимущества использования:

  • Балансировщик не внешний — на всех серверах кластера (нодах) используется один общий IP (виртуальный). На этот адрес сервера отвечают случайным образом, по внутренней «договоренности».
  • Высокая доступность (High Availability) — при выходе одного сервера из строя, работа продолжается на оставшихся.
  • Простота — настройка осуществляется достаточно просто и быстро

Исходные данные

Исходные данные изображены на картинке выше, получаем шлюз и три ноды в кластере. Пользователи подключаются к IP шлюза, который в свою очередь направляет запрос на вируальный IP, который настроен на всех серверах кластера.

Усановка и настройка

Убедимся, что все сервера в кластере видят друг друга, для этого пропишем в /etc/hosts

192.168.100.101    hostA
192.168.100.102    hostB
192.168.100.103    hostC

Выполним установку необходимых пакетов

apt-get install pcs pacemaker corosync #Ubuntu, Debian
yum install pcs pacemaker corosync #CentOS, RHEL

При установке pcs создается пользователь, hacluster, сменим ему пароль

echo CHANGEME | passwd --stdin hacluster

Выполняем настройку идентификации на одном сервере кластера

pcs cluster auth HostA HostB HostC -u hacluster -p CHANGEME --force

Выполняем создание кластера из трех серверов

pcs cluster setup --force --name Cluster hostA hostB hostC

Запускаем кластер

pcs cluster start --all

Проверяем состояние кластера

pcs cluster status

Все ноды должны быть online

Для данной конфигурации не будут использоваться кворум и stonith, можем отключить их

pcs property set no-quorum-policy=ignore
pcs property set stonith-enabled=false

Настройка адресов

На всех серверах должен быть настроен один и тот же виртуальный адрес и MAC адрес, на запрос которого сервера будут отвечать поочередно.

Проблема в том, что в таблице коммутации mac-адрес закрепляется за портом, и пакеты будут отправляться только по этому порту. В нашем случае необходимо, что бы все сервера одновременно видели пакеты.

Обязательно проверить, что наш mac-адрес, является multicast адресом. Для такого адреса коммутатор отправляет пакеты во все порты, кроме того с которого был получен. Так же существуют коммутаторы, для которых можно прописать несколько портов для одного мака. Если у Вас поддерживается функция  Dynamic ARP Inspection, то её нужно отключить.

Настройка IPaddr

Существует две версии с возможностью клонирования

IPaddr2 (ocf:heartbeat:IPaddr2) — обычно установка идет вместе с пакетом resource-agents. Стандартный агент для виртуального IP

IPaddr3 (ocf:percona:IPaddr3) — преобразованная версия. Содержит исправления для режима clone. Данную версию требуется устанавливать отдельно.

Установим IPaddr3 на каждом сервере в кластере

curl --create-dirs -o /usr/lib/ocf/resource.d/percona/IPaddr3 \
    https://raw.githubusercontent.com/percona/percona-pacemaker-agents/master/agents/IPaddr3
chmod u+x /usr/lib/ocf/resource.d/percona/IPaddr

Далее выполним на одном сервере

Выполним создание виртуального IP ресурса

pcs resource create ClusterIP ocf:percona:IPaddr3 \
    params ip="192.168.100.100" cidr_netmask="24" nic="eth0" clusterip_hash="sourceip-sourceport" \
    op monitor interval="10s"

clusterip_hash -указывает нужный тип для распределения запросов

  • sourceip — распределение только по IP-адресу источника, это обеспечивает попадание запросов на один и тот же сервер.
  • sourceip-sourceport — распределение по исходящему порту и IP источника. При новом подключении будет производится соединение с новым сервером. Подходящий вариант.
  • sourceip-sourceport-destport — распределение по порту получателя, порту источника и IP-адресу. Получаем наилучшее распределение, если несколько сервисов работают на разных портах.

IPaddr3 устанавливает mac автоматически, а для IPaddr2 нужно указать из multicast.

Выполним клонирование ресурса

pcs resource clone ClusterIP \
    meta clone-max=3 clone-node-max=3 globally-unique=true

При этом в iptables будет добавлено правило из модуля CLUSTERIP.

Принцип его работы

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

Проверяем состояние кластера

pcs cluster status

IP адреса будут запущены. Проверяем подключение к ним из вне.

Необходима настройка отказоустойчивости или распределения нагрузки сервера, обращайтесь [email protected]

Оставить комментарий

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.