Связаться по:
[email protected]

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

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

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

5/5 - (1 голос)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Настройка IPaddr

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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