Гид по технологиям

6.2–6.3 Настройка heartbeat и ldirectord

• 4 min read • DevOps • Обновлено 28 Nov 2025
Настройка heartbeat и ldirectord
Настройка heartbeat и ldirectord

Требования и предпосылки

  • Имена узлов должны совпадать с выводом uname -n на каждом сервере.
  • Все три конфигурационных файла heartbeat должны быть идентичны на loadb1 и loadb2.
  • Имеется рабочая MySQL‑кластер с известными IP‑адресами и учётной записью для проверки состояния.

Важно: выполняйте изменения под root или с sudo и делайте резервные копии конфигураций перед правками.

6.2 Настройка heartbeat

Далее настроим heartbeat, создав три файла (все три файла должны быть одинаковы на loadb1.example.com и loadb2.example.com).

loadb1.example.com / loadb2.example.com:

vi /etc/ha.d/ha.cf

| logfacility local0 bcast eth0 mcast eth0 225.0.0.1 694 1 0 auto_failback off node loadb1 node loadb2 respawn hacluster /usr/lib/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster |

Обратите внимание: вы должны перечислить имена узлов (в данном случае loadb1 и loadb2) так, как они показаны командой

uname -n

Кроме перечисления узлов, в этом файле обычно не требуется ничего менять.

vi /etc/ha.d/haresources

| loadb1 \ ldirectord::ldirectord.cf \ LVSSyncDaemonSwap::master \ IPaddr2::192.168.0.105/24/eth0/192.168.0.255 |

Вы должны указать одно из имён узлов балансировщика (здесь: loadb1) и виртуальный IP (192.168.0.105) вместе с корректной маской подсети (24) и широковещательным адресом (192.168.0.255). Если не уверены в маске или широковещательном адресе, воспользуйтесь онлайн‑калькулятором подсетей.

vi /etc/ha.d/authkeys

| auth 3 3 md5 somerandomstring |

somerandomstring — это пароль, которым демоны heartbeat на loadb1 и loadb2 аутентифицируются друг с другом. Используйте свою случайную строку. Доступны три механизма аутентификации; md5 чаще всего используется как наиболее безопасный среди них.

Файл /etc/ha.d/authkeys должен быть читаем только root:

loadb1.example.com / loadb2.example.com:

chmod 600 /etc/ha.d/authkeys

Важно: никогда не публикуйте содержимое authkeys в общедоступных репозиториях.

6.3 Настройка ldirectord

Создаём конфигурационный файл для ldirectord — программного балансировщика нагрузки:

loadb1.example.com / loadb2.example.com:

vi /etc/ha.d/ldirectord.cf

| # Global Directives checktimeout=10 checkinterval=2 autoreload=no logfile="local0" quiescent=yes virtual = 192.168.0.105:3306 service = mysql real = 192.168.0.101:3306 gate real = 192.168.0.102:3306 gate checktype = negotiate login = "ldirector" passwd = "ldirectorpassword" database = "ldirectordb" request = "SELECT * FROM connectioncheck" scheduler = wrr |

Заполните корректный виртуальный IP (192.168.0.105) и IP‑адреса ваших узлов MySQL (192.168.0.101 и 192.168.0.102). Порт 3306 — стандартный порт MySQL. Укажите пользователя MySQL (ldirector), пароль (ldirectorpassword), имя базы данных (ldirectordb) и SQL‑запрос для проверки доступности. ldirectord будет использовать эти параметры для тестовых запросов к реальным узлам.

Мы создадим базу ldirectord и пользователя ldirector в следующем шаге (создание БД и прав находится за пределами данного фрагмента).

Теперь создаём системные ссылки автозапуска для heartbeat и удаляем автозапуск у ldirectord (ldirectord будет запускаться через heartbeat):

loadb1.example.com / loadb2.example.com:

update-rc.d -f heartbeat remove  
update-rc.d heartbeat start 75 2 3 4 5 . stop 05 0 1 6 .  
update-rc.d -f ldirectord remove

Проверки и отладка

Рекомендуемые команды для проверки состояния и логов:

  • Узнать имя хоста: uname -n
  • Проверить права файла authkeys: ls -l /etc/ha.d/authkeys
  • Просмотр логов heartbeat (пример): tail -f /var/log/daemon.log или /var/log/messages
  • Проверить процессы: ps aux | egrep “heartbeat|ldirectord”
  • Проверить интерфейс и назначенные IP: ip addr show eth0
  • Тестировать доступность виртуального IP с клиентской машины: mysql -h 192.168.0.105 -u -p

Если виртуальный IP не поднимается на ожидаемый узел, проверьте разделение сетей, конфликт адресов и корректность широковещательного адреса в haresources.

Когда это не сработает

  • Неправильное имя узла: если имя в ha.cf не совпадает с uname -n, узел не присоединится.
  • Конфликт виртуального IP: если другой хост в сети уже использует IP, heartbeat не сможет взять адрес.
  • Неправильные права authkeys: если файл доступен не только root, heartbeat может игнорировать ключи.
  • Брандмауэр блокирует проверочные соединения MySQL между ldirectord и реальными узлами.

Альтернативы

  • keepalived — современная альтернатива для VRRP и контроля состояния служб.
  • corosync + pacemaker — предпочитаемая связка для сложных кластеров высокой доступности.

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

Чеклист для инженера

Для инженера, настраивающего HA‑балансировку:

  • Подтвердить имена узлов uname -n на обоих серверах.
  • Скопировать идентичные конфигурации /etc/ha.d/ha.cf, haresources, authkeys на оба узла.
  • Установить права 600 для /etc/ha.d/authkeys.
  • Вставить правильный виртуальный IP и адреса MySQL в ldirectord.cf.
  • Проверить логи после запуска: /var/log/daemon.log, /var/log/messages.
  • Выполнить failover‑тест: отключить интерфейс на активном узле и убедиться, что VIP переезжает.

Критерии приёмки

  • Виртуальный IP (192.168.0.105) поднимается на активном узле и отвечает на MySQL‑запросы.
  • ldirectord успешно выполняет проверочные запросы к реальным узлам и распределяет трафик.
  • Файл /etc/ha.d/authkeys имеет права 600 и недоступен для обычных пользователей.

Факто‑бокс: ключевые параметры

  • Тип проверки ldirectord: negotiate (проверка внутри протокола сервиса).
  • Порт MySQL: 3306.
  • Важные файлы: /etc/ha.d/ha.cf, /etc/ha.d/haresources, /etc/ha.d/authkeys, /etc/ha.d/ldirectord.cf.

Безопасность и советы

  • Используйте сложную случайную строку для authkeys и храните её отдельно от репозиториев.
  • Ограничьте доступ к интерфейсу управления (SSH) через брандмауэр.
  • По возможности используйте отдельную подсеть или VLAN для обмена heartbeat/мультимедиа, чтобы снизить риск подслушивания.
  • Рассмотрите применение TLS/шифрования и ограничение доступа к MySQL с адресов только балансировщиков.

Модель принятия решения (Mermaid)

flowchart TD
  A[Нужна ли высокая доступность для сервиса?] -->|Да| B{Степень сложности}
  B -->|Простая| C[heartbeat + ldirectord]
  B -->|Средняя| D[keepalived]
  B -->|Сложная| E[corosync + pacemaker]
  A -->|Нет| F[Обычный балансировщик]

Краткое резюме

  • Скопируйте три конфигурации heartbeat на оба узла и убедитесь, что они идентичны.
  • Настройте ldirectord с корректным виртуальным IP и адресами реальных MySQL‑узлов.
  • Защитите /etc/ha.d/authkeys правами 600 и используйте md5 для аутентификации.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро