среда, 29 августа 2018 г.

Ошибка 0x80070721 балансировщика сетевой нагрузки NLB

  Есть два сервера на Windows. Они являются контроллерами домена. Надо между ними поднять балансировку сетевой нагрузки (Network Load Balancing, NLB). Настраиваю NLB, но через какое-то время сервера друг друга не видят.
  Симптомы:
  В диспетчере балансировки сетевой нагрузки каждого сервера виден только он сам и светится ошибка "Код ошибки 0x80070721 при подключении к ..." и "Ошибка RPC-сервер недоступен на указанном компьютере при подключении к ..." как на скрине 1.

Скрин 1. Ошибки 0х80070721 и RPC в диспетчере NLB

  В журнале "Система" периодически появляются ошибки источника Security-Kerberos "Клиент Kerberos получил ошибку KRB_AP_ERR_MODIFIED с сервера ......" как на скрине 2.
  И наконец источник DistributedCOM ругается "Не удалось установить связь DCOM с компьютером ... через один из настроенных протоколов" как на скрине 3.



Скрин 2. Ошибка Kerberos KRB_AP_ERR_MODIFIED

Скрин 3. Не удалось установить связь DCOM ...

  Задействованные имена и IP такие:
NLB          xx.xx.xx.50
SERVER1 xx.xx.xx.51
SERVER2 xx.xx.xx.52 
domain.internal
  Здесь NLB - это доменное имя и IP адрес кластера, domain.internal - доменная зона. Остальные два это сервера в кластере.
  Гугл чеще всего рекомендовал с помощью setspn.exe добавить в керберос недостающие принципалы. Реже появлялась рекомендация внимательно посмотреть на DNS, в частности правильно ли он решает адреса.
  Просмотр зоны DNS показал, что имена серверов и IP правильные. Также оказалось что каждый сервер регистрирует в зоне на кластерном IP адресе свое имя. Получалось, что SERVER1 регистрировал на себя адреса хх.хх.хх.50 и хх.хх.хх.51. И SERVER2 регистрировал хх.хх.хх.50 и хх.хх.хх.52
  Для эксперимента с кластерного адреса хх.хх.хх.50 удалили имена SERVER1 и SERVER2. Кластер заработал. Но через несколько минут имена серверов опять появились на кластерном IP и все поломалось.
  Для решения проблемы на обоих серверах в файл hosts были добавлены строки:
xx.xx.xx.51 server1.domain.internal server1
xx.xx.xx.52 server2.domain.internal server2
  В таком виде все заработало. Правда ошибка KRB_AP_ERR_MODIFIED в логах появлялась примерно каждые 10-12 часов, но кластер NLB работал.
  Обратите внимание что на обоих серверах надо добавить и себя и соседа. Я пробовал добавить только соседа и это не помогло.