Главная SharePoint, Без рубрики, Новое Развертывание SharePoint 2010: Шаг 2 – Сервисные приложения
  • Развертывание SharePoint 2010: Шаг 2 – Сервисные приложения

    hand-tools-list-importantПродолжаем конфигурировать SharePoint 2010, если вспомнить, то в предыдущей статье мы запустили сервисы, но не стали создавать сервисные приложения. Напомню, что большинству сервисов для работы необходимо наличие сервисного приложения, при создании которого вы получаете Application Pool в рамках которого работает сервисное приложение, в некоторых сервисах так же создаются базы данных SQL, хранящие данные сервиса. Если воспользоваться классической настройкой, то в Центре администрирования нужно проследовать по пути: CA -> Manage Service Application -> New. И далее выбрать интересующее сервисное приложение и ввести необходимые данные. (Рисунок 1)

     

    1

     

    Рисунок 1. Создание сервисного приложения в центре администрирования.

     

    Данные указываемые при создании сервисного приложения следующие:

     

    1. Имя – ну имя и имя, ни на что кроме отображения не влияет

    2. Пул. Использование существующего или создание нового пула приложений (Application Pool). Возможно два подхода, первый – создание каждого сервисного приложения в отдельном пуле, при данном способе вы получаете изоляцию процессов, возможность перезапускать каждый процесс независимо, задавать различные учетные записи для каждого процесса. Но при этом платитесь производительностью. Есть рекомендация говорящая о том, что на одном SharePoint сервере не должно выполняться больше десяти пулов приложений. А если учесть, что у нас впереди создание портала, который так  же можно вынести в отдельный пул, то делаем вывод о том, что пулами раскидываться не стоит. Поэтому переходим ко второму варианту, который МС рекомендует для маленьких ферм, а именно использование единственного пула для всех сервисных приложений. Для этого в Active Directory нужно создать учетную запись, от имени которой будет работать пул приложений. У меня данная учетная запись имеет имя ServicePool.

    3. Прокси группа. Необходимость добавления в прокси группу (ProxyGroup). Опять же напоминаю, что для использования сервисного приложения вместе с ним необходимо создать прокси сервисного приложения (Service application proxy), такая точка подключения к нашему сервису. Впоследствии эти прокси мы объединим в группу и закрепим за веб-приложением нашего портала. У нас уже есть одна прокси группа Default, которая применяется к новым веб-приложениям, вот ее мы и задействуем.

    4.Базы данных. Некоторые сервисные приложения, создают базы данных SQL, делают это те приложения, которым нужно хранить какие либо данные. (например: User Profile Synchronization Service, Managed Metadata Web Service). Поскольку SQL сервер в данной конфигурации один, то на нем расположены и базы данных сервисных приложений.

     

    Но идти классическим путем и по порядку в админке создавать сервисные приложения достаточно  долго, я предлагаю слегка все ускорить и автоматизировать, используя скрипт написанный на PowerShell с использованием коммандлетов SharePoint 2010.

     

    ##—————————————————————-

    Шаг 1. Объявляем переменные, которые будут содержать имена наших сервисных приложений. Единственное, что вам нужно здесь поменять, это переменную $databaseServerName , т.к она содержит имя сервера баз данных. Вы естественно  "alfa.itband.ru" замените на имя собственного сервера баз данных.

    ##—————————————————————-

    $apppoolname = "ServicePool"
    $accesssSAName = "Access Services"
    $bcsSAName = "Business Data Connectivity Service"
    $excelSAName = "Excel Services Application"
    $metadataSAName = "Managed Metadata Web Service"
    $performancePointSAName = "PerformancePoint Service"
    $searchSAName = "SharePoint Server Search"
    $stateSAName = "State Service"
    $secureStoreSAName = "Secure Store Service"
    $usageSAName = "Usage and Health Data Collection Service"
    $userProfileSAName = "User Profile Synchronization Service"
    $visioSAName = "Visio Graphics Service"
    $WebAnalyticsSAName = "Web Analytics Service"
    $WordAutomationSAName = "Word Automation Services"
    $databaseServerName = "alfa.itband.ru"

    ##—————————————————————-

    Шаг 2. Регистрируем в рамках текущей сессии PowerShell набор коммандлетов SharePoint 2010.  Нужно для того, что скрипт выполнялся не только в SharePoint 2010 Management Shell.

    ##—————————————————————-

    Add-PSSnapin Microsoft.SharePoint.PowerShell

    ##—————————————————————-

    Шаг 3.  Запрашиваем у запустившего скрипт учетные данные и на основе их создаем управляемую учетную запись. Далее создаем пул приложений, который будет стартовать от имени этой управляемой учетки. (ManagedAccount)  Формат ввода учетных данных должен быть типа “itband\ServicePool”

    ##—————————————————————-

    $cred = Get-Credential
    New-SPManagedAccount -Credential $cred >$null
    $serviceAcc = Get-SPManagedAccount | where {$_.username -like $cred.UserName}
    $UserName =  ($serviceAcc).UserName

    New-SPServiceApplicationPool -Name $apppoolname  -Account $UserName >$null

    ##—————————————————————-

    Шаг 4.  Собственно само действие – создание сервисных приложений и прокси с закреплением их прокси группе по-умолчанию. Так же в скрипт включена проверка запущены ли необходимые сервисы и если какой то сервис не запущен, производится его старт.

    ##—————————————————————-

    Write-Host "Visio Graphics Service and Proxy…"

    New-SPVisioServiceApplication -Name $visioSAName -ApplicationPool $apppoolname -AddToDefaultGroup >$null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Visio Graphics Service"} | Start-SPServiceInstance > $null

    Write-Host "Excel Services Application and Proxy…"

    New-SPExcelServiceApplication -Name $excelSAName -ApplicationPool  $apppoolname -Default >$null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Excel Calculation Services"} | Start-SPServiceInstance > $null

    Write-Host "Creating Usage Service and Proxy…"
    $serviceInstance = Get-SPUsageService
    New-SPUsageApplication -Name $usageSAName -DatabaseServer $databaseServerName -DatabaseName "UsageDB" -UsageService $serviceInstance > $null

    Write-Host "Creating Access Services and Proxy…"
    New-SPAccessServiceApplication -Name $accesssSAName -ApplicationPool $apppoolname –Default > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Access Database Service"} | Start-SPServiceInstance > $null

    Write-Host "Creating BCS Service and Proxy…"
    New-SPBusinessDataCatalogServiceApplication -Name $bcsSAName -ApplicationPool $apppoolname  -DatabaseServer $databaseServerName -DatabaseName "BusinessDataCatalogDB" > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Business Data Connectivity Service"} | Start-SPServiceInstance > $null
     
     
    Write-Host "Creating State Service and Proxy…"
    New-SPStateServiceDatabase -Name "StateServiceDB" -DatabaseServer $databaseServerName | New-SPStateServiceApplication -Name $stateSAName | New-SPStateServiceApplicationProxy -Name "$stateSAName Proxy" -DefaultProxyGroup > $null
     
     
    Write-Host "Creating Word Conversion Service and Proxy…"
    New-SPWordConversionServiceApplication -Name $WordAutomationSAName -ApplicationPool $apppoolname -DatabaseServer $databaseServerName -DatabaseName "WordAutomationDB" -Default > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Word Automation Services"} | Start-SPServiceInstance > $null
     
     
    Write-Host "Creating Metadata Service and Proxy…"
    New-SPMetadataServiceApplication -Name $metadataSAName -ApplicationPool $apppoolname -DatabaseServer $databaseServerName -DatabaseName "MetadataDB" > $null
    New-SPMetadataServiceApplicationProxy -Name "$metadataSAName Proxy" -DefaultProxyGroup -ServiceApplication $metadataSAName > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Managed Metadata Web Service"} | Start-SPServiceInstance > $null
     
    Write-Host "Creating Performance Point Service and Proxy…"
    New-SPPerformancePointServiceApplication -Name $performancePointSAName -ApplicationPool $apppoolname > $null
    New-SPPerformancePointServiceApplicationProxy -Default -Name "$performancePointSAName Proxy" -ServiceApplication $performancePointSAName > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "PerformancePoint Service"} | Start-SPServiceInstance > $null

    Write-Host "Creating User Profile Service and Proxy…"
    $userProfileService = New-SPProfileServiceApplication -Name $userProfileSAName -ApplicationPool $AppPoolName -ProfileDBServer $databaseServerName -ProfileDBName "ProfileDB" -SocialDBServer $databaseServerName -SocialDBName "SocialDB" -ProfileSyncDBServer $databaseServerName -ProfileSyncDBName "SyncDB"
    New-SPProfileServiceApplicationProxy -Name "$userProfileSAName Proxy" -ServiceApplication $userProfileService -DefaultProxyGroup > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "User Profile Service"} | Start-SPServiceInstance > $null

    Write-Host "Creating Web Analytics Service and Proxy…"
    $stagerSubscription = "<StagingDatabases><StagingDatabase ServerName=’$databaseServerName’ DatabaseName=’StagerDB’/></StagingDatabases>"
    $reportingSubscription = "<ReportingDatabases><ReportingDatabase ServerName=’$databaseServerName’ DatabaseName=’WarehouseDB’/></ReportingDatabases>"
    New-SPWebAnalyticsServiceApplication -Name $WebAnalyticsSAName -ApplicationPool $AppPoolName -ReportingDataRetention 20 -SamplingRate 100 -ListOfReportingDatabases $reportingSubscription -ListOfStagingDatabases $stagerSubscription > $null
    New-SPWebAnalyticsServiceApplicationProxy -Name "$WebAnalyticsSAName Proxy" -ServiceApplication $WebAnalyticsSAName > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Web Analytics Web Service"} | Start-SPServiceInstance > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Web Analytics Data Processing Service"} | Start-SPServiceInstance > $null
     
    Write-Host "Creating Secure Store Service and Proxy…"
    New-SPSecureStoreServiceapplication -Name $secureStoreSAName -Sharing:$false -DatabaseServer $databaseServerName -DatabaseName "SecureStoreServiceAppDB" -ApplicationPool $AppPoolName -auditingEnabled:$true -auditlogmaxsize 30 | New-SPSecureStoreServiceApplicationProxy -name "$secureStoreSAName Proxy" -DefaultProxygroup > $null
    Get-SPServiceInstance | where-object {$_.TypeName -eq "Secure Store Service"} | Start-SPServiceInstance > $null

    ##—————————————————————-

    Целиком скрипт можно скачать отсюда. Как можно заметить из скрипта, в нем не создается сервисное приложение поиска. Я не стал включать его, поскольку планирую посвятить поиску отдельную статью и создавать сервисное приложение, после разбора архитектуры.

    Остается проверить работу скрипта, ну прежде всего в центре администрирования нужно выбрать “Manage Service Application”, вы должны увидеть список созданных сервисных приложений и их прокси. (Рисунок 2)

     

    2

    Рисунок 2. Просмотр списка сервисных приложений и их прокси.

    Далее, необходимо убедиться, что прокси сервисных приложений попали в прокси группу Default, т.е закреплены за ней. Для этого идем по пути: CA –> Application Management –> Configure service application associations –>  View –> Service Applications –>  Application Proxy Group –> Default. И получаем на выходе следующую картинку. (Рисунок 3)

     

    3

     

    Рисунок 3. Просмотр прокси группы Default.

    Но и это еще не все. В самом начале скрипта мы создавали ManagedAccount  (New-SPManagedAccount ), в 2010 версии SharePoint слегка изменился подход к сервисным учётным записям, т.е тем от которых запущены сервисы.  Теперь подход такой:

         1) Вы создаете учетную запись в AD DS

         2) Регистрируете ее как ManagedAccount в SharePoint

         3) При создании пула приложений выбираете одну из ManagedAccount

    Нужно это для того, чтобы снять с администратора бремя устаревания паролей и заставить SharePoint  самостоятельно менять пароль как только доменная политика скажет об этом. Опять же после автоматического изменения пароля, администратору не придется заново прописывать его в десятках окон. Так вот в та учетная запись ServicePool, от которой работает пул сервисных приложений была переведена в ManagedAccount, но включить из PowerShell автоматическую смену пароля у меня не получилось. Поэтому идем по пути: CA –>  Security –> Configure Managed Accounts –> Выбираем нашу учетку  (ServicePool) –> Edit и устанавливаем автоматическую смену пароля “Enable Automatic Password Change. (Рисунок 4)

     

    5

     

    Рисунок 4 . Установка автоматической смены пароля для конкретной Managed Account.

     

    Резюмируем. После всех манипуляций мы получили группу сервисных приложений (все кроме поиска), которые будут закрепляться за каждым порталом вашего  SharePoint , при этом на текущий момент сервисные приложения не сконфигурированы и поэтому перед использованием конкретного сервиса, его необходимо настроить.  Но в тоже время задел уже есть. Что предстоит сделать на следующем шаге. В следующей части я покажу как создать веб-приложение и развернуть на нем коллекцию сайтов. Собственно нужен тестовый портал на котором будет можно отработать действие каждого сервисного приложения из созданных в этой статье.

    Продолжение следует ..

     

    MCT/MVP Илья Рудь

Комментарии

  1. Спасибо за цикл статей, для начинающих самое то!

  2. Огромное спасибо, отличный материал. Пробовал развернуть в тестовой среде, все работает отлично.
    Единственный момент, который считаю стоит упомянуть при планировании развертывания – это именование баз данных SQL. Если разворачивать SP10 в рабочую среду MSSQL он создаст множество нелицеприятных имен баз, содержащих GUID в имени. В листинге по созданию сервисных приложений все прекрасно с именами сервисных баз где заведомо указано имя базы -DatabaseName “DatabaseName”. Но, например, при создании PerformancePointServiceApplication этот параметр пропущен и результате получаем имя базы вида PerformancePoint service_1503f249b0a8439faa6191625dc27f48. На работу не влияет, вот только если на вашем MSSQL сервере уже крутится несколько рабочих баз, этот момент может затруднить администрирование SQL и в целом портит вид логически выстроенной структуры баз.
    Чтобы этого избежать прежде всего не стоит запускать ни одного визарда. «SharePoint configuration wizard» можно заменить скриптом PowerShell
    New-SPConfigurationDatabase -DatabaseName “SP10_ConfigDB” -DatabaseServer “sqlserver.domain.localinstancename” -AdministrationContentDatabaseName “SP10_Admin_ContentDB” -Passphrase (ConvertTo-SecureString “Passw0rd” -AsPlaintext -Force) -FarmCredentials (Get-Credential)
    иначе мастер создаст базу админки с именем SharePoint_AdminContent_5453eba1-a204-42f0-8519-188ad85ebc6e
    Kerberos включается так New-SPCentralAdministration -Port 50000 -WindowsAuthProvider “Kerberos”
    Особенно не стоит запускать визард по настройку фермы, его прекрасно заменяет скрипт предложенный Ильей.

  3. Какие права должны быть у учетки, от имени которой запускается Пул приложений? (в Вашем примере itbrand.ruServicePool)

  4. Во время работы возникает столько вопросов, что я даже не успеваю все запомнить. Порекомендуйте литературу/библиотеку, откуда я могу почерпнуть ответы на часто задаваемые вопросы.
    А пока вопросы такие:
    у меня сейчас 3 пула приложений: один созданный мной, два предопределенных.
    Где я могу удалить лишние пулы? Где посмотреть их список? Где посмотреть какие приложения на данный момент, какой пул используют?

    спасибо

  5. 1. Права необходимые для учетных записей брать отсюда http://archive.msdn.microsoft.com/sp2010security/Release/ProjectReleases.aspx?ReleaseId=5245

    2. Посмотреть пулы можно из IIS либо шэлом с коммандлетом: Get-SPServiceApplicationPool Что лишнее в вашем случае и есть ли лишнее, я не знаю.

  6. Илья, наверное некорректно, что я превращаю комментарии в конференцию? может быть имеет смысл перейти на другую площадку?
    у меня сейчас такая ошибка:

    Следующие службы в настоящий момент запущены под учетными записями, входящими в группу “Администраторы” этого компьютера: SharePoint Central Administration v4 (Application Pool)
    SPTimerV4(Windows Service)

    Типа, их надо поменять.
    И при этом указана ссылка где я могу это сделать (http://vm4:25091/_admin/FarmCredentialManagement.aspx)
    Проблема в том, что в том окне невозможно поменять учетку запускающего пул (SharePoint Central Administration v4) – это только в ИИС
    и саму службу тоже невозможно выбрать – только в стандартной виндовой консоли.

    Это нормально или нет?

  7. 1.Подскажите, пожалуйста, что это за сервис такой “Usage and Health Data Collection Service”? В предыдущих статьях о нем ничего нет и мастером его не создать
    2. Есть ли случаи, при которых важен порядок создания приложений-служб?

  8. Интересно, что после включения “Enable Automatic Password Change” (обычно) невозможно сменить пароль, нажав кнопочку на той же страничке. Причина простая – по умолчанию в Group Policy установлено минимальное время жизни пароля, 1 сутки.

  9. при выполнении скрипта всплывает надпись красным на долю сикунды и резко закрываеться. после выполнения этого скрипта создаеться только Прокси приложения-службы обнаружения и балансировки нагрузки для приложений_9472c921-f213-488a-818b-3f4c568bdd93. Эт так и должно быть?

  10. Костя, думаю имеет смысл выполнить из шэла интерактивно и посмотреть на что ругается.

  11. Здравствуйте Илья, я запустил Ваш скрипт, забыв поменять имя сервера баз данных в нем. Как следствие сервисные службы создались но с ошибками – часть из них я не могу удалить. Есть ли возможность отката скрипта в PowerShell?

  12. в предыдущей статье, в итоговом листе запущенных служб не числилась User Profile Synchronization Service.
    В этой части вы ее уже наделяете эту незапущенную службу приложением
    как-то не стыкуется

  13. ага, прошу прощения, понял что эти службы наоборотные – сначала приложения, потом запуск
    МС маздай однако…

  14. Руками проще чем переписывать батник