Хочу рассказать вам еще об одном способе балансировки нагрузки. Про Pacemaker и IPaddr (ресурс-агент) и настройке его для Active/Passive кластера сказано уже и так достаточно много, но информации по организации полноценного Active/Active кластера, используя этот модуль я нашел крайне мало. Постараюсь исправить эту ситуацию. Для начала расскажу подробнее чем такой метод балансировки примечателен: Давайте посмотрим на картинку в начале статьи, мы увидим следующие устройства: Клиенты будут обращаться на внешний адрес нашего шлюза, тот будет перенаправлять все запросы на виртуальный IP 192.168.100.100, который будет настроен на всех трех нодах нашего кластера. Для начала нам нужно убедиться в том, что все наши ноды могут обращаться друг к другу по single hostname, для надежности лучше сразу добавить адреса нод в /etc/hosts: Установим все необходимые пакеты: При установке pcs создает пользователя hacluster, давайте зададим ему пароль: Дальше операции выполняются на одном узле.
Настраиваем аутентификацию: Создаём и запускаем кластер “Cluster” из трех узлов: Смотрим результат: Некоторые шаги были позаимствованы из статьи Lelik13a, спасибо ему за это. В нашем конкретном случае ни кворум ни stonith нашему кластеру не требуется, так что смело отключаем и то и другое: В дальнейшем, если у вас появятся ресурсы для которых это необходимо, вы можете обратиться к статье Silvar. Прежде чем мы приступим, нам нужно понимать что на всех наших нодах будет настроен одинаковый IP и одинаковый mac-адрес, по запросу на который они будут поочередно давать ответы. Проблема в том, что каждый коммутатор работает таким образом, что во время работы он составляет свою таблицу коммутации, в которой каждый mac-адрес связывается с определенным физическим портом. Таблица коммутации составляется автоматически, и служит для разгрузки сети от "ненужных" L2-пакетов. Так вот, если mac-адрес есть в таблице коммутации, то пакеты будут отправляться только в один порт за которым и закреплен этот самый mac-адрес. К сожалению, нам это не подходит и нам необходимо удостовериться в том, что бы все наши хосты в кластере одновременно "видели" все эти пакеты. В противном случае эта схема работать не будет. Для начала нам нужно удостовериться в том, что используемый нами mac-адрес является multicast-адресом. То есть находится в диапазоне 01:00:5E:00:00:00 — 01:00:5E:7F:FF:FF. Получив пакет для такого адреса наш коммутатор будет передавать его во все остальные порты, кроме порта источника. Кроме того, некоторые управляемые коммутаторы позволяют настроить и определить несколько портов для конткретного MAC-адреса. Также вам вероятно придется отключить функцию Dynamic ARP Inspection, если она поддерживается вашим коммутатором, так как она может стать причиной блокировки arp-ответов от ваших хостов. Вот мы и добрались до самого интересного. На данный момент существует две версии IPaddr с поддержкой клонирования: IPaddr2 (ocf:heartbeat:IPaddr2) — Стандартный ресурс-агент для создания и работы виртуального IP-адреса. Как правило устанавливается вместе со стандартным пакетом resource-agents. Для установки IPaadr3 выполните эти команды на каждом хосте: Дальше операции выполняются на одном узле. Создадим ресурс для нашего виртуального IP-адреса: clusterip_hash — здесь нужно указать желаемый тип распределения запросов.
Всего может быть три варианта: Для IPaddr2 обязательно нужно указать параметр mac=01:00:5E:XX:XX:XX с mac-адресом из multicast-диапазона. IPaddr3 устанавливает его автоматически. Теперь склонируем наш ресурс: Это действие создаст следующее правило в iptables: Как вы можете заметить, здесь используется модуль CLUSTERIP. Работает он следующим образом: На три ноды приходят все пакеты, но все три Linux-ядра знают сколько нод получает пакеты, все три ядра нумеруют получаемые пакеты по единному правилу, и, зная сколько всего нод и номер своей ноды, каждый сервер обрабатывает только свою часть пакетов, остальные пакеты сервером игнорируются — их обрабатывают другие сервера.  Подробнее об этом написанно в этой статье. Давайте еще раз посмотрим на наш кластер: IP-адреса успешно запустились. Пробуем обратиться к ним снаружи.
Если все работает как надо, то на этом настройку можно считать законченой. Суперпользователь