понедельник, 26 сентября 2011 г.

Восстановление сервера Exchange

imageПредставим, что у нас есть Exchange сервер в организации и внезапно железо, на котором он крутится, умирает. Причем умирает так, что восстановить ни чего уже нельзя, а актуальных бэкапов самого сервера (с System State) нет. Есть только бэкап баз данных.

Ситуация не приятная, но не критичная и из неё есть по крайней мере два выхода:

  1. Переустановить сервер в режиме восстановления – setup.com /m:RecoverServer. Подобный подход я уже описывал ранее в статье «Аварийное восстановление сервера Exchange 2010» и даже записал пару веб-кастов;
  2. Иногда бывает так, что не удается сбросить учетку сервера в Active Directory, чтобы его переустановить. В этом случае первый вариант не подходит, и сейчас мы поговорим о втором.

Потеряв сам сервер, но имея актуальный бэкап баз данных, мы достаточно быстро можем вернуть систему в рабочее состояние. Фактически, мы можем поднять совершенно новый сервер Exchange с теми же ролями, назвать сервер другим именем, но подключить старые базы данных, после чего переключить на новый сервер старых пользователей. Далее по пунктам:

Поднимаем новый сервер и подключаем базы данных:

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

Дело в том, что восстановленные из бэкапа базы данных находятся в состоянии Dirty Shutdown, прежде чем их смонтировать, нужно перевести базы в состояние Clean Shutdown. Для этого придется вооружиться утилитой ESEUTIL, о том, как ей пользоваться я писал ранее в статьях «Восстановление баз данных при помощи ESEUTIL» и «Исправление базы данных почтовых ящиков в Exchange» (желательно использовать первый вариант).

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

  • Создадим новую базу и во время создания снимем галку «Подключить эту базу данных»;
  • Откроем свойства базы и на вкладке Обслуживание установим галку «База данных может быть перезаписана при восстановлении»;
  • Переместим восстановленный из бэкапа и переведенный в состояние Clean Shutdown EDB-файл в папку новой базы данных;
  • Смонтируем базу.

Теперь можно сказать, что почтовые ящики пользователей возвращены в организацию, но сами пользователи об этом пока ни чего не знают.

Переключение пользователей на работу с новым сервером и новой базой данных:

Пользователи узнают о том к какой базе и к какому серверу почтовых ящиков они подключены, читая атрибуты своей учетной записи в Active Directory. Т.е. для того, чтобы перенацелить пользователей на новый сервер и новую базу, нужно изменить всего 3 атрибута:

  • homeMDB
  • homeMTA
  • msExchHomeServerName

clip_image002

Рис.1: Атрибуты, указывающие на сервер и базу данных.

Сделать это можно руками, через программу ADModify всем сразу, либо через PowerShell (EMS). Команда в EMC будет выглядеть следующим образом:

Get-Mailbox –Database <old_DB> | Set-Mailbox –Database <New_DB>

clip_image004

Рис.2: Перенацеливаем пользователей на другую базу данных.

Теперь, открывая Outlook пользователь и не заметит, что его почтовый ящик переехал на новый сервер.

 

Примечание: В Exchange 2007 это команда работать не будет, нужно использовать командлет Move-Mailbox с параметром ConfigurationOnly.

Восстановление параметров сервера:

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

Облегчить задачу может ситуация, если мы ещё не удалили сервер из Active Directory. В этом случае в консолях управления сервером мы можем прочитать большинство параметров со старого сервера и установить аналогичные на новом.

Конкретные рекомендации тут дать трудно, подскажу только, что надо не забыть сменить сервер, отвечающий за генерацию ОАВ (см. рис.3)

clip_image006

Рис.3: Изменение параметров ОАВ.

После того, как все параметры будут перенесены, и вы убедитесь, что новый сервер работает не хуже старого, можно почистить все упоминания о старом сервере, т.е. удалить его совсем из организации. Для этого необходимо удалить учетную запись в Active Directory и удалить объект сервера в разделе Конфигурация базы данных AD, через оснастку ADSIEdit.

Для этого откроем ADSIEdit, подключимся к разделу

Configuration развернем CN=Services -> CN=Microsoft Exchange -> <Имя организации> -> CN=Administrative Group -> CN=Exchange Administrative Group -> CN=Servers -> удалим объект старого сервера

(см.рис.4)

clip_image008

Рис.4: Объект сервера Exchange в базе данных Active Directory.

Заключение

Берегите свои сервера, делайте регулярные бэкапы и не ставьте Exchange на контроллер домена! К сожалению, команда metadata cleanup не всегда отрабатывает так, как должна, а сбросить учетку контроллера, не сделав его рядовым сервером, мы не можем.


Во время подготовки данной статьи, в роли технического эксперта выступал Александр Станкевич (Stanky), за что ему огромное спасибо! Без него данный материал не появился бы на страницах этого блога, да и задача, на основе которой написана статья, была бы решена другим, менее рациональным способом.

19 комментариев:

Андрей комментирует...

"Иногда бывает так, что не удается сбросить учетку сервера в Active Directory"
Можно подробней об этом ? В каких случаях такое происходит ?
Спасибо .

Алексей Богомолов (Alexx) комментирует...

Случаи разные бывают. У меня например не отработал процесс metadata cleanup и я не смог понизить контроллер домена, чтобы потом сбросить у него учетку.

lechyk комментирует...

у меня вот никак не получается подключит EDB базу на новом сервере, хотя база в состоянии Clean Shutdown и все делаю по шагово как в этой статье но все время выдает ошибку: "Не удалось подключить указанную базу данных. Указанная база данных: test; код ошибки: Сбой операции Active Manager. Ошибка Сбой действия базы данных. Ошибка: Сбой операции с сообщением: MapiExceptionCallFailed: Unable to mount database. (hr=0x80004005, ec=1276)
"
может будут какие-то идеи как это побороть??

Алексей Богомолов (Alexx) комментирует...

А вы поставили галку «База данных может быть перезаписана при восстановлении» в свойствах базы? Пути к EDB файлу и файлам логов точно правильные?

lechyk комментирует...

да поставил галку «База данных может быть перезаписана при восстановлении» ..и пути такие же как старые и логов и к EDB файлу!!

Lex Luthor комментирует...

по поводу прозрачности для пользователей, а как насчет сертификата? через GPO его в любом случае нужно будет разливать ибо имя сменилось, и подскажите как быть с 2007 клиентами, на постоянку выскакивает окно логина и пароля подключение к серверу в окне оутлук?

Алексей Богомолов (Alexx) комментирует...

Если у вас самоподписанный сертификат, тогда придется. Если нет, то все будет хорошо.
На тему логина пароля - надо смотреть у чему именно коннектится Outlook и запрашивает логин\пароль. Проверяйте настройки автоконфигурации.

Виктор Дьяков комментирует...

на тему пароля посмотри control userpasswords2
Надо удалить все сохраненные пароли для почтовых серверов.

GJM комментирует...

Такая проблема тоже, искал, но пока не нашел что делать: "Не удалось подключить указанную базу данных. Указанная база данных: test; код ошибки: Сбой операции Active Manager. Ошибка Сбой действия базы данных. Ошибка: Сбой операции с сообщением: MapiExceptionCallFailed: Unable to mount database. (hr=0x80004005, ec=1276)
gjm@rosklimat.com

Алексей Богомолов (Alexx) комментирует...

я правильно понимаю, что Eseutil говорит что база в Clean Shutdown?

gjm комментирует...

Да так и есть, всё делал как Вы написали. Но монтировать не могу. Прочитал на Techforum, пишут, что надо включить Microsoft Exchange System Attendant, что и делал. Потом произошла следующая ошибка: 1232 (или похожая точно не помню), ну о том, что файл занят. Ошибка «ушла», но теперь снова пришла моя ошибка 1276.

Алексей Богомолов (Alexx) комментирует...

А галка в свойствах базы есть "This database can be overwritten by a restore"?

gjm комментирует...

Да есть

Алексей Богомолов (Alexx) комментирует...

RК сожалению у меня нет готового ответа. Я бы попробовал заново восстановить EDB из бэкапа и прогнать его ESUTIL-ем. Либо надо гуглить по ошибкам...

Анонимный комментирует...

Подскажите пожалуйста, что делать в случае восстановления EDB, если домен - новый? Т.е. параметры HomeMTA и другие у пользователей не заполнены. Попробовал создать в восстановленной базе новый ящик и он оказался пустым.

Алексей Богомолов (Alexx) комментирует...

Вам надо подключить базу как Recovery Database, после чего создать новые ящики (они будут пустуе) и восстановить данные из бузы в ящики штатным способом.

Анонимный комментирует...

По поводу ошибки:
MapiExceptionCallFailed: Unable to mount database. (hr=0x80004005, ec=1276)

эта ошибка возникает если не совпадают имена организации Exchange старой и новой. Поставьте при установке название организации какое было и базы у вас примонтируются

Andrew Arshansky комментирует...

В моем случае пришлось написать:
Get-MailBox | Set-Mailbox -Database
Потому что атрибут HomeMDB был пустой у проблемных ящиков, да и имя старой базы никому не известно.

Andrew Arshansky комментирует...

Get-MailBox | Set-Mailbox -Database "Name DataBase"
Обрезал :-(

Отправить комментарий