Quantcast
Viewing all articles
Browse latest Browse all 36188

Миграция БД на Windows Azure SQL VM через виртуальный диск

 

Предыдущий способ переноса резервной копии базы с локального компьютера на виртуальную машину с SQL Server в Облаке использовал Azure Storage, который не является NTFS-видимым. Таким образом, перед восстановлением бэкап базы нужно было скопировать из Azure Storage на виртуальный диск, чтобы установленный на виртуалке SQL Server его увидел. В случае БД значительного объема это ведет к неоправданному расходу пространства в Azure Storage и, как следствие, к дополнительным затратам: сначала бэкап загружается в облачное хранилище, а затем копируется в vhd, который хранится там же. Чтобы избежать этих затрат, в этой статье мы рассмотрим иной способ. Локально будет создан отдельный vhd, на котором будет размещен бэкап базы. Затем vhd будет загружен в Azure Storage и приаттачен в качестве дополнительного диска облачной виртуалки. С него будет произведено восстановление резервной копии.

Чтобы локально создать виртуальный диск, заходим в Administrative Tools\Computer Management\Disk Management и выбираем пункт Create VHD из контекстного меню:

Image may be NSFW.
Clik here to view.
image001

Рис.1

Указываем полный путь к vhd-файлу, который будет создан, желаемый размер, достаточный для того, чтобы вместить резервную копию базы, а также - будет ли этот размер фиксированный или динамически расширяемый:

Image may be NSFW.
Clik here to view.
image002

Рис.2

Кликаем по диску и выбираем из контекстного меню пункт "Инициализировать диск":

Image may be NSFW.
Clik here to view.
image003

Рис.3

Image may be NSFW.
Clik here to view.
image004

Рис.4

Создаем том:

Image may be NSFW.
Clik here to view.
image005

Рис.5

Image may be NSFW.
Clik here to view.
image006

Рис.6

и форматируем его под NTFS:

Image may be NSFW.
Clik here to view.
image007

Рис.7

Созданный vhd начинает видеться как дополнительный диск локальной машины. Копируем на него бэкап базы:

Image may be NSFW.
Clik here to view.
image008

Рис.8

Для проверки созданный vhd можно добавить в качестве дополнительного диска к локальной виртуалке. На всякий случай напомню, что в Windows 8 технология виртуализации Hyper-V (включая средство управления Hyper-V Manager) поддерживается, что называется, из коробки. Не требуется устанавливать Hyper-V Server отдельно и администрировать при помощи RSAT, как было в случае Windows 7.

У меня по случаю имеется локальная виртуальная машина, которой я делаю shutdown и присоединяю дополнительный диск:

Image may be NSFW.
Clik here to view.
image009

Рис.9

Image may be NSFW.
Clik here to view.
image010

Рис.10

Перед стартом виртуальной машины vhd требуется детачить в Disk Management на хосте:

Image may be NSFW.
Clik here to view.
image011

Рис.11

Убедившись, что содержание диска нормально читается на локальной виртуальной машине:

Image may be NSFW.
Clik here to view.
image012

Рис.12

гасим ее, отсоединяем диск, нажав кнопку Remove на Рис.10, и загружаем диск в Azure Storage. Проще всего это сделать при помощи утилиты csupload, входящей в состав Windows Azure SDK, который мы поставили в предыдущей статье. Перед загрузкой предварительно требуется создать сертификат X.509 v3, как указано в документации. Для этого я воспользуюсь утилитой makecert, которая ставится, например, в составе Visual Studio:

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\makecert.exe" -sky exchange -r -n "CN=MyCert" -pe -a sha1 -len 2048 -ss My "c:\Temp\MyCert.cer"

Скрипт 1

Image may be NSFW.
Clik here to view.
image013

Рис.13

Теперь сертификат нужно положить в Облако. Заходим в Azure Management Portal, кликаем на Settings в левой панели, внизу нажимаем кнопку Upload:

Image may be NSFW.
Clik here to view.
image014

Рис.14

Находим файл сертификата c:\Temp\MyCert.cer, созданный в Скрипте 1 и указываем его для загрузки. Сертификат успешно загружается:

Image may be NSFW.
Clik here to view.
image015

Рис.15

Для загрузки vhd в Azure Storage должен иметься Storage Account. Как минимум, один был создан автоматически на этапе создания виртуальной машины, а второй мы создали в предыдущей статье для загрузки файла бэкапа. Не имеет значения, какой из них использовать. Я возьму последний (tststorage), в котором создам приватный контейнер myvhds, чтобы положить туда свежесозданный виртуальный диск с бэкапом базы. Напомню, что заглавные буквы в названии контейнера не воспринимаются.

Image may be NSFW.
Clik here to view.
image016

Рис.16

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

"C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\bin\csupload.exe" Set-Connection "SubscriptionID=1145d36f-60d2-4db3-91e7-7cd730599e27;CertificateThumbprint=8BC0B6D0C1A010CABECF558612A21D2CCDFD679F;ServiceManagementEndpoint=https://management.core.windows.net"

Скрипт 2

Параметр ServiceManagementEndpoint является константой. Основными параметрами при формировании строки соединения выступают SubscriptionID и CertificateThumbprint. Их можно скопировать в свойствах сертификата на Рис.15. Ширины колонок раздвигаются и, при необходимости, скроллируются по горизонтали. В непосредственно загрузке диска тоже все понятно: откуда берем vhd-файл (LiteralPath), куда кладем (Storage Account\контейнер блобовского сториджа - Destination) и как обзываем (Label). Параметр Add-Disk указывает, что загружается именно диск, а не, скажем, образ. В параметре OS - что это будет диск для виртуальной машины Windows, а не Linux. По умолчанию, предполагается, естественно, Windows. Подробно ознакомиться с параметрами утилиты csupload можно в документации.

"C:\Program Files\Microsoft SDKs\Windows Azure\.NET SDK\2012-06\bin\csupload.exe" Add-Disk -Destination "https://tststorage.blob.core.windows.net/myvhds/aaa_disk" -Label aaa_disk -LiteralPath "c:\temp\aaa.vhd" -OS Windows

Скрипт 3

Скрипт без проблем отрабатывает, и, если бы еще шевелилась сетка с утра, все было бы вообще замечательно.

Image may be NSFW.
Clik here to view.
image017

Рис.17

После загрузки свежеположенный диск можно видеть в Azure Management Portal -> Virtual Machines -> Disks:

Image may be NSFW.
Clik here to view.
image018

Рис.18

Остается присоединить его к облачной виртуалке. Виртуалку при этом можно не гасить. В верхней строке переключаемся на Virtual Machine Instances, в нижней жмем Attach:

Image may be NSFW.
Clik here to view.
image019

Рис.19

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

Image may be NSFW.
Clik here to view.
image020

Рис.20

Ждем, когда статус виртуалки сменяется с Running (Updating) на просто Running и соединяемся с ней по удаленному RDP-подключению (см. Connect в нижней строке на Рис.19). Видим диск F: с Volume Label =  aaa, как заказывали на Рис.7, а на нем резервную копию базы AdventureWorks2012.bak:

Image may be NSFW.
Clik here to view.
image021

Рис.21

с которой восстанавливаемся:

Image may be NSFW.
Clik here to view.
image022

Рис.22

после чего диск aaa нам больше не нужен. Отсоединяем его аналогично подключению (кнопка Detach Disk в нижней строке на Рис.19) и удаляем из дисков вместе с соответствующим ему vhd-файлом (не из Storage), нажав кнопку Delete Disk -> Delete the associated VHD (Рис.18), чтобы не платить за лишнее место.

Алексей Шуленин

Image may be NSFW.
Clik here to view.

Viewing all articles
Browse latest Browse all 36188

Trending Articles