Настройка базы данных ldirectordb и подготовка узлов MySQL к балансировке нагрузки
Кратко: создайте базу ldirectordb на каждом узле MySQL и настройте сетевые параметры ARP и виртуальный IP 192.168.0.105. Это позволит балансировщикам проверять доступность и корректно направлять трафик на реальные серверы.
6.4 Создать базу данных ldirectordb
Действие: на каждом узле MySQL (sql1.example.com и sql2.example.com) создайте базу и пользователя, которые будут использоваться балансировщиками для проверки доступности сервера.
sql1.example.com:
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword';
FLUSH PRIVILEGES;
CREATE DATABASE ldirectordb;
USE ldirectordb;
CREATE TABLE connectioncheck (i INT) ENGINE=NDBCLUSTER;
INSERT INTO connectioncheck () VALUES (1);
quit;sql2.example.com:
mysql -u root -p
GRANT ALL ON ldirectordb.* TO 'ldirector'@'%' IDENTIFIED BY 'ldirectorpassword';
FLUSH PRIVILEGES;
CREATE DATABASE ldirectordb;
quit;Примечание: на первом узле создаётся таблица connectioncheck и в неё вставляется тестовое значение. Балансировщик будет выполнять простые запросы к этой таблице, чтобы подтвердить, что сервер отвечает и база синхронизирована.
Важно: используйте надёжный пароль и ограничьте доступ по сети, если это возможно.
6.5 Подготовить узлы MySQL для балансировки нагрузки
Теперь настройте сетевые параметры и добавьте виртуальный IP 192.168.0.105 на каждом реальном сервере (sql1 и sql2). Это нужно, чтобы оба узла могли принимать трафик, назначаемый виртуальным адресом.
sql1.example.com / sql2.example.com:
apt-get install iprouteДобавьте настройки в /etc/sysctl.conf:
sql1.example.com / sql2.example.com:
vi /etc/sysctl.conf| # Enable configuration of arp_ignore option net.ipv4.conf.all.arp_ignore = 1 # When an arp request is received on eth0, only respond if that address is # configured on eth0. In particular, do not respond if the address is # configured on lo net.ipv4.conf.eth0.arp_ignore = 1 # Ditto for eth1, add for all ARPing interfaces #net.ipv4.conf.eth1.arp_ignore = 1 # Enable configuration of arp_announce option net.ipv4.conf.all.arp_announce = 2 # When making an ARP request sent through eth0 Always use an address that # is configured on eth0 as the source address of the ARP request. If this # is not set, and packets are being sent out eth0 for an address that is on # lo, and an arp request is required, then the address on lo will be used. # As the source IP address of arp requests is entered into the ARP cache on # the destination, it has the effect of announcing this address. This is # not desirable in this case as adresses on lo on the real-servers should # be announced only by the linux-director. net.ipv4.conf.eth0.arp_announce = 2 # Ditto for eth1, add for all ARPing interfaces #net.ipv4.conf.eth1.arp_announce = 2 |
sysctl -pДобавьте виртуальный интерфейс lo:0 в /etc/network/interfaces:
sql1.example.com / sql2.example.com:
vi /etc/network/interfaces| auto lo:0 iface lo:0 inet static address 192.168.0.105 netmask 255.255.255.255 pre-up sysctl -p > /dev/null |
ifup lo:0После этого оба узла будут принимать пакеты на виртуальный адрес и корректно отвечать на ARP-запросы только тогда, когда это нужно. Это предотвращает «ARP-путаницу», когда несколько хостов одновременно отвечают на один IP.
Краткая команда-памятка
- Установка: apt-get install iproute
- Применить sysctl: sysctl -p
- Поднять виртуальный интерфейс: ifup lo:0
- MySQL: GRANT / CREATE DATABASE / CREATE TABLE как в примере
Критерии приёмки
- База ldirectordb создана на всех узлах.
- Таблица connectioncheck присутствует на первом узле и возвращает запись.
- Виртуальный IP 192.168.0.105 поднят на каждом узле (ip addr show).
- ARP-поведение: только назначенный «директор» должен объявлять виртуальный IP в обычной конфигурации; реальные серверы отвечают корректно при настройке lo:0.
Тестовые случаи и проверка
- Проверка MySQL-подключения: попытайтесь подключиться к ldirectordb под пользователем ldirector с другого хоста.
- Выполните SELECT i FROM connectioncheck; на первом узле — должен вернуться 1.
- На контролирующей машине (балансировщике) выполните проверку health-check к базе через виртуальный IP.
- Отключите один из реальных узлов и убедитесь, что балансировщик переводит трафик на оставшийся.
Отладка и распространённые ошибки
- Симптом: ifup lo:0 не добавляет адрес. Проверьте /etc/network/interfaces на синтаксис и логи системы (dmesg, syslog).
- Симптом: несколько хостов отвечают на ARP. Проверьте значения net.ipv4.conf.*.arp_ignore и arp_announce.
- Симптом: балансировщик не проходит health-check. Проверьте сетевой доступ к MySQL и учётные данные ldirector.
Альтернативные подходы
- Использовать keepalived для управления виртуальным IP с помощью VRRP. Это переместит управление VIP от реальных серверов к менеджеру отказоустойчивости.
- Выполнять health-check на уровне TCP с помощью HAProxy или другого балансировщика вместо SQL-запросов.
Риски и меры смягчения
- Риск: пароль ldirectorpаsd в явном виде. Мера: используйте секретное хранилище (Vault, Ansible Vault) и ограничьте доступ по сети.
- Риск: неправильная настройка ARP приведёт к потере пакетов. Мера: тестируйте в стенде и поочерёдно вводите изменения.
Роли и обязанности
- DBA: создаёт базу и таблицу, назначает права.
- Системный администратор: настраивает sysctl, virtual IP и проверяет сетевые параметры.
- Инженер по балансировке: настраивает проверки доступности у балансировщика и тестирует переключение.
Короткое объявление (для рассылки, 100–200 слов)
Мы добавили проверяемую базу ldirectordb на узлы MySQL и настроили сетевые параметры ARP для корректной работы виртуального IP 192.168.0.105. Это позволяет балансировщикам надёжно проверять состояние каждого реального сервера и корректно направлять трафик при отказе узла. Пожалуйста, проверьте доступ к базе под пользователем ldirector и выполните регрессионное тестирование failover в контролируемой среде. Если потребуется, документируйте результаты и свяжитесь с командой операционной поддержки для дальнейших улучшений.
Ключевые выводы
- Создайте ldirectordb и настройте пользователя ldirector на каждом узле.
- Настройте arp_ignore и arp_announce в sysctl и перезапустите sysctl.
- Добавьте VIP 192.168.0.105 как lo:0 и поднимите интерфейс.
- Тестируйте failover и защитите учётные данные.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента