6.2–6.3 Настройка 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 для аутентификации.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента