DHCP Failover State Mismatch: ошибка синхронизации Binding Update
- В логах DHCP-сервера появляется ошибка
failover peer <name>: binding update rejected: state mismatch. - Кластер переходит в статус
partner-down,communications-interruptedилиshutdown. - Клиенты получают одинаковые IP-адреса от обоих серверов (IP conflict / Duplicate Address Detection).
- Время аренды (Lease) для клиентов сбрасывается до значения MCLT (Maximum Client Lead Time).
1. Анализ статуса кластера Failover
На первичном и вторичном серверах выполните проверку состояния пиров:
# ISC-DHCP (dhcpd-pools) / dhcpctl
omctrl -s localhost -p 7911
# Для Kea DHCPv4
kea-ctrl-agent -c '{"command": "ha-heartbeat"}'
kea-ctrl-agent -c '{"command": "status-get"}'2. Проверка синхронизации системного времени
Рассинхронизация часов NTP более чем на 1 секунду между узлами кластера автоматически блокирует binding-update транзакции:
chronyc sources -v
chronyc tracking3. Очистка расхождений в файлах аренды (ISC-DHCP)
Если базы аренды повреждены:
# 1. Остановите оба сервиса
systemctl stop isc-dhcp-server
# 2. На Secondary сервере сделайте бэкап и очистите базу
cp /var/lib/dhcp/dhcpd.leases /var/lib/dhcp/dhcpd.leases.bak
> /var/lib/dhcp/dhcpd.leases
# 3. Запустите Primary, затем Secondary для полной синхронизации
systemctl start isc-dhcp-server # на Primary
# Дождитесь перехода Primary в 'normal'
systemctl start isc-dhcp-server # на Secondary4. Корректировка параметров Failover в dhcpd.conf
failover peer "dhcp-failover" {
primary;
address 10.0.0.1;
port 647;
peer address 10.0.0.2;
peer port 647;
max-response-delay 60;
max-unacked-updates 10;
mclt 3600;
split 128;
load balance max seconds 3;
} Частые вопросы (FAQ)
Что означает параметр split 128 в конфигурации DHCP Failover?
Значение split 128 делит пул хэшей MAC-адресов поровну (50/50) между primary и secondary узлами. Значение 256 отдает весь пул первичному серверу, а 0 — вторичному.
Почему статус communications-interrupted не выдает адреса на полный срок аренды?
В режиме потери связи с пиром сервер не может гарантировать монопольное владение пулом, поэтому выдает адреса исключительно на срок MCLT (обычно 1 час), чтобы предотвратить дублирование.
Какой TCP-порт использует протокол DHCP Failover?
Связь между пирами и обмен binding updates осуществляется по протоколу TCP через порт 647 (или 847 для DHCPv6).
Как безопасно вывести один узел кластера на техобслуживание?
Переведите узел в режим 'partner-down' или 'paused' перед остановкой службы, чтобы оставшийся сервер легитимно взял на себя обслуживание пула без генерации конфликтов аренды.