App-V 5 for RDS — Разворачиваем инфраструктуру повышенной доступности

После отпуска в Крыму продолжаем перепечатывать статьи Алексея Максимова, посвященные продуктам Microsoft.

С выходом новой версии Microsoft Application Virtualization (App-V) 5.0 появился ряд улучшений и нововведений в этой технологии, которые всерьёз заставили задуматься об обновлении, особенно учитывая уже «набившие оскомину» проблемы с используемой нами до этого момента версии 4.6, в частности описанные в заметке SC 2012 Orchestrator — Режим обслуживания SCOM по расписанию. Планируя внедрение новой версии App-V, после ознакомления с материалами TechNet Library — Planning for High Availability with App-V 5.0 и KB2780309 — How to provide fault tolerance and load balancing in Microsoft App-V v5возникло желание создать такую архитектуру, при которой серверные компоненты App-V имели бы дополнительную отказоустойчивость. Далее мы рассмотрим пошагово процесс создания такой конфигурации…

Среда исполнения

В рассматриваемом примере мы построим двух-узловой NLB-кластер для серверных ролей App-V 5.0Management Server, Publishing Server и Reporting Server. Узлы кластера – виртуальные сервера одинаковой конфигурации на базе Hyper-V из Windows Server 2012 Datacenter EN. На виртуальных серверах устанавливается Windows Server 2012 Standard EN.

Каждый из виртуальных серверов создается с двумя сетевыми интерфейсами, настройка которых будет рассмотрена далее.

Серверам присвоены имена – KOM-AD01-APPV01 и KOM-AD01-APPV02

Создаваемый NLB-кластер будет иметь виртуальное имя KOM-AD01-APPVCL. Это имя будет использоваться в качестве точки входа для всех серверных ролей App-V 5.0

Базы данных серверных ролей App-V 5.0 Management Server и Reporting Server будут расположены на отдельном уже действующем кластере SQL Server 2012 c именем KOM-SQLCL

Централизованное хранилище App-V пакетов будет расположено на отдельном уже действующем файловом кластере с именем KOM-FSCL

Дополнительно будет развернута виртуальная машина с именем KOM-AD01-APPV03 для виртуализации приложений – создания пакетов App-V с помощью App-V Sequencer.

Упрощённая схема разворачиваемой инфраструктуры App-V 5.0 в нашем случае будет выглядеть так:

image_thumb7

Адреса точек доступа к соответствующим службам App-V будут следующими:

Management Service — http://KOM-APPVCL.holding.com:8080/Console.html
Reporting Service — http://KOM-APPVCL.holding.com:8081
Publishing Service— http://KOM-APPVCL.holding.com:8082

Основными клиентами серверных служб App-V в нашем случае будут выступать сервера служб удалённых рабочих столов Remote Desktop Services (RDS) под управлением Windows Server 2012, поэтому в дальнейшем будем рассматривать установку и настройку клиентов App-V Client for RDS

Предварительная подготовка виртуальных серверов

Поддерживаемые конфигурации — App-V 5.0 Supported Configurations
Предварительные требования для функционирования  — App-V 5.0 Prerequisites

Создадим по 2 сетевых адаптера на виртуальных серверах KOM-AD01-APPV01 и KOM-AD01-APPV02. Назовём их условно на каждом сервере таким образом чтобы было понятно за что отвечает этот интерфейс — NIC1 (Management) и NIC2 (NLB Cluster)

При создании второго сетевого адаптера, который будет использоваться для построения NLB в свойствах виртуальной машины Hyper-V необходимо разрешить спуфинг МАС-адресов (Enable spoofing of MAC addresses)

image_thumb8

Согласно нашей схемы, выделим и распределим статические IP адреса на серверах следующим образом:

Имя сервера Настройки IPv4 NIC1 Настройки IPv4 NIC2 (NLB)
KOM-AD01-APPV01 IP 10.160.0.133/24

GW 10.160.0.254
DNS 10.160.0.253,
10.160.1.253

IP 10.160.0.131/24

GW 10.160.0.254
DNS 10.160.0.253,
10.160.1.253

KOM-AD01-APPV02 IP 10.160.0.134/24

GW 10.160.0.254
DNS 10.160.0.253,
10.160.1.253

IP 10.160.0.132/24

GW 10.160.0.254
DNS 10.160.0.253,
10.160.1.253

В классическом понимании администраторов Windows-систем при использовании двух сетевых адаптеров адрес шлюза по умолчанию должен быть указан только на одном сетевом адаптере сервера. Если в таком случае для обоих интерфейсов использовать IP адреса из одной подсети, то виртуальная машина на Windows Server 2012 начинает как-то странно себя вести, а именно с этой машины начинается мощный поток мультикаста который приводит в полное иступление коммутаторы, обслуживающие этот сегмент сети…начинается блокировка портов, потери пакетов и т.п. бардак. Такие проблемы фиксировали наши телекомщики сразу же после того как на сетевом интерфейсе NLB мной включался IP Forwarding. Самое интересное, что точно такая-же конфигурация на Windows Server 2008 R2, которая была описана мной ранее, например, в заметке Exchange Server 2010 How-to: Установка ролей Client Access и Hub Transport в NLB кластере на Windows Server 2008 R2работает без каких-либо нареканий по сей день. Понять корень проблемы нам так и не удалось и поэтому после проведения ряда проверок был выбран вариант с указанием адреса шлюза по умолчанию на обоих сетевых адаптерах, при котором вышеописанных проблем с Windows Server 2012 замечено не было.

Интерфейс NIC1 будет отвечать за управление самим сервером (будет зарегистрирован в DNS на FQDN имя сервера), а NIC2 (для которого включён спуфинг MAC адресов) будет участником NLB кластера. Выполним настройку сетевых интерфейсов на каждом из серверов согласно вышеприведённой таблицы на примере сервера KOM-AD01-APPV01

Откроем окно настройки сетевых подключений и в меню Advanced > Advanced Settings и проверим порядок использования подключений (Connections).

image_thumb21111111_thumb

NIC1 должен иметь приоритет над NIC2.

image_thumb31111_thumb

В свойствах сетевого подключения, которое будет использоваться для подключения к NLB кластеру (NIC2) можно отключить все компоненты, за исключением TCP/IPv4 и Client for Microsoft Networks:

image_thumb8111_thumb

В свойствах компонента TCP/IPv4 зададим настройки согласно приведённой ранее таблицы и по кнопке Advancedоткроем окно дополнительных настроек

image_thumb9

В окне дополнительных настроек TCP/IP на закладке DNSотключим механизм регистрации в DNS:

image_thumb7111_thumb

Интерфейс NIC1 настроим согласно вышеприведённой таблицы аналогичным образом, за исключением того, что на нём может быть включена опция регистрации в DNS и обязательно должны быть включены компоненты TCP/IPv4 , Client for Microsoft Networks и File and Printer Sharing for Microsoft Networks

image_thumb10

После того как описанным способом настроены сетевые интерфейсы на обоих серверах, зарегистрируем их имена в доменной зоне прямого просмотра DNS (если запрещена динамическая регистрация в DNS и/или отключена опция регистрации в свойствах интерфейсов NIC1). Для пакетной регистрации A-записей в DNS можно воспользоваться скриптом описанным в заметке DNS – Пакетное создание А-записей с помощью WMI и Powershell

Дополнительно сразу же создаём в DNS статическую А-запись для будущего NLBкластера.

image_thumb11

На разворачиваемых виртуальных серверах KOM-AD01-APPV01 и KOM-AD01-APPV02 серверные компоненты App-V будут использовать для хранения баз данных Management Server DB и Reporting Server DB — общий экземпляр SQL Server, поэтому эти сервера должны иметь установленные клиентские компоненты SQL Server, а также привилегии доступа к SQL Server. Настройку доступа к SQL Server выполним позже, а пока установим на каждый сервер свежую версию пакета Microsoft SQL Server 2012 Native Client. Скачать его можно со страницы загрузки Microsoft SQL Server 2012 SP1 Feature Pack(файл sqlncli.msi)

image_thumb12_thumb

После установки клиента SQL Server создадим на каждом сервере SQL-Alias, который будем в дальнейшем использовать для подключения к удалённому экземпляру SQL Server. Этого конечно можно и не делать, но это может оказаться полезным (даст нам дополнительную гибкость) в случае необходимости переноса БД на другой SQL-сервер или даже экземпляр. Запустим встроенную в ОС утилиту SQL Server Client Network Utility (C:\windows\system32\cliconfg.exe) и добавим два новых алиаса – с коротким именем сервера и FQDN

image_thumb13

Фактически созданные SQL-алиасы в интерфейсе утилиты были записаны в ключ реестра: HKLM\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo

Теперь нужно проверить созданные нами SQL-алиасы. Для этого создадим пустой файл Universal Data Link с расширением *.udl и запустим его. На закладке Connection укажем SQL-алиас, выберем режим аутентификации Use Windows NT Integrated security и нажмём кнопку Test Connection

image_thumb14

Если мы всё сделали правильно, то получим положительный результат подключения.

При этом перечень всех активных БД на новом SQL сервере будет доступен в выпадающем списке Select the database on the server. Таким образом проверим алиас созданный как по NetBIOS имени так и по FQDN.

***

Далее, с помощью PowerShell установим на оба сервера исполняемые компоненты NLB

Import-Module «ServerManager»

Add-WindowsFeature «NLB» –IncludeManagementTools

Затем создадим разрешающее правило в Windows Firewall для входящих подключений на порты служб App-V на обоих серверах:

Import-Module NetSecurity

New-NetFirewallRule -DisplayName «App-V Management Server (TCP-In)» -Direction Inbound -LocalPort 8080 -Protocol TCP -Action Allow -Profile Any

New-NetFirewallRule -DisplayName «App-V Reporting Server (TCP-In)» -Direction Inbound -LocalPort 8081 -Protocol TCP -Action Allow -Profile Any

New-NetFirewallRule -DisplayName «App-V Publishing Server (TCP-In)» -Direction Inbound -LocalPort 8082 -Protocol TCP -Action Allow -Profile Any

Создание кластера NLB

На первом виртуальном сервере (KOM-AD01-APPV01) открываем консоль Network Load Balancing Manager (nlbmgr.exe). Выбираем пункт меню Cluster > New Cluster

image_thumb111_thumb

Вводим имя первого узла, который хотим добавить в NLB, кнопкой Connectподключаемся к нему, и получив с него набор доступных интерфейсов, выбираем тот который хотим сделать участником кластера:

image_thumb15

На странице параметров хоста (Host Parameters) оставляем настройки по умолчанию:

image_thumb16

В следующем окне мастера создания кластера добавляем IP адрес NLBкластера, на который мы ранее в DNS зарегистрировали А-запись.

image_thumb17

Далее указываем FQDN кластера NLB (по той самой A-записи), а также режим его работы. Режим работы кластера – режим одноадресной рассылки – Unicast.

image_thumb18

На странице правил портов (Port rules) удаляем имеющееся по умолчанию правило и добавляем необходимые нам правила. При добавлении правила портов убираем флажок All и указываем конкретный интерфейс NLB и диапазон портов, который хотим добавить в кластер NLB.

image_thumb19

В общей сложности, в нашем примере балансировке в NLB кластере мы будем подвергать следующие порты:

TCP 8080 – для роли App-V Management Server;
TCP 8081 – для роли App-V Reporting Server;
TCP 8082 – для роли App-V Publishing Server;

Если по какой-то причине необходимо сделать так чтобы все 3 серверные роли App-V использовали один порт, можно попробовать использовать метод изложенный в статье Kirx’ Blog — How to share ports of App-V 5 services

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

image_thumb20

Далее, переходим на имя NLB кластера и пунктом меню Add Host to Clusterвызываем мастер добавления второго сервера в кластер.

В конечном итоге после добавления (по аналогии с первым узлом) второго сервера мы получим работоспособный Windows NLB кластер

image_thumb21

С помощью Ping -tпроверяем из клиентской подсети доступность кластерного интерфейса по очереди перезагружая узлы кластера.

Дополнительная подготовка инфраструктуры

Создадим сетевой каталог для хранения пакетов App-V на надёжном файловом ресурсе. В нашем примере это будет файловый кластер KOM-FSCL. Из этого каталога клиенты App-V будут загружать пакеты виртуальных приложений опубликованные в службе публикации App-V Publishing Server. Доступ к каталогу настроим на чтение для всех пользователей домена.

Создадим доменную группу безопасности объединяющую учетные записи администраторов App-V. В нашем примере это будет группа KOM\KOM-APPV-Administrators.

Создадим доменную группу безопасности объединяющую учетные записи компьютеров на которые будут установлены роли серверов управления App-V. В нашем примере это будет группа KOM\KOM-APPV-ManagementServers. Включим в эту группу учетные записи компьютеров KOM-AD01-APPV01 и KOM-AD01-APPV02.

Созданные группы будут в дальнейшем использоваться для делегирования прав управления серверными службами App-V и доступа к базам данных Management и Reporting.

Установка баз данных App-V

Так как в нашем случае для БД App-V будет использоваться удалённый кластеризованный экземпляр SQL Server, следуя инструкции Planning for High Availability with App-V 5.0 — Support for Microsoft SQL Server clustering нам необходимо будет вручную создать и настроить соответствующие базы данных ManagementDatabase и ReportingDatabase в кластере SQL Server.

Убеждаемся в том, что службы SQL Server и SQL Server Agentработают от имени доменной учетной записи.

Монтируем образ с дистрибутивом App-V (в нашем случае это будет App-V for RDS v5.0 с интегрированным пакетом исправлений SP1)

image_thumb22

Распаковываем инсталлятор \APP-V 5.0 SERVER SP1\APPV_SERVER_SETUP.EXE в отдельный каталог:

APPV_SERVER_SETUP.EXE /LAYOUT /LAYOUTDIR=»C:\Temp\APPV_SERVER»

После завершения распаковки переходим в подкаталог DatabaseScriptsгде сможем найти скрипты установки БД и инструкции.

***

Для создания App-V 5.0 Management Database читаем инструкцию Readme.txt из папки ManagementDatabase. На текущий момент там содержатся следующие инструкции:

1) Выполняем SQL-скрипт ManagementDatabase\Database.sql для БД master. В результате будет создана БД с именем AppVManagement

2) Выполняем по порядку SQL-скрипты для созданной БД AppVManagementчтобы создать необходимую структуру внутри этой БД (обязательно соблюдать порядок)

ManagementDatabase\CreateTables.sql
ManagementDatabase\CreateStoredProcs.sql
ManagementDatabase\UpdateTables.sql
ManagementDatabase\InsertVersionInfo.sql

3) Открываем SQL-скрипт ManagementDatabase\Permissions.sql и устанавливаем SID и имена доменных групп безопасности, которым будет дано право на чтение и редактирование БД AppVManagement. Нам нужно изменить значения ManagementDbPublicAccessAccount и ManagementDbWriteAccessAccountimage_thumb23

Исходя из примера в статье The Microsoft App-V Team Blog  — How to install the App-V 5.0 Database and Management Server using SQL scripts on the DB предполагается, что в качестве ManagementDbPublicAccessAccount мы можем указать доменную группу безопасности администраторов App-V (в нашем случае KOM\KOM-APPV-Administrators), а в качестве  ManagementDbWriteAccessAccount мы можем указать доменную учетную запись сервера App-V (в нашем случае например KOM\KOM-AD01-APPV01$). Но так как у нас фактически будет не один сервер управления, в качестве  ManagementDbWriteAccessAccount мы укажем ранее созданную ранее доменную группу безопасности, в которую будут включены учетные записи серверов App-V (в нашем случае KOM\KOM-APPV-ManagementServers)

Чтобы получить значение SID в том виде в котором его нужно указывать в этом SQL-скрипте выполним в PowerShell следующую конструкцию:

$NTAccountName = «KOM\KOM-APPV-Administrators»

$NTAccountObject = New-Object System.Security.Principal.NTAccount($NTAccountName)

$NTAccountSid = $NTAccountObject.Translate([System.Security.Principal.Securityidentifier])

[string]$StringNTAccountSid = $NTAccountSid.value

$TrimmedSid = $StringNTAccountSid.Replace(«-»,«»)

$TrimmedSid = $TrimmedSid.Substring(1,($TrimmedSid.Length-1))

Write-Host $TrimmedSid

В конечном счете скрипт примет примерно следующий вид:

image_thumb24

После внесённых изменений выполняем SQL-скрипт ManagementDatabase\Permissions.sql для БД AppVManagement.

На этом настройку БД AppVManagement можно считать законченной.

***

Для создания App-V 5.0 Reporting Database соответственно читаем Readme.txt из папки ReportingDatabase. На текущий момент там содержатся следующие инструкции:

1) Выполняем SQL-скрипт ReportingDatabase\Database.sql для БД master. В результате будет создана БД с именем AppVReporting

2) Модифицируем SQL-скрипт ReportingDatabase\Permissions.sql по аналогии со скриптом ManagementDatabase\Permissions.sql и устанавливаем SID и имена доменных групп безопасности, которым будет дано право на чтение и редактирование БД AppVReporting. Нам нужно изменить значения ReportingDbPublicAccessAccount и ReportingDbWriteAccessAccount. В конечном счете скрипт примет примерно следующий вид:

image_thumb25

3) Выполняем по порядку SQL-скрипты для созданной БД AppVReportingчтобы создать необходимую структуру внутри этой БД и настроить разрешения (обязательно соблюдать порядок)

ReportingDatabase\CreateTables.sql
ReportingDatabase\CreateReportingStoredProcs.sql
ReportingDatabase\CreateStoredProcs.sql
ReportingDatabase\CreateViews.sql
ReportingDatabase\InsertVersionInfo.sql
ReportingDatabase\Permissions.sql
ReportingDatabase\ScheduleReportingJob.sql

Скрипт ReportingDatabase\UpdateFromBeta.sql выполнять в нашем случае не нужно так как он используется лишь в случае обновления базы с версии Beta.

На этом настройку БД AppVReporting можно считать законченной.

Установка серверов управления, отчетов и публикации App-V

Приступим к установке серверных компонент App-V на первом сервере – KOM-AD01-APPV01

Перед запуском программы установки серверных компонент App-V устанавливаем предварительно требуемые компоненты:

1) Скачиваем и устанавливаем пакет
Microsoft Visual C++ 2010 SP1 Redistributable Package (x64)

2) Скачиваем и устанавливаем
Microsoft Visual C++ 2010 SP1 Redistributable Package (x86)

3) Устанавливаем роль Windows Web Server (Роль IIS и необходимые для App-V сопутствующие компоненты):
– Common HTTP Features (static content , default document),
– Application Development (ASP.NET, .NET Extensibility, ISAPI Extensions, ISAPI Filters),
– Security (Windows Authentication, Request Filtering),
– Management Tools (IIS Management Console)

Import-Module «ServerManager»

Add-WindowsFeature Web-Server, Web-Asp-Net, Web-Asp-Net45, Web-Net-Ext, Web-Net-Ext45, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Windows-Auth, Web-Filtering, Web-Mgmt-Console

4) Для использования веб-консоли App-V понадобится Microsoft Silverlight. В нашем случае он уже установлен на сервера в составе рекомендуемых обновлений через WSUS.

Устанавливаем…

Запускаем программу установки APPV_SERVER_SETUP.EXE, принимаем условия лицензионного соглашения и дойдя до шага выбора устанавливаемых компонент отмечаем Management Server, Publishing Server и Reporting Serverimage_thumb26

Расположение каталога установки оставляем по умолчанию..

image_thumb27

Далее указываем имя удалённого SQL-сервера (в нашем случае в виде SQL-алиаса, который мы настроили ранее). Имя БД управления Management Databaseоставляем по умолчанию, так как именно с таким именем БД была предварительно создана нами ранее на кластере SQL Server

image_thumb28

Здесь небольшое отступление. Если мы решили использовать SQL-алиас, то есть один нюанс – в DNS придётся создать запись типа CNAMEс именем SQL-алиаса (ссылающуюся на A-запись самого сервера SQL).

image_thumb29

Если мы этого не сделаем, инсталлятор App-V нам упорно будет говорить что SQL сервер недоступен, при этом в логе инсталлятора %temp%\appv_server_*.log можно будет обнаружить записи типа

AppvUX: A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 — Error Locating Server/Instance Specified)

То есть, как я понял, инсталлятор перед непосредственной проверкой соединения с SQL Server выполняет проверку сетевой доступности указанного имени SQL сервера.

Вернёмся к процессу установки. На следующем шаге указываем параметры подключения к БД отчетности App-V Reporting Database— имя удалённого SQL-сервера (в нашем случае в виде SQL-алиаса, который мы настроили ранее). Имя БД оставляем по умолчанию, так как именно с таким именем БД была предварительно создана нами ранее.

image_thumb30

Далее укажем параметры настройки роли Management Server — доменную группу безопасности включающую администраторов App-V и номер TCP порта на котором будет создан веб-сайт Management Service в IIS — 8080

image_thumb31

На следующем шаге укажем параметры роли Publishing Server. Здесь в качестве службы управления используемой сервером публикации мы должны указать URL на котором служба публикации сможет обнаружить службу управления. В силу того, что в нашем случае, служба публикации будет работать на той же системе что и служба управления, – мы можем указать адрес http://localhost:8080

Имя веб-сайта службы публикации оставляем по умолчанию, порт – 8082

image_thumb32

На следующем шаге укажем параметры роли Reporting Server. Имя веб-сайта службы отчетов оставляем по умолчанию, порт — 8081

image_thumb33

Дожидаемся успешного окончания процесса установки..

image_thumb34

По окончании проверим доступность веб-консоли службы управления App-V по указанной в инсталляторе ссылке http://localhost:8080/Console.html а также проверим доступность консоли удалённо по сети с использованием FQDN имени сервера http://KOM-AD01-APPV01.holding.com:8080/Console.html

Сразу скачиваем и устанавливаем недавно выпущенное исправление KB2873465 — Hotfix Package 1 for Microsoft Application Virtualization 5.0 Server Service Pack 1. После его установки основа открываем веб-консоль службы управления и убеждаемся что версия App-V обновилась до 5.0.1211.0

image_thumb35

***

Итак, серверные компоненты App-V на первом сервере установлены, и теперь по аналогии выполняем установку на втором сервере – KOM-AD01-APPV02.

***

После этого удалённо откроем консоль управления обратившись к виртуальному имени NLB кластера: http://KOM-AD01-APPVCL.holding.com:8080/Console.html перейдём в раздел консоли SERVERSи добавим оба сервера в формате <Имя домена>\<Имя сервера>

image_thumb36

На этом установку и базовую настройку серверных ролей можно считать законченной.

Установка Sequencer и создание App-V пакета

Так как в нашем случае App-V Client предполагается использовать на серверах служб удалённых рабочих столов (RDS) c ОС Windows Server 2012, то и на виртуальную машину на которой мы хотим установить App-V Sequencer мы установим Windows Server 2012. После чистой установки операционной системы присвоим компьютеру имя (KOM-AD01-APPV03) и настроим сетевой интерфейс. На этих настройках мы ограничимся, так как система должна быть максимально чистой. То есть мы не станем ни ставить на систему обновления, ни вводить её в домен или делать какие-либо другие настройки.

Загрузим на эту виртуальную машину инсталлятор APPV_SEQUENCER_SETUP.EXEи выполним его бесхитростную установку…

image_thumb37

Перед непосредственным началом процесса виртуализации какого-либо приложения завершим работу ОС на виртуальной машине App-V Sequencer и создадим моментальный снимок (снапшот) этой виртуальной машины, чтобы после создания App-V пакета мы смогли вернуть систему в исходное чистое состояние и её можно было использовать в дальнейшем для сиквенсинга. После того как снимок сделан и мы снова включаем VM и входим в систему от имени встроенной учетной записи локального Администратора.

Рассмотрим пример создания App-V пакета небольшого бизнес-приложения ISC_Netc которым работают наши пользователи. Особенной отличительной чертой, из-за которой нам потребовалось виртуализация данного приложения является то, что приложение при каждом запуске требует доступ на запись к тем областям системного реестра, которые в обычной практике с точки зрения безопасности доступны рядовым пользователям только на чтение.

Виртуализуемое приложение имеет зависимость. Для его работы необходимо наличие установленного .NET Framework 2.0. Мы предполагаем что на всех компьютерах которые будут выступать в качестве App-V Client уже развернут .NET Framework 2.0 (в составе .NET Framework 3.5) и поэтому мы не будем включать установку .NET Framework в процесс виртуализации. Вместо этого выполним для приложения зависимость установив на нашем сервере App-V Sequencer компоненты .NET Framework 2.0 через консоль Server Manager

image_thumb38

В любом случае после окончания виртуализации приложения и откату на сделанный ранее снимок мы получим чистую ОС без установленных компонент .NET Framework

Запустим App-V Sequencer и выберем пункт создания нового пакета – Create a New Virtual Application Package

image_thumb39

Укажем что мы создаём простой пакет с использованием инсталляционных файлов виртуализируемого приложения – Create Package (default)

image_thumb40

Sequencer проверит готовность нашей системы к началу процесса виртуализации приложения и если обнаружит какие-то проблемы – сообщит нам о них…

image_thumb41

Далее оставим используемый по умолчанию тип приложения – Standard Application

image_thumb42

Укажем путь к инсталлятору нашего приложения, расположенному в отдельном локальном каталоге

image_thumb43

Затем укажем имя и при желании номер версии создаваемого App-V пакета отталкиваясь от имени приложения в этом пакете. В качестве Primary Virtual Application Directory (PVAD) укажем путь к каталогу в который обычно устанавливается приложение. Этот путь не имеет отношения в реальной файловой системе и фактически будет сэмулирован приложению в виртуальной файловой системе клиента App-V. При назначении PVAD нужно постараться соблюдать уникальность этого пути для всех пакетов App-V используемых на клиенте (во избежание возможных конфликтов виртуальных приложений). По этой причине я обычно добавляю к дефолтному пути имя подпапки отражающей версию приложения на тот случай, если на клиентах потребуется запуск одного и того же виртуального приложения но в разных его версиях. Есть интересное мнение по поводу выбора PVAD в статье Confessions of a Guru — What I Do: App-V 5 and the “Primary Virtual Application Directory”

image_thumb44

На следующем шаге запустится инсталлятор нашего приложения и Sequencer начнёт фиксировать все изменения происходящие в системе, например изменения ключей реестра или изменения на уровне файловой системы. В запустившемся инсталляторе нашего приложения выполняем все действия которые обычно выполняются при обычной локальной установке…

image_thumb45

… в частности указываем то что приложение будет установлено в режиме “для всех пользователей”. При этом путь установки приложения можно не менять, так как он для нас не имеет значения, ибо путь установки приложения в виртуальной файловой системе мы уже указали ранее в качестве PVAD

image_thumb46

Проходим весь процесс установки и штатно закрываем инсталлятор..

image_thumb47

После закрытия инсталлятора, устанавливаем признак того, что процесс установки приложений закончен (если в пакет собирается несколько приложений то последующие инсталляторы можно запустить кнопкой Run) – I am finished installing.

image_thumb48

После этого нам будет предложено выполнить запуск найденных исполняемых файлов приложения для того чтобы выполнить базовую после-установочную настройку приложения, если такая требуется. Все настройки сохранённые в приложении также будут сохранены в App-V пакет и другим пользователям запускаемым в дальнейшем это приложение уже не придётся выполнять эти настройки заново. Например сюда можно отнести первый запуск и согласие с лицензионным соглашением производителя программы и т.п. На этом этапе желательно, чтобы любое приложение было запущено хотя бы один раз…

image_thumb49

В рассматриваемом примере в нашем приложении мы отключили опцию авто-обновления и завершили его работу.

image_thumb50

На следующем шаге Sequencer соберёт данные об изменениях произошедших в системе в процессе установки, запуска и настройки нашего приложения и предложит нам либо сразу сохранить пакет либо немного изменить его свойства – выберем второй вариант..

image_thumb51

На шаге Streaming мы должны либо по отдельности снова запустить исполняемые файлы нашего приложения для оптимизации пакета для потоковой передачи, либо включить опцию полной предварительной загрузки пакета на клиенте перед использованием приложения – Force application(s) to be fully downloaded before launching

image_thumb52

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

image_thumb53

На следующем шаге мы можем либо продолжить редактирование создаваемого пакета, либо закончить процесс, сохранив пакет в текущей конфигурации. Сохраняем пакет…

image_thumb54

После того  как пакет сохранён Sequencer выведет нам дополнительную информацию о том какие файлы были исключены из пакета в процессе его создания. Щелкнув по надписи Files excluded from packageоткроется окно с подробной информацией обо всех исключённых файлах. Как правило в исключения попадают временные файлы не имеющие прямого отношения к нормальному функционированию виртуализируемого приложения.

image_thumb55

В результате работы Sequencer в указанном каталоге будет создано несколько файлов. Самый главный для нас файл это собственно сам App-V пакет – файл с расширением *.appv. Информацию об исключенных в процессе виртуализации приложения файлах можно также будет найти и после, — в файле report.xml

image_thumb56

Для того чтобы просмотреть или изменить содержимое пакета, достаточно двойным кликом запустить файл *.appv В открывшемся окне выберем опцию изменения пакета – Edit Package

image_thumb57

В открывшемся окне свойств App-V пакета перемещаясь по закладкам можно, например посмотреть и при необходимости изменить состав файлов приложения…

image_thumb58

После того как мы закончили манипуляции по настройке App-V пакета, копируем его с виртуальной машины на надёжный сетевой ресурс (в нашем случае это будет сетевой каталог на файловом кластере KOM-FSCL). Теперь можно выключить виртуальную машину App-V Sequencer и с помощью ранее сделанного снапшота вернуть её к исходному чистому состоянию для виртуализации других приложений в дальнейшем.

Публикация App-V пакета

Теперь наш App-V пакет, размещённый на файловом ресурсе, нужно опубликовать в службе публикации App-V. Для этого откроем в браузере веб-консоль службы управления, перейдём в раздел PACKAGES и выберем ссылку ADD or UPGRADE PACKAGE

image_thumb59

В открывшейся форме укажем UNС путь до нашего пакета на, размещённого на файловом ресурсе и жмакнем Add

image_thumb60

После того как пакет успешно добавлен, установим на него курсор и через контекстное меню выберем команду публикации –  publish

image_thumb61

После того как пакет изменит свой статус на published, нам нужно предоставить доступ к этому пакету. Для этого выберем ссылку EDIT в разделе AD ACCESS

image_thumb62

Введём имя доменной группы безопасности пользователей, для которой мы хотим предоставить право использования виртуальных приложений из данного пакета. В нашем упрощённом примере это будет группа всех пользователей, имеющих доступ к серверам RDS (KOM\KOM-AD01-RDS-AllUsers).  Введя имя группы сначала нужно выполнить его проверку Check а затем добавление Grant Access

image_thumb63

В App-V v5 есть два подхода к назначению доступа к приложениям из пакета App-V – доступ ориентированный на пользователя и доступ ориентированный на систему в целом. И в зависимости от текущих потребностей мы можем предоставлять доступ к пакету как доменной группе, объединяющей каких-либо пользователей, так и к доменно группе,объединяющей какие-либо компьютеры. По умолчанию клиенты App-V настроены на юзер-ориентированный подход, и для того, чтобы работало назначение пакетов на компьютеры, необходимо выполнить небольшую настройку клиентов. Рассмотрим эту процедуру далее.

Установка и настройка клиентов App-V

В нашем случае клиенты App-V будут устанавливаться на сервера фермы RDS на базе Windows Server 2012. На наши сервера RDS мы будем устанавливать специальную версию клиента — App-V 5.0 Remote Desktop Services client. Исходя из документа App-V 5.0 Prerequisites нам не требуется предварительная установка каких-либо компонент на Windows Server 2012, хотя на самом деле это может оказаться не совсем так. С требованиями к .NET Framework 4 и PowerShell 3.0всё понятно, – они присутствуют в Windows Server 2012 изначально, но вот компоненты…

Microsoft Visual C++ 2010 SP1 Redistributable Package MFC Security Update
Microsoft Visual C++ 2005 SP1 Redistributable Package MFC Security Update

возможно потребуется предварительно установить отдельно. Я сказал возможно, потому что это зависит от способа установки клиента App-V который мы выберем.

Согласно документа How to Deploy the Client Выполнить установку App-V 5.0 RDS Client на сервере RDS можно двумя путями – с помощью программы установки APPV_CLIENT_SETUP_RDS.EXE или же с помощью MSI-пакетов APPV_CLIENT_RDS_MSI_X64.MSI (основной пакет программы) и APPV_CLIENT_LP_ENUS_X64.MSI и APPV_CLIENT_LP_RURU_X64.MSI(языковые пакеты).

Установка с помощью программы установки хороша тем, что в систему автоматически до-устанавливаются требуемые для App-V компоненты такие как Visual C++ 2005/2010. После окончания установки вас попросят перезагрузить сервер

image_thumb64

Однако не очень приятным моментом такого варианта установки является то, что  в систему устанавливается целый ворох языковых пакетов для клиента App-V. Если вы считаете, что что в списке установленных приложений вам совершенно не нужен например корейский или турецкий языковой пакет, то можно выбрать вариант с установкой через MSI пакеты. Однако в таком случае компоненты Visual C++ 2005/2010 придётся самостоятельно установить в систему перед установкой клиента App-V. Вот простой пример командного файла который выполняет установку необходимых компонент, дистрибутивы которых расположены на файловом сервере:

SET «DISTR=\\KOM-FSCL\Distributives»

SET «DAPPVRDS=Microsoft\App-V-RDS\5.0_SP1\CLIENT»

SET «DVP2010=Microsoft\Visual C++ 2010″

SET «DVP2005=Microsoft\Visual C++ 2005″

«%DISTR%\%DVP2005%\vcredist_x86.exe» /Q

«%DISTR%\%DVP2005%\vcredist_x64.exe» /Q

«%DISTR%\%DVP2010%\vcredist_x86.exe» /q /norestart

«%DISTR%\%DVP2010%\vcredist_x64.exe» /q /norestart

msiexec -i «%DISTR%\%DAPPVRDS%\CORE MSI\APPV_CLIENT_RDS_MSI_X64.MSI» /norestart AcceptEULA=1

msiexec -i «%DISTR%\%DAPPVRDS%\LANGUAGE PACKS\ENGLISH\APPV_CLIENT_LP_ENUS_X64.MSI» /norestart AcceptEULA=1

msiexec -i «%DISTR%\%DAPPVRDS%\LANGUAGE PACKS\RUSSIAN\APPV_CLIENT_LP_RURU_X64.MSI» /norestart AcceptEULA=1

В результате мы получим следующий перечень установленных пакетов, что на порядок скромнее чем в случае использования инсталятора APPV_CLIENT_SETUP_RDS.EXE…

image_thumb65

После окончания установки перезагружаем сервер RDS.

Теперь нам нужно настроить App-V клиента. Сделать это можно двумя путями:

1) С помощью командлетов PowerShell которые добавляются в систему в процессе установки клиента App-V. Список доступных командлетов можно получить с помощью Get-Command *AppV* или Get-Command -Module AppVClient

image_thumb66

2) С помощью доменных групповых политик. Для этого необходимо загрузить ADMX шаблоны групповых политик по ссылке Microsoft Desktop Optimization Pack Administrative Templates (ADMX templates for MDOP products — UE-V and App-V)

… и добавить файлы appv.admx, ru-ru\appv.adml и en-us\appv.adml в центральное хранилище шаблонов в домене в каталог \\holding.com\SYSVOL\holding.com\Policies\PolicyDefinitions

После этого в редакторе групповой политики появятся параметры настройки клиентов App-V в разделе Computer Configuration\Administrative Templates\System\App-V

image_thumb67

Разумеется когда клиентов App-V больше одного-двух имеет смысл выполнять их настройку массово с помощью групповых политик.

Сначала рассмотрим пример настройки клиента App-V на одном сервере RDS с помощью PowerShell.

Информацию о возможных параметрах которые можно передать клиенту App-V через PS можно найти в документе About Client Configuration Settings

Зададим клиенту данные о том на какой сервер публикации за App-V пакетами он должен обращаться. В нашем случае в качестве сервера публикации указывается виртуальное имя NLB кластера App-V

$PubServer = «KOM-AD01-APPVCL»

$PubURL = «http://KOM-AD01-APPVCL.holding.com:8082″

Add-AppvPublishingServer -Name $PubServer -URL $PubURL

image_thumb68

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

Sync-AppvPublishingServer -Name $PubServer

После этого запустим графический интерфейс (UI) клиента App-V (по значку в трее или по ярлыку в стартовом экране) и увидим что стали активны кнопки Update и Download

image_thumb69

По нажатию кнопки Update должно произойти обновление информации о доступных пакетах App-V. Переключившись на вкладку Virtual Appsмы увидим, что нам доступно одно приложение

image_thumb70

По нажатию кнопки Downloadдолжна произойти загрузка в кэш клиента App-V приложений пакета для возможности запуска этих виртуальных приложений даже при недоступности серверов публикации. Ну или же приложение будет автоматически загружено при первой попытке его запуска пользователем.

image_thumb71

Как мы сможем увидеть, ярлык который появится у пользователя на рабочем столе будет ссылаться на исполняемый файл виртуального приложения в папке внутри пользовательского профиля, в нашем случае это
%LOCALAPPDATA%\Microsoft\AppV\Client\Integration\B32525C7-3043-420D-B5AC-FB5DE8FA7AB8\Root\VFS\ProgramFilesX86\APBE\ISC_Net\isc_net.exe

image_thumb72

На самом деле каталог %LOCALAPPDATA%\Microsoft\AppV\Client\Integration\B32525C7-3043-420D-B5AC-FB5DE8FA7AB8 является символической ссылкой на другой каталог (junction) – подкаталог внутри C:\ProgramData\App-V

В представленном примере публикация App-V приложения выполняется с нацеливанием на пользователя. Если же приложение нужно сделать глобальным для всего сервера RDS, то есть, чтобы оно было доступно всем пользователям системы независимо от их членства в группах AD, — необходимо для клиента App-V активировать режим глобального обновления, который по умолчанию выключен. Для того, чтобы например включить глобальное обновление для настроенного на клиенте сервера публикации, выполним команды:

$PubServer = «KOM-AD01-APPVCL»

Get-AppvPublishingServer -Name $PubServer | Set-AppvPublishingServer

-GlobalRefreshEnabled $true

-GlobalRefreshOnLogon $true

-GlobalRefreshInterval 1

-GlobalRefreshIntervalUnit Day

Ну и конечно не стоит забывать про то что, чтобы App-V приложение на серверах RDS было доступно как глобальное, — в группах доступа на веб-консоли App-V должна быть добавлена доменная группа безопасности, в которую включены учетные записи серверов RDS. Дополнительно про нацеливание прав доступа на уровне системы можно почитать в статье TechNet Blogs — VirtualVibes — Enabling computer based targeting in App-V 5.0

Так как концепция выдачи прав доступа к виртуальным приложениям на уровней всей системы а не на пользователя более подходит в нашем случае с публикацией приложений на серверах RDS, — изменим настройки наших клиентов App-V на серверах RDS (с помощью GPO) а также изменим правила AD ACCESS для нашего пакета App-V на сервере публикации. Создадим для этого в домене группу безопасности, в которую включим учетные записи серверов RDS на которых мы планируем распространять пакеты виртуальных приложений App-V (в нашем примере KOM\KOM-AD01-RDS-App-V-Client-Computers)

В веб-консоли службы управления App-V дадим этой группе безопасности доступ к пакету App-V

image_thumb73

В разделе групповой политики Computer Configuration\Administrative Templates\System\App-V\Publishingприменяемой к нашим серверам RDS настроим параметры сервера публикации таким образом, чтобы глобальное обновление пакетов App-V (на уровне системы) было включено, а обновление на уровне пользователя – отключено (при этом пользователи сервера RDS не смогут «баловаться» кнопками в UI клиента App-V)

image_thumb74

После применения групповой политики на наших серверах RDS с помощью PowerShell проверим текущие настройки клиента App-V и убедимся что информация о службе публикации назначена в соответствии с заданными нами в GPO настройками.

image_thumb75

Выполняем синхронизацию клиента с службой публикации:

Get-AppvPublishingServer | Sync-AppvPublishingServer

Перелогинимся на сервере RDS и убедимся в том, что опубликованное нами приложение доступно всем пользователям на уровне системы

Get-AppvClientPackage | Select Name, IsPublishedToUser, IsPublishedGlobally | fl

image_thumb76

Также обращаем внимание на то, что путь в свойствах ярлыка виртуального приложения уже ссылается не на профиль конкретного пользователя, а на общий профиль %ALLUSERSPROFILE%, то есть junction в системе делается только один раз.

image_thumb77

Теперь нам остаётся только включить на наших клиентах App-V функцию отсылки сведений в службу App-V Reporting Server. О том как задать все параметры отчетов на клиенте App-V с помощью PowerShell можно посмотреть в документе  How to Enable Reporting on the App-V 5.0 Client using PowerShell.

В частности передача настроек в нашем случае будет выглядеть так:

Set-AppvClientConfiguration -ReportingEnabled $true

-ReportingStartTime 6

-ReportingRandomDelay 30

-ReportingInterval 1

-ReportingServerURL http://KOM-AD01-APPVCL.holding.com:8081

-ReportingDataCacheLimit 100

-ReportingDataBlockSize 131072

Чтобы форсировано вызвать процесс передачи данных в службу отчетов на клиенте можно выполнить командлет

Send-AppvClientReport –DeleteOnSuccess

У нас несколько серверов RDS и поэтому, чтобы включить механизм сбора и отправки отчетов сразу на всех клиентах, – воспользуемся групповой политикой в разделе Computer Configuration\Administrative Templates\System\App-V\Reporting

image_thumb78

После применения GPO на наших серверах RDS проверим свойства клиента App-V чтобы убедиться в том что назначенные нами параметры задействованы…

image_thumb79

Информацию о технологии сбора отчетов с клиентов можно найти в документе Об отчетности в App-V 5.0

Построение отчета об использовании App-V приложений

В текущей реализации службы отчетности App-V нет собственных инструментов для формирования и просмотра отчетов. Для этих целей предполагается использовать подключение отдельно функционирующей службы отчетов SQL Server (SSRS) или использовать другие сторонние средства для получения информации из БД отчетности. Рассмотрим пример того как можно с помощью подключения к БД отчетности сформировать отчет в Microsoft Office Excel 2013.

Запустим Excel от имени учетной записи пользователя который имеет право на чтение ДБ отчетности. В ленте переключимся на закладку Данные, выберем подключение Из других источников > С сервера SQL Server

image_thumb80

В открывшемся мастере введём имя SQL сервера и оставим опцию использования проверки подлинности Windows

image_thumb81

На следующем шаге выберем базу данных AppVReporting и таблицу ApplicationUsage

image_thumb82

При необходимости введём описание источника данных, которое будет отображаться в списке доступных источников для последующих подключений и нажмём кнопку Готово

image_thumb83

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

image_thumb84

Нажимаем OKи получаем таблицу с данными извлечёнными из БД отчетности App-V

image_thumb85

Используя заголовки сформированной таблицы мы можем настраивать фильтрацию, чтобы, например, в таблице отображались данные о запусках какого-то конкретного приложения или пользователя. В моём примере в колонке server_nameвместо FQDN имён серверов RDS отображается только имя домена. Полагаю, что на данный момент это можно считать багом службы отчетности App-V (подозреваю, что проявляется он лишь в случае, если имя домена содержит точки, т.е. используются под-домены).

Обратите внимание на то, что после выполнения на клиенте App-V команды отправки данных отчетности (Send-AppvClientReport) в SQL таблице ApplicationUsage эта информация сразу не появится. Это связано с тем, что сначала данные попадают в таблицу  UnprocessedCompletedApplicationUsage, а уже из неё перекочёвывают в таблицу ApplicationUsage только после отработки хранимой процедуры spProcessClientReport, которая в свою очередь запускается только один раз в сутки (в 01:00) в задании SQL Agent с именем ProcessAppVReportingDataJob. Поэтому если мы хотим получить оперативный отчет на текущий момент, необходимо самостоятельно выполнить запуск хранимой процедуры spProcessClientReport

***

Отдельно хочется упомянуть одно из дополнительных интересных новшеств клиента App-V v5 — возможность работы в режиме Shared Content Store (SCS) mode, при котором виртуальные приложения не кэшируются на клиенте, а запускаются прямо из сетевого хранилища. Думаю что такой режим работы приемлем только в сетях с повышенной пропускной способностью и с использованием скоростных дисковых хранилищ для хранения App-V пакетов. Подробней о режиме SCS можно почитать по ссылкам:
TechNet Blogs — VirtualVibes — Introducing Shared Content Store in App-V 5.0 (Goodbye Read Only Shared Cache!)
TechNet Blogs — The Microsoft App-V Team Blog — Shared Content Store in Microsoft App-V 5.0 – Behind the Scenes
How to Install the App-V 5.0 Client for Shared Content Store Mode

***

На этом, пожалуй, ограничим наш обзор и подведём итоги:
Серверные компоненты App-V развёрнуты в конфигурации повышенной доступности;
Клиенты App-V установлены и настроены;
Нужное нам приложение виртуализовано, опубликовано и доступно на клиентах App-V для исполнения;
Имеется базовый функционал отчетности об использовании приложений App-V.

Дополнительные источники информации:

TechNet Library — High Level Architecture for App-V 5.0
VirtualVibes Blog — App-V 5.0 Standalone Mode — Adding and Publishing a Package
Microsoft App-V Team Blog — How to install the App-V 5.0 Database and Management Server using SQL scripts on the DB
Community Driven Information Technology Virtualization and Cloud Enthusiasts Blog — Microsoft App-V 5: Installation and Configuration Using Windows Server 2012 and Windows 8
Kirx’ Blog — App-V 5 Beta Basic Troubleshooting

Leave a Reply

Your email address will not be published. Required fields are marked *