Статьи

Создание настраиваемого образа виртуальной машины SQL Server в Azure

Недавно у меня была возможность работать над проектом, где мне нужно было создать собственный образ SQL Server для использования с виртуальными машинами Azure. Процесс был немного более сложным, чем я первоначально ожидал. Я думаю, что это в основном потому, что я не был знаком с процессом подготовки образа SQL Server. Возможно, это не большая проблема для опытных администраторов баз данных SQL Server или ИТ-специалистов. Для меня это был отличный учебный опыт.


Почему пользовательский образ SQL Server?

Галерея изображений виртуальной машины Azure уже содержит образ SQL Server. С помощью этого образа очень легко создать новую виртуальную машину SQL Server . Однако при этом необходимо учитывать несколько важных компромиссов:

  • Невозможно полностью настроить базовую установку SQL Server. В конце концов, это шаблон / образ — вы получаете виртуальную машину, настроенную так, как был настроен образ.
  • Невозможно использовать собственную лицензию SQL Server. Если у вашей компании есть корпоративное соглашение (EA) с Microsoft, скорее всего, в это соглашение уже встроены некоторые лицензии SQL Server. В зависимости от деталей, использование лицензий от советника может оказаться значительно дешевле, чем оплата за образ виртуальной машины SQL Server из Azure .


Основные шаги

Существует 6 основных шагов по созданию настраиваемого образа виртуальной машины SQL Server для использования в Azure.

  1. Предоставление новой базовой Windows Server VM
  2. Загрузите установочный носитель SQL Server
  3. Запустите установку SQL Server, чтобы подготовить образ
  4. Настройте Windows для завершения установки SQL Server
  5. Захватите изображение и добавьте его в галерею изображений виртуальной машины Azure.
  6. Создайте новый экземпляр виртуальной машины, используя пользовательский образ SQL Server

Основная идея здесь состоит в том, чтобы создать базовую виртуальную машину, настроить ее для образа SQL Server, захватить виртуальную машину для создания образа и затем подготовить новые виртуальные машины, используя этот захваченный образ виртуальной машины.

Create_SQL_VM_Image_Azure 2

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

Примечание: терминология здесь может быть немного запутанной. При обращении к виртуальной машине, используемой для создания шаблона / образа, я буду использовать термин «базовая виртуальная машина». При обращении к виртуальной машине, созданной из базовой виртуальной машины, я буду использовать термин «экземпляр виртуальной машины».


1. Предоставление новой базовой Windows Server VM

Существует несколько способов создания виртуальной машины Windows Server в Azure. Создание виртуальной машины через портал управления Azure и PowerShell, вероятно, являются двумя наиболее популярными вариантами. Обязательно ознакомьтесь с этим руководством, чтобы узнать, как это сделать через портал. Для целей этого поста я сделаю это через PowerShell.

$img = Get-AzureVMImage `
    | where { ( $_.PublisherName -ilike "Microsoft*" -and $_.ImageFamily -ilike "Windows Server 2012 Datacenter" ) } `
    | Sort-Object -Unique -Descending -Property ImageFamily `
    | sort -Descending -Property PublishDate `
    | select -First(1)
 
$vmConfig = New-AzureVMConfig -Name "sql-1" -InstanceSize Small -ImageName $img.ImageName |
    Add-AzureProvisioningConfig -Windows -AdminUsername "[admin-username-here]" -Password "[admin-password-here]"
 
New-AzureVM -ServiceName "SQLServerVMTemplate" -VMs $vmConfig -Location "East US" -WaitForBoot


2. Загрузите установочный носитель SQL Server

Создав базовую виртуальную машину Windows Server 2012, мы можем подготовиться (подготовить sysprep) к установке SQL Server. Для этого нам нужно установить установочный носитель SQL Server на компьютер. Самый простой способ сделать это — использовать хранилище BLOB-объектов Azure.

  1. Загрузите ISO-файл SQL Server в хранилище BLOB-объектов Azure.
  2. Удаленный рабочий стол (RDP) в базовую виртуальную машину
  3. Из виртуальной машины загрузите ISO-файл SQL Server на локальный диск
  4. Подключите ISO-файл SQL Server к виртуальной машине
  5. Скопируйте содержимое ISO (не сам файл ISO) на диск C: \ виртуальной машины. Например, используйте C: \ sql

Файлы носителя установки SQL Server необходимо скопировать на локальный диск C :, чтобы его можно было использовать позднее для завершения установки SQL Server (при подготовке фактического экземпляра виртуальной машины SQL Server).


3. Запустите программу установки SQL Server, чтобы подготовить образ

Чтобы подготовить (sysprep’d) образ виртуальной машины SQL Server (который мы можем использовать в качестве шаблона для будущих виртуальных машин), нам нужно запустить установку SQL Server и дать ему указание подготовить образ, а не запускать полную установку. Простой способ сделать это с помощью файла конфигурации SQL Server, пример которого я включил ниже.

ConfigurationFile.ini

;SQL Server 2012 Configuration File
[OPTIONS]
; Specifies a Setup workflow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.
ACTION="PrepareImage"
; Detailed help for command line argument ENU has not been defined yet.
ENU="True"
; Parameter that controls the user interface behavior. Valid values are Normal for the full UI, AutoAdvance for a simplified UI, and EnableUIOnServerCore for bypassing Server Core setup GUI block.
;UIMODE="Normal"
; Specifies setup not display any user interface.
;QUIET="False"
; Specifies setup to display progress only, without any user interaction.
QUIETSIMPLE="True"
; Specifies whether SQL Server Setup should discover and include product updates. The valid values are True and False or 1 and 0. By default SQL Server Setup will include updates that are found.
UpdateEnabled="True"
; Specifies features to install, uninstall, or upgrade. The list of top-level features include SQL, AS, RS, IS, MDS, and Tools. The SQL feature will install the Database Engine, Replication, Full-Text, and Data Quality Services (DQS) server. The Tools feature will install Management Tools, Books online components, SQL Server Data Tools, and other shared components.
FEATURES=SQLENGINE
; Specifies the location where SQL Server Setup will obtain product updates. The valid values are "MU" to search Microsoft Update, a valid folder path, a relative path such as .\MyUpdates or a UNC share. By default SQL Server Setup will search Microsoft Update or a Windows Update service through the Window Server Update Services.
UpdateSource="MU"
; Displays the command line parameters usage
HELP="False"
; Specifies that the detailed Setup log should be piped to the console.
INDICATEPROGRESS="False"
; Specifies that Setup should install into WOW64. This command line argument is not supported on an IA64 or a 32-bit system.
X86="False"
; Specifies the root installation directory for shared components.  This directory remains unchanged after shared components are already installed.
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
; Specifies the root installation directory for the WOW64 shared components.  This directory remains unchanged after WOW64 shared components are already installed.
INSTALLSHAREDWOWDIR="C:\Program Files (x86)\Microsoft SQL Server"
; Specifies the Instance ID for the SQL Server features you have specified. SQL Server directory structure, registry structure, and service names will incorporate the instance ID of the SQL Server instance.
INSTANCEID="MSSQLSERVER"
; Specifies the installation directory.
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"

В этом процессе есть два этапа:

  1. Скопируйте файл ConfigurationFile.ini (с локального ПК) в то же место, где находится установочный носитель SQL Server (например, c: \ sql ) на базовой виртуальной машине.
  2. Запустите программу установки SQL Server, чтобы подготовить образ. В командной строке (на базовой виртуальной машине) перейдите в папку C: \ sql и затем выполните следующую команду:
Setup.exe /ConfigurationFile=ConfigurationFile.ini /IAcceptSQLServerLicenseTerms=true


4. Настройте Windows для завершения установки SQL Server.

На этом этапе базовая виртуальная машина должна иметь «установку» SQL Server, которая не завершена полностью. Биты SQL Server имеются, но они не настроены для полной установки сервера. , , по крайней мере пока. Окончательная конфигурация SQL Server будет иметь место, когда экземпляр виртуальной машины (основой которой является этот шаблон / образ) подготовлен и загружается в первый раз. Это достигается с помощью файла CMD со следующим содержанием:

@ECHO OFF && SETLOCAL && SETLOCAL ENABLEDELAYEDEXPANSION && SETLOCAL ENABLEEXTENSIONS
REM All commands will be executed during first Virtual Machine boot
"C:\Program Files\Microsoft SQL Server\110\Setup Bootstrap\SQLServer2012\setup.exe" /QS /ACTION=CompleteImage /INSTANCEID=MSSQLSERVER /INSTANCENAME=MSSQLSERVER /IACCEPTSQLSERVERLICENSETERMS=1 /SQLSYSADMINACCOUNTS=%COMPUTERNAME%\Administrators /BROWSERSVCSTARTUPTYPE=AUTOMATIC /INDICATEPROGRESS /TCPENABLED=1 /PID="[YOUR-SQL-SERVER-PRODUCT-ID-HERE]"
  1. На локальном ПК сохраните файл как SetupComplete2.cmd
  2. RDP / войти в базу ВМ
  3. Скопируйте файл SetupComplete2.cmd из локального файла ПК в папку c: \ Windows \ OEM на базовой виртуальной машине.
  4. Измените значение SQLSYSADMINACCOUNTS на значение учетной записи администратора, созданной на виртуальной машине (или еще лучше — локальной учетной записи группы администраторов).
  5. При необходимости укажите значение идентификатора продукта (PID) для SQL Server.

При первом запуске Windows на новом экземпляре виртуальной машины автоматически запускается файл SetupComplete2.cmd. Он вызывается файлом SetupComplete.cmd уже на машине.

VM-изображения setupcomplete


5. Захватите изображение и добавьте его в галерею изображений виртуальной машины Azure.

На этом этапе была создана базовая виртуальная машина SQL Server, и была заложена основа для завершения установки. Теперь пришло время создать образ виртуальной машины из базовой виртуальной машины, а затем выполнить sysprep и захватить базовую виртуальную машину. Пожалуйста, следуйте руководству о том, как захватить виртуальную машину Windows для использования в качестве шаблона .


6. Создайте новую виртуальную машину, используя пользовательский образ SQL Server.

С новым настраиваемым шаблоном образа виртуальной машины, доступным в галерее образов виртуальной машины, вы можете подготовить новый экземпляр виртуальной машины с помощью этого настраиваемого шаблона. После первой загрузки вновь подготовленная виртуальная машина должна завершить полную установку SQL Server, как указано в файле SetupComplete2.cmd. Пожалуйста, следуйте руководству по созданию пользовательской виртуальной машины  для получения дополнительной информации о создании виртуальной машины из шаблона.


Заключительные мысли

Одна из странностей, которые я заметил при подготовке базового образа SQL Server, заключается в том, что невозможно было подготовить образ с помощью SQL Server Management Studio (SSMS). Мне нужно будет выполнить установку после создания нового экземпляра виртуальной машины. Не сложно, но отнимает много времени (раздражает, если делать это на нескольких экземплярах виртуальных машин). Позже я узнал , что SQL Server 2012 накопительное обновление 1 делает  позволяет для подготовки образа SQL Server с установленным SSMS. Я включил ссылку ниже, которая описывает процесс создания образа SQL Server с CU1.

В конце концов, этот процесс не так уж и сложен. Кропотливый? Да! Худшей частью (по крайней мере для меня) было просто понимание того, как работает установка SQL Server и процесс sysprep. Как только я обернулся вокруг этого, процесс стал намного более плавным.


Полезные ресурсы

Пока я изучал, как создать собственный образ виртуальной машины SQL Server, мне очень помогли следующие ресурсы:

Я хотел бы поблагодарить Скотта Кляйна за помощь в проверке этих шагов. Его помощь была чрезвычайно ценной, чтобы убедиться, что я делаю это правильно.