22-го мая партнерам стал доступен релиз SharePoint 2010 и других офисных продуктов нового покаления. Всвязи с этим у многих компаний встал вопрос о миграции уже развернутых и используемых ферм построенных на SharePoint 2010 RC. В этой статье я отражаю свой опыт и свой путь миграции.

Важно: До того как я начну рассказывать о сути решения, хочется отметить то что корпорация Microsoft официально не поддерживает апгрейдс RC версии на RTM. Описанные мною методологии могут содержать принципиальные ошибки и не точности, так как они основаны на предположениях.

Как мигрировать?!

Конкретные сценарии миграции всегда будут зовисеть от конфигурации вашей фермы, в своём опыте по миграции я исходил из одного важного предположения “В RC версию, новый функционал не добавляется, а соответственно публичные интерфейсы, структуры данных и конфигурации не должны измениться по сравению с RTM”. Исходя из такогопредположения – миграция данных стандартными средствами резервного копирования – должна быть достаточно безопасно.

В исходных данных были:

  • Служба метаданных
  • Служба профилей
  • Веб-части
  • Публичный брендированный сайт с настроенными процессами документооборота (Workflows, Visio Services, InfoPath Services)
  • Веб-приложения Access Services

Для начала делаем полную резервную копию фермы на SharePoint 2010 RC:

Add-PSSnapin Microsoft.SharePoint.PowerShell
Backup-SPFarm -Directory \\myserver\SPBackup -BackupMethod Full
 

Миграция сервисов

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

Служба метаданных

Миграция этого сервиса была признана наиболее приоритетной задачей, т.к. данные из справоячников в решении на RC использовались повсеместно. Отказ от миграции, или потеря GUID’ов автматически привело бы к переработке всех процессов и всего контента сайтов и профилей.

Миграция службы была проведена стандартными средствами восстановления из резервной копии, через веб-интерфейс:

  1. Служба метаданных была восстановлена из полной резерной копии фермы.
  2. Прокси-служба метаданных, так же была восстановлена из полной резервной копии.
  3. Служба была связана с центром администрирования и другими приложениями, и указанна в конфигурации “По умолчанию”.

На этом миграция службы завершилась, в дальнейшей работе проблем обнаружено не было.

Служба профилей пользователей

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

Полную версию скрипта, копирующего профили вы можете найти по ссылке:

http://bkilya.ru/files/MigrateProfiles.ps1.zip

Значимую часть приведу здесь:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server")
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Server.UserProfiles")

$site =  New-Object Microsoft.SharePoint.SPSite(http://oldsite/);
$newsite =  New-Object Microsoft.SharePoint.SPSite("http://newsite/");

$currentContext = [Microsoft.SharePoint.SPServiceContext]::GetContext($site);
$currentContextForNew = [Microsoft.SharePoint.SPServiceContext]::GetContext($newsite);
$profileManager = 
 New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($currentContext);
$profileManagerForNew = 
 New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($currentContextForNew);

foreach ($fromUserProfile in $profileManager.GetEnumerator())
{
    $toUser = 
    $fromUserProfile[[Microsoft.Office.Server.UserProfiles.PropertyConstants]::AccountName].Value

    if($profileManagerForNew.UserExists($toUser) -ne $true) 
    {
       $profileManagerForNew.CreateUserProfile($toUser);
    }

    $toUserProfile = $profileManagerForNew.GetUserProfile($toUser);

    $toUserProfile[[Microsoft.Office.Server.UserProfiles.PropertyConstants]::PreferredName].Value = 
       $fromUserProfile[[Microsoft.Office.Server.UserProfiles.PropertyConstants]::PreferredName].Value;

    $toUserProfile.Commit();
}

$newsite.Close(); $site.Close();

Перед запуском скрипта убедитесь что все копируемые поля присутствуют в новой служюе профилей. Если во время копирования будет возникать ошибка о недоступности того или иного свойства, но приэтом вы уверены в его наличии, то  проблема может быть в производительности сервера, попробуйте замедлить скрипт вставками команды “sleep –s 5”.

После завершения миграции, внесите службу в группу настроек “По умолчанию” для всех веб-приложений.

Далее натройте необходимые правила синхронизации и удалите старую службу.

Веб-части

Можно мигрировать из бекапа, можно переустановить:

PS C:\> Add-SPSolution -LiteralPath C:\MySolutions.wsp
PS C:\> Install-SPSolution -Identity MySolutions.wsp –GACDeployment 
        -WebApplication http://mysharepoint

 

Миграция семейств сайтов

Как правило это наиболее объемная часть и поэтому эти данные важно перенести автоматизированно.

Для миграции коллекций сайтов есть два варианта:

  1. Резервное копирование и восстановление уровня фермы
  2. Фрагментарное резервное копирование и восстановление

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

Для выполнения миграции выполните следующие шаги:

  1. Сделайте резервную копию семейства сайтов с исходной фермы:
  2. Создайте новое семейство сайтов, без шаблона в новой ферме
  3. Восстановите резервную копию поверх созданного семейства сайтов

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

В качестве заключения

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

Комментарии

Эдуард

Эдуард  (http://advard2.blogspot.com/)

28.07.2010 16:34:58

Апгреид для TAP и PEP вполне себе работает,  а не входящие в эту программу RC  AFAIK и не получали.
Я пару ферм им обновлял с RC до RTM и не нашел отличии с чисто установленным. Но, по правде говоря, мои фермы содержат лишь out of the box решения.
IMHO немного странно пользоваться не RTM'ом  в продакшене.

Илья Бойко

Илья Бойко  (http://bkilya.ru/)

31.07.2010 12:20:03

Эдуард
Так же обновлял, и из видимых отличий, находил только изменения конфигураций Access Services приложений.
Access Services вызвал больше всего проблем.
Но это только из того что видимо.

Насчет не RTM, учитывая стабильность и очевидную пользу продукта - ничего странного.
Было очень много внедрений на базе Beta и RC с последующей миграцией на RTM,

Andrey Platonov

Andrey Platonov

06.10.2010 15:08:20

Большое спасибо за инструкцию.
Это -первый метод который реально заработал.
До этого были попытки восстановления базы данных через DPM, потом через полное резервное копирование. При этом сервер вроде бы работал, но аутентификация не проходила. В логах была куча мутных ошибок.

Мы таким образом перенесли данные даже из Beta (поскольку портал довольно простой, переносили только семейство сайтов, этого хватило)

PS Предлагаю дополнить инструкцию командой восстановления из фрагментарного бэкапа- в powershell надо запустить Restore-SPSIte -identity urlofsite(адрес нового сайта) -path backup_path (путь к фрагментарному бэкапу) -force

alex

alex

16.04.2012 18:00:40

школы и университет прошли даром
покАление
безграмотный
зОВисеть - ахахах . ужас

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


(Отображает Gravatar)

biuquote
  • Комментарий
  • Предпросмотр
Loading



О блоге

Добро пожаловать в блог Ильи Бойко, здесь вы найдете статьи и ссылки по .NET, SharePoint, SQL Server и RoR.

Photostream