Exchange 2013 - Server Component State
В Exchange 2013 была анонсирована новая концепция управления состоянием серверов и сервисов Exchange в рамках организации – “Server Component State”. Бывают ситуации, когда нужно вывести сервер из обслуживания, но при этом оставить сервисы на нем в рабочем состоянии. Кроме того, функции Managed Availability (Health Manager) также нужно иметь возможность гибко управлять состоянием компонентов и сервисов на отдельно взятых серверах.
Несмотря на то, что принцип работы механизма ServerComponentState довольно прост, иногда возникают сложности в при его использовании. Далее мы рассмотрим распространённую ситуацию, когда с точки зрения командлета Get-ServerComponentState все компоненты находятся в состоянии Active, а с точки зрения сервиса Exchange (например, транспорта) – нет.
Немного теории:
Информация о состоянии компонентов хранится в двух местах:
- Active Directory – атрибут msExchComponentStates у объекта сервера
- Реестр сервера – ветка HKLM\Software\Microsoft\ExchangeServer\v15\ServerComponentStates
Получить текущее состояние компонентов для сервера можно командой:
Get-ServerComponentState -Identity <имя сервера>
Кроме того, есть такое понятие как Requester, грубо говоря, при помощи requester`a мы показываем зачем мы изменили состояние компонента. Есть следующе типы Requester`ов:
HealthAPI
Maintenance
Sidelined
Functional
Deployment
Вот именно с этого момента обычно и начинаются проблемы, дело в том, что Requester`ы являются независимыми и у каждого компонента мо жет быть несколько записей разных Requester `ов, при этом они могут иметь разные значения Active и Inactive одновременно . Приоритет отдается Inactive состояниям!
Пример:
Механизм Managed Availability по какой-то причине отключил компонент Hub Transport, а Вы его включили (например, через Requester Functional). В результате у компонента будет две записи от разных Requester`ов с разным состоянием, и он не окажется активным до тех пор, пока все записи не будут иметь 1 в своем значении.
Ситуация осложняется в том случае, если в момент изменения состояния произошли проблемы с репликацией данных в АД и значения в реестре и в Active Directory расходятся, например, вот так:
В результате администратор считает, что компонент активен, а сама служба транспорт – что нет. В итоге транспорт на этой ноде будет работать не корректно.
Резюме
Чтобы быть уверенным, что все компоненты включены, нужно руками проверять данные в реестре и в Active Directory. Облегчить задачу можно при помощи следующего скрипта:
- Записываем в переменную состояние компонентов сервера
$component_states = Get-ServerComponentState -Identity <имя сервера>
- Получаем значение компонентов из реестра
$component_states.localstates
- Получаем значение компонентов из ActiveDirectory
$component_states.remotestates
Как мы видим, значения различаются. Для того, чтобы исправить проблему в данном случае, нужно перевести компонент HubTransport в состояние Active через Requester HealthAPI ещё раз:
Set-ServerComponentState <имя сервера> -Component HubTransport -State active -Requester HealthAPI
Если у вас есть вопросы\предложения\пожелания, добро пожаловать в комменты.
Alexey Bogomolov,
CTS Support Escalation Engineer, Microsoft.