Бэкап и восстановление Lync Server 2013 (Enterprise)

Так случилось, что в один прекрасный день, наш виртуальный хост с моим Lync 2013-сервером благополучно упал. Я только совсем недавно обновил инфраструктуру Lync 2010 до 2013-й версии, и не совсем успел настроить бэкапы. Надо, конечно, сказать, что тут виновато еще и начальство, т.к. подкинуло пачку задач со статусом "экстра-важно", но тем не менее, бородатый анекдот про админов которые уже делают бэкапы и которые скоро будут их делать, актуален.

Тем не менее, бэкапы были - но "сырые" - т.е. просто данные, что-то вроде System State для Active Directory. Вроде и есть бэкап, а восстанавливать его достаточно долго.

В общем, я сейчас расскажу вам, как я бэкапил Lync Server 2013 и как я его восстанавливал до полностью рабочего состояния.
 Предварительно только хочу сказать, что я работаю в среде lync-enterprise, это значит что у меня работает два сервера - back-end и front-end. На первом - база данных и служба Persistent Chat, на втором - все остальное (включая службы Monitoring и Archiving).

Бэкап.

Резервное копирование осуществляется в двух этапах, один из которых обязателен, а второй - можно пропустить (хотя он существенно сократит время восстановления):
  • Бэкап несущих windows-систем. Т.е. снятие образа с операционных систем. Их у меня не было, поэтому время восстановления увеличилось часа на четыре.
  • Бэкап настроек Lync Server. Это всякие Central Management Store, настройки пользователей и так далее.
Думаю, с бэкапом Windows вы разберетесь самостоятельно. Acronis в зубы - и погнали.

Бэкап настроек Lync я делаю с помощью специального powershell-скрипта. Его написал какой-то добрый буржуй, а я его немного отредактировал (не хватало бэкапа какой-то настройки ... не помню, какой ... по-моему это был Persistent Chat).

Вот скрипт.

# Import Lync Module 
import-module lync

###Variables To Set 
$folderPath = "D:\Backup\" 
$lengthOfBackup = "-10" 
$poolFQDN = "pool2.domain.local"
###Done

#Production – Delete Older Than x Days 
get-childitem $folderPath -recurse | where {$_.lastwritetime -lt (get-date).adddays($lengthOfBackup) -and -not $_.psiscontainer} |% {remove-item $_.fullname -force }

#Production – Delete Empty Folders 
$a = Get-ChildItem $folderPath -recurse | Where-Object {$_.PSIsContainer -eq $True} 
$a | Where-Object {$_.GetFiles().Count -eq 0} | Remove-Item

#Production – Get Date and Create Folder 
$currDate = get-date -uformat "%Y-%m-%d-%H-%M" 
New-Item $folderPath\$currDate -Type Directory

#Message Out 
Write-Host -ForegroundColor Green "Backup to server in progress..."
Write-Host -ForegroundColor Green " "

#Export CMS/XDS and LIS 
Export-CsConfiguration -FileName $folderPath\$currDate\XdsConfig.zip 
Write-Host -ForegroundColor Green "Export CMS/XDS"
Export-CsLisConfiguration -FileName $folderPath\$currDate\LisConfig.zip
Write-Host -ForegroundColor Green "Export LIS"

#Export Voice Information
 Get-CsDialPlan | Export-Clixml -path $folderPath\$currDate\DialPlan.xml
 Get-CsVoicePolicy | Export-Clixml -path $folderPath\$currDate\VoicePolicy.xml
 Get-CsVoiceRoute | Export-Clixml -path $folderPath\$currDate\VoiceRoute.xml
 Get-CsPstnUsage | Export-Clixml -path $folderPath\$currDate\PSTNUsage.xml
 Get-CsVoiceConfiguration | Export-Clixml -path $folderPath\$currDate\VoiceConfiguration.xml
 Get-CsTrunkConfiguration | Export-Clixml -path $folderPath\$currDate\TrunkConfiguration.xml
Write-Host -ForegroundColor Green "Export Voice Information"

#Export RGS Config 
Export-CsRgsConfiguration -Source "service:ApplicationServer:$poolFQDN" -FileName $folderPath\$currDate\RgsConfig.zip
Write-Host -ForegroundColor Green "Export RGS Config"

#Export User Information 
Export-CsUserData -PoolFqdn $poolFQDN -FileName $folderPath\$currDate\UserData.zip
Write-Host -ForegroundColor Green "Export User Information"

#Export Persistent Chat
Export-CsPersistentChatData -DBInstance "lync-be-13.domain.local\rtc" -FileName $folderPath\$currDate\PersistentChatData.zip
Write-Host -ForegroundColor Green "XDS, LIS, User, RGS and Persistent Chat backup to server is completed.  Files are located at $folderPath\$currDate" 
Write-Host -ForegroundColor Green "Please make sure to export Voice Configuration"  

 


У скрипта - три параметра:
  • $folderPath = "D:\Backup\" - папка, в которую бэкапим
  • $lengthOfBackup = "-10" - глубина хранения бэкапов (в днях)
  • $poolFQDN = "pool2.domain.local" - название пула Lync
  • "lync-be-13.domain.local\rtc" на строке 49 - инстанс SQL-сервера back-end-сервера.
Настраиваем запуск скрипта по расписанию. Он формирует необходимые файлы в нужную папку. Кроме того, обязательно бэкапим следующие вещи:
  • Сетевую папку, в которой хранится адресная книга и подобные штуки (по-правильному называется File Store). Ее просто копируем.
  • Базы служб Monitoring и Archiving. Это следующие базы: LcsLog, LcsCDR, QoEMetrics.
В общем-то с бэкапом и все. Этих данных вам будет достаточно, чтобы развернуть систему с нуля.

Переходим к востановлению (описано не полностью).

В первую очередь, необходимо установить оба сервера (в моем случае было именно так) с нуля с теми же ip-адресами и именами в домене, как были упавшие сервера. Установить все необходимые компоненты, как это требовалось при первоначальной установке.
Напомню, что это делается вот так (для Windows Server 2012):

Add-WindowsFeature RSAT-ADDS, Web-Server, Web-Static-Content, Web-Default-Doc, Web-Http-Errors, Web-Asp-Net, Web-Net-Ext, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Http-Logging, Web-Log-Libraries, Web-Request-Monitor, Web-Http-Tracing, Web-Basic-Auth, Web-Windows-Auth, Web-Client-Auth, Web-Filtering, Web-Stat-Compression, Web-Dyn-Compression, NET-WCF-HTTP-Activation45, Web-Asp-Net45, Web-Mgmt-Tools, Web-Scripting-Tools, Web-Mgmt-Compat, Desktop-Experience, Telnet-Client, BITS -Source D:\sources\sxs

Add-WindowsFeature windows-identity-foundation

Также надо установить на back-end-сервер MS SQL Server 2008 R2 (или 2012). Для 2008 R2-версии помните, что надо установить Net Framework 3.5 SP3.


Дальше восстанавливаем Central Management Store. На самом деле, это основной этап. На front-end-сервере устанавливаем компоненты администрирования Lync Server 2013: Topology Builder и одновременно установится модуль Powershell для Lync. Запускаем Powershell и импортируем модуль Lync.
Import-Module Lync
Install-CsDatabase -CentralManagementDatabase -Clean -SqlServerFqdn lync-be-13.domain.local -SqlInstanceName rtc -Verbose
Set-CsConfigurationStoreLocation -SqlServerFqdn lync-be-13.domain.local -SqlInstanceName rtc -Verbose
Дальше импортируем CMS из бэкап-файла

Import-CsConfiguration -FileName D:\Backup\XdsConfig.zip
И публикуем топологию
Enable-CsTopology
 

Метки: lync (ru), lync 2013 (ru), backup (ru)

ПечатьE-mail

Добавить комментарий


Защитный код
Обновить