Эту пошаговую инструкцию, по добавлению дополнительного сервера в Database Availability Group (DAG) Microsoft Exchange Server, натолкнуло написать периодическое выполнение соответствующих работ. Однако, каждый раз сталкивался с тем что какую-то из операций, либо забывал выполнить, либо в приходилось обращаться к документации, чтобы уточнить те или иные действия. Если с вашей стороны есть замечания комментарии или дополнения, то буду рад обратной связи.
Итак,
Порядок добавления дополнительного почтового сервера в DAG
1. Импортируем на сервер валидный сертификат (Как правило можно взять с рядом стоящего сервера, так как мы добавляем дополнительный сервер, а не развертываем инфраструктуру с нуля)
2. Устанавливаем Exchange Server 2010/2013/2016 (Пошагово выполняем установку Exchange Server)
здесь и далее предполагается, что роли Client Access, Hub transport и Mailbox будут устанавливаться на одном сервере (что by design для Exchange 2016) и вовсе не обязательно для Exchange 2010 и 2013
Рекомендуется заранее подготовить командлеты для пунктов 3 и 4, выполнить их сразу после установки сервера, и далее сразу выполнить замену сертификата на IIS
3. Изменяем Адрес подключения для доменных клиентов (параметр AutoDiscoverServiceInternalUri)
определяем текущие настройки и проверяем, что они идентичны на всех серверах. Для этого через командлет:
Get-ClientAccessServer | ft Name,AutoDiscoverSiteScope, AutoDiscoverServiceInternalUri -AutoSize
получаем значение параметра AutoDiscoverServiceInternalUri для сайта SiteName в котором выполняется установка и назначаем новые значения:
Set-ClientAccessServer -Identity EXCHMB04 -AutoDiscoverSiteScope {SiteName} -AutoDiscoverServiceInternalUri "https://mail.contoso.com/Autodiscover/Autodiscover.xml"
4. Изменяем параметры InternalUrl, ExternalUrl и способы аутентификации для виртуальных каталогов
В случае сложной многосайтовой почтовой инфраструктуры значения должны прописываться с учетом Internet-facing и особенностями Вашей среды
4.1 MAPI
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-MapiVirtualDirectory | fl Name, Internal*, External*, IIS*
задаем новые значения
Set-MapiVirtualDirectory -Identity "EXCHMB04\mapi (Default Web Site)" -InternalUrl "https://mail.contoso.com/mapi" -ExternalUrl "https://mail.contoso.com/mapi" -IISAuthenticationMethods Ntlm, OAuth, Negotiate
4.2 Autodiscover
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-AutodiscoverVirtualDirectory | fl Identity, Internal*, External*
4.3 ECP
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-EcpVirtualDirectory | fl Identity, Internal*, External*
задаем новые значения
Set-EcpVirtualDirectory -Identity "EXCHMB04\ecp (Default Web Site)" -InternalUrl "https://mail.contoso.com/ecp" -ExternalUrl "https://mail.contoso.com/ecp"
4.4 EWS
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-WebServicesVirtualDirectory | fl Identity, Internal*, External*
задаем новые значения
Set-WebServicesVirtualDirectory -Identity "EXCHMB04\EWS (Default Web Site)" -InternalUrl "https://mail.contoso.com/EWS/Exchange.asmx" -ExternalUrl "https://mail.contoso.com/EWS/Exchange.asmx"
4.5 Microsoft-Server-ActiveSync
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-ActiveSyncVirtualDirectory | fl identity, internal*, External*
задаем новые значения
Set-ActiveSyncVirtualDirectory -Identity "EXCHMB04\Microsoft-Server-ActiveSync (Default Web Site)" -InternalUrl "https://mail.contoso.com/Microsoft-Server-ActiveSync" -ExternalUrl "https://mail.contoso.com/Microsoft-Server-ActiveSync"
4.6 OAB
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-OabVirtualDirectory | fl Identity, Internal*, External*
задаем новые значения
Set-OabVirtualDirectory -Identity "EXCHMB04\OAB (Default Web Site)" -InternalUrl "https://mail.contoso.com/OAB" -ExternalUrl "https://mail.contoso.com/OAB"
4.7 OWA
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-OwaVirtualDirectory | fl Identity, Internal*, External*
задаем новые значения
Set-OwaVirtualDirectory -Identity "EXCHMB04\owa (Default Web Site)" -InternalUrl "https://mail.contoso.com/owa" -ExternalUrl "https://mail.contoso.com/owa"
4.8 Outlook Anywhere
определяем текущие настройки и проверяем, что они идентичны на всех серверах
Get-OutlookAnywhere | fl Identity, Internal*, External*, IIS*
задаем новые значения
Set-OutlookAnywhere -Identity "EXCHMB04\Rpc (Default Web Site)" -InternalHostname mail.contoso.com -ExternalHostname mail.contoso.com -ExternalClientsRequireSsl:$true -InternalClientsRequireSsl:$true -ExternalClientAuthenticationMethod Negotiate
5. Заменяем сертификат в настройках IIS
для этого в настройках Binding для Default Web Site заменяем сертификат с самоподписанного на валидный сертификат содержащий DNS имена вашей организации (или wildcard сертификат)
6. Получаем список коннекторов получателей с одного из серверов
Get-ReceiveConnector -Server EXCHMB03
Далее, создаем коннекторы получатели на новом сервере по аналогии со старым сервером, для этого можно использовать готовый скрипт: Copy-ReceiveConnector.ps1, его актуальную версию можно найти здесь.
где в качестве параметров указываем Исходный сервер (SourceServer), имя коннектора (ConnectorName), Целевой сервер (TargetServer)
.\Copy-ReceiveConnector.ps1 -SourceServer EXCHMB03 -ConnectorName InternalServers -TargetServer EXCHMB04 .\Copy-ReceiveConnector.ps1 -SourceServer EXCHMB03 -ConnectorName Scanners -TargetServer EXCHMB04 .\Copy-ReceiveConnector.ps1 -SourceServer EXCHMB03 -ConnectorName Monitoring -TargetServer EXCHMB04
7. Переносим все ящики из созданной при инсталляции сервера БД в другую БД (пользовательские, ящики мониторинга и арбитража)
выполняем Get-MailboxDatabase и находим вновь созданную базу ( ее имя будет примерно такое: Mailbox Database 1356181079)
Получаем список пользовательских и служебных почтовых ящиков
Get-Mailbox -Database "Mailbox Database 1756171079" Get-Mailbox -Database "Mailbox Database 1756171079" -Arbitration Get-Mailbox -Database "Mailbox Database 1756171079" -Monitoring
Переносим служебные ящики в другую базу
Get-Mailbox -Database "Mailbox Database 1756171079" -Monitoring | New-MoveRequest -TargetDatabase userdb1 Get-Mailbox -Database "Mailbox Database 1756171079" -Arbitration | New-MoveRequest -TargetDatabase userdb1 Get-Mailbox -Database "Mailbox Database 1756171079" | New-MoveRequest -TargetDatabase userdb1
Ожидаем завершени переноса почтовых ящиков
все задачи в Get-MoveRequest должны перейти в статус Completed
Удаляем запрос на перенос БД Get-MoveRequest | Remove-MoveRequest -Confirm:$false
и Удаляем БД
Remove-MailboxDatabase "Mailbox Database 1756171079" -Confirm:$false
8. Добавляем сервер в DAG
Оперделяем имя DAG через командлет:
Get-DatabaseAvailabilityGroup
Определяем названия необходимого нам DAG и запускаем командлет добавления почтового сервера в DAG
Add-DatabaseAvailabilityGroupServer -Identity DAG -MailboxServer EXCHMB04
9. Определяем расположение файлов баз данных и логов
Get-MailboxDatabase | ft Name, *path*
создаем аналогичную структуру папок на добавляемом сервере, ее можно создать вручную или воспользоваться скриптом который необходимо выполнять локально на добавляемом сервере
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 $ListFolder = Get-MailboxDatabase Foreach ($folder in $ListFolder) { $LocEDB = ($Folder.EdbFilePath.PathName).Substring(0,($Folder.EdbFilePath.PathName).LastIndexOf("\")) $LocLOG = $folder.LogFolderPath.PathName New-Item -ItemType directory -Path $LocEDB New-Item -ItemType directory -Path $LocLOG }
Если структуру папок надо создавать не для всех баз, то надо явно указать список баз для который необходимо создать структуру папок
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010 $ListFolder = ("UserDB3", "VIPDB2") |Get-MailboxDatabase Foreach ($folder in $ListFolder) { $LocEDB = ($Folder.EdbFilePath.PathName).Substring(0,($Folder.EdbFilePath.PathName).LastIndexOf("\")) $LocLOG = $folder.LogFolderPath.PathName New-Item -ItemType directory -Path $LocEDB New-Item -ItemType directory -Path $LocLOG }
10. Добавляем пассивную реплику для необходимых баз данных
Командлет ниже, добавляет для почтовой базы данных VIPDB2 дополнительную копию данных размещенную на сервере EXCHMB04
Add-MailboxDatabaseCopy -Identity VIPDB2 -MailboxServer EXCHMB04
Можно добавить параметр -ActivationPreference, в котором указать приоритет активации базы, при выходе из строя активной базы данных, но если он явно не указан, то значение порядка активации будет самым последним