Automatic mailbox distribution and “Load balancing failed to find a valid mailbox database”

imagesВсем привет!

Каждый раз при создании нового почтового ящика встает дилемма — в какой базе данных его разместить. Во многих компаниях, конечно же, есть свои инструкции и планы, как и где размещать новые почтовые ящики, чтобы обеспечит их расположение по каким-либо критериям. Некоторые, впрочем, не особо заботятся о распределении ящиков по почтовым базам либо из-за их малого числа, либо из-за наложенных административных ограничений вышестоящим почтовым администратором. В любом случае, по ошибке или намеренно, настает тот момент, когда выбор почтовой базы достается самому серверу Exchange. Как же сервер выясняет в какую базу разместить только что созданный почтовый ящик?

Automatic mailbox distribution

В Exchange 2010, начиная с версии RTM, появились компоненты, называемые Cmdlet Extension Agents. Во время создания нового почтового ящика, т.е. фактически при запуске командлетов New-Mailbox, Enable-Mailbox или New-MoveRequest, и если не указан параметр Database (в случае New-MoveRequest — параметр TargetDatabase), происходит запуск агента расширения с именем Mailbox Resources Management Agent. Этот агент производит ряд проверок с целью определить, в какую почтовую базу разместить новый ящик. Алгоритм выбора почтовой базы следующий:

mailbox_provisioning

  1. Агент получает список всех баз почтовой организации
  2. Из этого списка удаляются все базы, исключенные из автоматического распределения (параметры IsExcludedFromProvisioning и IsSuspendedFromProvisioning — подробнее далее в статье)
  3. Далее из списка удаляются почтовые базы, не входящие в область действия разрешений для учетной записи, от имени которой выполняется создание нового почтового ящика (RBAC, Database Management scope). Данная область действия разрешений стала доступна начиная с версии Exchange 2010 SP1.
  4. Из списка удаляются базы, находящиеся не в том же AD сайте, где выполняется создание нового почтового ящика.
  5. Из получившегося списка случайным образом выбирается 1 почтовая база. Если эта база находится в режиме онлайн и «здорова» (healthy), то она и используется для размещения нового почтового ящика. Если же база находится режиме офлайн или «не здорова» (not healthy), то случайным образом выбирается следующая. Если же в списке больше не остается почтовых баз, то операция создания ящика завершается с ошибкой.

Более подробно этот процесс описан в замечательной статье: Where Did That New Exchange 2010 Mailbox Go?

Этот же самый алгоритм можно увидеть, если запустить командлет New-Mailbox с параметром —Verbose. Если кто-то желает больше узнать внутренние механизмы, то этот параметр просто незаменим. Так же параметр будет полезен при траблшутинге каких-либо ошибок при выполнении повседневных операций — этим я и воспользуюсь чуть позже в статье при разборе ошибок.

 

«Load balancing failed to find a valid mailbox database»

Итак, при создании очередного почтового ящика, мы получаем следующую ошибку:

emc_error

Текст ошибки сразу же наталкивает на мысль, что что-то не так с почтовыми базами. Если заранее знать этапы выбора подходящей почтовой базы при автоматическом распределении, то можно сразу же выделить несколько возможных причин этой ошибки:

  • Все почтовые базы в локальном сайте размонтированы
  • Все почтовые базы в локальном сайте исключены из автоматического распределения (для них включен параметр IsExludedFromProvisioning или IsSuspendedFromProvisioning)
  • Все почтовые базы в локальном сайте не входят в область действия разрешений для учетной записи, от имени которой создается новый почтовый ящик (Database Management scope)

Проверить сразу все эти 3 пункта можно следующей командой:

Get-MailboxDatabase -Status | ft Name, Server, mounted, *fromprovision* -AutoSize

get-mailboxdatabase

  • База MDB01 исключена из распределения параметром IsExcludedFromProvisioning.
  • База MDB02 исключена из распределения параметром IsSuspendedFromProvisioning.
  • База MDB03 – размонтирована.
  • База MDB04 – находится в другом сайте.
  • Все почтовые базы, которые исключены из области действий разрешений, не будут видны при выводе любыми командлетами.

Недавно обнаружил еще одну возможную причину данной ошибки.

При создании нового почтового ящика, я получил такую ошибку. Недолго думая, я проверил смонтированы ли все базы и не исключены ли они из автораспределения. Все было в порядке. Далее пришлось запускать команду New-Mailbox с параметром –Verbose, что посмотреть на каком этапе происходит ошибка. Результат был такой:

ems_error

Все бы ничего, но я знал, что в локальном сайте есть почтовые базы, они смонтированы и входят в область действия моих разрешений. Обратив внимание на строчки, где идет сравнение локального сайта и сайта почтовой базы, я смутно вспомнил, что несколько часов назад менял название AD сайта. Но что удивительно, так это имя AD сайта, которое значится в проверке автораспределения – оно соответствовало прошлому имени моего сайта.

Причина оказалась проста: и хотя сам Exchange сервер уже “понял”, что он относится к другому AD сайту, почему-то powershell сессия (а точнее application pool в IIS отвечающий за Powershell) закешировала имя старого AD сайта.

“Вылечить” удалось двумя способами:

  • Либо перезапуск IIS (iisreset /noforce /timeout:120)
  • Либо остановить и запустить заново application pool с названием “MSExchangePowerShellAppPool”

 

IsExcludedFromProvisioning и IsSuspendedFromProvisioning

Эти 2 параметра позволяют исключить конкретную почтовую базу из автоматического распределения. Сделать это можно так:

Set-MailboxDatabase -Identity Database.Name -IsExcludedFromProvisioning:$true
Set-MailboxDatabase -Identity Database.Name -IsSuspendedFromProvisioning:$true

В чем же разница между ними?

Разницы абсолютно никакой. При выставлении любого из этих параметров в значение “$true” – база будет исключена из распределения. Установка того или иного параметра может лишь подсказать коллегам-администраторам, исключена ли база навсегда, или исключена временно и скоро планируется ее возвращение в автоматическое распределение.

 

Удачи!

Читайте также: