Заметки о Windows и других программных продуктах Microsoft...

Ошибка при перемещении почтового ящика Exchange 2016

Ошибка при перемещении почтового ящика Exchange 2016

Перенос почтового ящика из одной базы в другую — процедура самая обычная и не вызывающая особых сложностей. Но бывают исключения.

История такая: перемещаю ящик с помощью PowerShell, и, как обычно, мониторю процесс переноса такой вот командой:

Get-MoveRequest | where {$_.status -ne "completed"} | Get-MoveRequestStatistics | ft -a displayname,status*,percent

Сначала ящик едет довольно бодро, но потом процесс останавливается на 95% и замирает в состоянии StalledDueToTarget_DataGuaranteeWait. Это состояние длится довольно долго, после чего процесс переноса завершается ошибкой.

перемещение ящика завершилось ошибкой

 

Статус ошибки не указывает на причину, поэтому вывожу более подробную информацию:

Get-MoveRequest | where {$_.status -ne "completed"} | Get-MoveRequestStatistics | fl *failure*, message

Получаю вот такое сообщение, в котором говорится примерно следующее: «Не удалось реплицировать изменения почтового ящика. База данных не удовлетворяет ограничению SecondCopy потому что время фиксации изменений 04.09.2020 10:07:15 не гарантирует время репликации 31.12.9999 23: 59: 59».

Не очень внятное объяснение, особенно смущает дата из недалекого 🙂 будущего. Но понятно, куда примерно копать. На серверах настроен DAG (Database Availability Group), база, в которую перемещается ящик, имеет копию, и видимо между базами есть проблемы с репликацией.

подробное описание ошибки

 

Проверяю состояние копий базы командой:

Get-MailboxDatabaseCopyStatus -Identity db10

Как ни странно, все в полном порядке.

проверка баз почтовых ящиков

 

Тогда проверяю работу репликации на сервере, на котором располагается база:

Test-ReplicationHealth -Server mbx2

И понимаю, что я сам себе злобный Буратино. Когда то давно, по уже забытой причине, я запретил автоматическую активацию копии базы на другом сервере. При этом репликация между базами продолжала исправно работать, но переключение на копию было невозможно. Именно этот факт являлся причиной ошибки и после снятия запрета ящик успешно переехал.

проверка состояния репликации

 

На этом история завершилась. А в качестве заключения немного теории.

Data Guarantee API

Exchange Server включает в себя функционал Data Guarantee API, который используется службой репликации почтовых ящиков (Mailbox Replication Service, MRS) для проверки состояния системы копирования почтовых баз на основе определенных настроек. В частности, Data Guarantee API может использоваться для:

• Проверки  Replication Health — подтверждение того, что доступно заданное число копий почтовой базы.
• Проверки Replication Flush — подтверждение того, что необходимые файлы журналов успешно применены к заданному числу копий почтовой базы.

После выполнения проверки API возвращает следующую информацию:

Статус

• Retry — возвращается как  результат промежуточных ошибок, которые делают невозможным проверку состояния почтовой базы.
• Satisfied — возвращается, когда почтовая база соответствует заданным условиям или база не реплицируется.
• NotSatisfied — возвращается, когда почтовая база не соответствует заданным условиям. Кроме того возвращается информация о том, почему получен код NotSatisfied.

Время ожидания повторной проверки

• Если информация о копировании не получена, то время ожидания по умолчанию составляет  10 секунд.
• Если не найдено ни одной здоровой копии почтовой базы, то время ожидания по умолчанию составляет 2 минуты.
• Если здоровая копия почтовой базы найдена, но она отстает в репликации, то время ожидания по умолчанию составляет 1 минуту.

Максимально возможное время ожидания 10 минут.

DataMoveReplicationConstraint

Каждая база имеет свойство DataMoveReplicationConstraint, которое определяет, сколько копий почтовой базы должно быть возвращено в запросе. DataMoveReplicationConstraint может принимать следующие значения:

None — значение по умолчанию, присваивается при создании базы. При значении None условия в Data Guarantee API игнорируются. Это значение должно использоваться только для почтовых баз, которые существуют в единственном экземпляре и не реплицируются.
• SecondCopy — как минимум одна пассивная копия базы должна соответствовать условиям Data Guarantee API. Это значение по умолчанию, которое присваивается при создании копии базы.
• SecondDatacenter — как минимум одна копия базы в другом сайте Active Directory должна соответствовать условиям Data Guarantee API.
• AllDatacenters — как минимум одна копия базы в каждом сайте Active Directory должна соответствовать условиям Data Guarantee API.
AllCopies — все копии почтовой базы должны соответствовать условиям Data Guarantee API.

Check Replication Health

Когда Data Guarantee API определяет «здоровье» инфраструктуры копий почтовых баз, вычисляются следующие параметры:

Если DataMoveReplicationConstraint имеет значение SecondCopy, то для данной базы по крайней мере одна пассивная копия должна:

• Быть в состоянии healthy.
• Иметь очередь воспроизведения (replay queue) с задержкой не более 10 минут.
• Иметь длину очереди копирования (copy queue) не более 10.
• Средняя длина очереди копирования (average copy queue length) не более 10. Средняя длина очереди копирования вычисляется на основе количества запросов приложения к состоянию базы данных.

Если DataMoveReplicationConstraint имеет значение SecondDatacenter, то для данной базы по крайней мере одна пассивная копия в другом сайте Active Directory должна:

• Быть в состоянии healthy.
• Иметь очередь воспроизведения (replay queue) с задержкой не более 10 минут.
• Иметь длину очереди копирования (copy queue) не более 10.
• Средняя длина очереди копирования (average copy queue length) не более 10.

3. Если DataMoveReplicationConstraint имеет значение AllDatacenters, то для данной почтовой базы активная копия должна быть смонтирована, а пассивная копия в каждом сайте Active Directory должна:

• Быть в состоянии healthy.
• Иметь очередь воспроизведения (replay queue) с задержкой не более 10 минут.
• Иметь длину очереди копирования (copy queue) не более 10.
• Средняя длина очереди копирования (average copy queue length) не более 10.

4. Если DataMoveReplicationConstraint имеет значение AllCopies, то для данной почтовой базы активная копия должна быть смонтирована, а все пассивные копии почтовой базы должны:

• Быть в состоянии healthy.
• Иметь очередь воспроизведения (replay queue) с задержкой не более 10 минут.
• Иметь длину очереди копирования (copy queue) не более 10.
• Средняя длина очереди копирования (average copy queue length) не более 10.

Check Replication Flush

Data Guarantee API может  также использоваться для проверки того, что заданное число копий почтовой базы применяет требуемые транзакционные журналы. Это проверяется сравнением временной метки последнего примененного журнала с временной меткой подтверждения от вызывающего сервиса (в большинстве случаев это временная метка последнего файла журнала, который содержит требуемую информацию) плюс 5 секунд (это связано с отклонениями системного времени). Если метка времени применения больше, чем время подтверждения, то проверка возвращает статус Satisfied, если меньше — возвращает статус NotSatisfied.

Mailbox Replication Service

При перемещении ящиков служба репликации MRS вызывает Data Guarantee API несколько раз за время выполнения запроса на перемещение. Перемещение выполняется в следующем порядке:

• Запрос на перемещение обновляет Active Directory и помещает сообщение в системный почтовый ящик, расположенный в почтовой базе целевого сайта Active Directory. Затем MRS запрашивает Data Guarantee API, чтобы определить здоровье целевой инфраструктуры копий почтовых баз. Пока возвращаемый статус равен Satisfied, выполнение запроса на перемещение будет продолжаться.
• MRS начинает перемещение информации, клонируя структуру почтового ящика в целевую почтовую базу, параллельно запрашивая Data Guarantee API для определения состояния целевой инфраструктуры копий почтовых баз. Пока возвращаемый статус равен Satisfied, выполнение запроса на перемещение будет продолжаться.
• MRS выполняет начальную синхронизацию, создавая мгновенный снимок почтового ящика-источника и реплицируя его папки и содержимое. Во время этого процесса MRS запрашивает Data Guarantee API каждые 10 секунд, чтобы определить состояние целевой инфраструктуры копий почтовых баз. Пока возвращаемый статус равен Satisfied, выполнение запроса на перемещение будет продолжаться.
• MRS выполняет дополнительную синхронизацию, реплицируя изменения, появившиеся по отношению к первоначальному мгновенному снимку. Во время этого процесса MRS запрашивает Data Guarantee API каждые 10 секунд, чтобы определить состояние целевой инфраструктуры копий почтовых баз. Пока возвращаемый статус равен Satisfied, выполнение запроса на перемещение будет продолжаться.
• MRS блокирует почтовый ящик-источник.
• MRS выполняет дополнительную синхронизацию, чтобы провести изменения, сделанные с момента последнего события синхронизации, кроме того, копирует другие данные почтового ящика. Начиная Exchange 2010 SP1 MRS будет заставлять целевую базу применить активный транзакционный журнал, если он еще не применился, тем самым гарантируя, что непрерывная репликация может реплицировать информацию этого журнала, который содержит данные синхронизации перемещаемого почтового ящика. MRS определяет, выполнилось ли это успешно с помощью вызова Check Replication Flush в Data Guarantee API.
• MRS запрашивает Data Guarantee API, чтобы определить состояние инфраструктуры копий почтовых баз. Пока возвращаемый статус равен Satisfied, выполнение запроса на перемещение будет продолжаться.
• MRS обновляет учетную запись пользователя в Active Directory, отмечая, что перемещение завершено.
• MRS блокирует целевой почтовый ящик.
• MRS изменяет состояние почтового ящика в почтовой базе-источнике на soft-deleted. Эта функция была добавлена в Exchange 2010 SP1 для гарантии того, что в случае потери целевой почтовой базы вы сможете восстановить почтовый ящик из предыдущей почтовой базы.

Если во время шагов с 1 по 4 Data Guarantee API вернет NotSatisfied или Retry, MRS поместит запрос на перемещение в очередь и будет повторять запрос каждые 30 секунд. MRS помещает запрос на перемещение в очередь не более чем на 15 минут, после чего аварийного его завершает. Если в пределах этих 15 минут возвращается ответ Satisifed, MRS будет автоматически возобновлять запрос на перемещение.

Во время шага 6 MRS будет ждать максимум 30 минут, пока Data Guarantee API не вернет Satisfied (повторяя запрос каждые 10 секунд). Если Satisfied не получен, то MRS будет аварийно завершать перемещение почтового ящика.

Когда запрос на перемещение завершается аварийно, он не будет возобновляться сервисом MRS автоматически. До выполнения Resume-MoveRequest администратору следует выполнить Get-MoveRequestStatistics для того, чтобы определить причину аварийного завершения перемещения. После этого администратор может выполнить Resume-MoveRequest.

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

Вот как то так оно и работает 🙂

 
 
Комментарии

Пока нет комментариев.

Ответить