Windows Azure 实操 —— 迁徙本地服务器到Azure

Windows Azure 实操 —— 迁移本地服务器到Azure
博客地址 http://blog.csdn.net/foxdave
注意:如果你是第二代虚拟机,那就别看这个了,老老实实在Azure上重新创建吧,Azure不支持第二代虚拟机。
写在之前,对Azure基本不了解只知道名字,完全是工作需要,正好也是微软的东西,也就没什么抵触心理,况且还有微软的朋友帮忙协助,正好把握机会好好了解一下。虽然SharePoint都学习不过来,但相关联的东西做一定程度的了解也是好的。感谢之前汀栎和克明对我的帮助,克明给我的课程文档让我对Azure有了整体的认识,汀栎FYI给我的文章让我对迁移到大概过程有了把握,同时也感谢海峰哥的帮助。
本周一我刚开始正八经的了解和使用Azure,所以如果哪里错了,各位大神轻拍。本篇也是对我这几天大致工作的一个总结。虽然最后都白费了。。。但如果不是第二代虚拟机,肯定好使没有问题,所以记录下来供参考。

1. 创建一个虚拟网络
Windows Azure 实操 —— 迁徙本地服务器到Azure
Windows Azure 实操 —— 迁徙本地服务器到Azure
2. 创建一个存储账户
之后在创建好的存储账户下新建一个容器用来保存上传到VHD,把容器的URL记录下来之后要用。
Windows Azure 实操 —— 迁徙本地服务器到Azure
Windows Azure 实操 —— 迁徙本地服务器到Azure

3. 创建一个云服务
Windows Azure 实操 —— 迁徙本地服务器到Azure
Windows Azure 实操 —— 迁徙本地服务器到Azure

前期创建的这几个东西在之后创建虚拟机的时候都会用得到的,因为自动生成的那个名字没什么规律,还是自己创建了吧。

4. 将本地Hyper-V的vhdx转换为vhd
在Hyper-V服务器打开PowerShell。输入如下命令:
Convert-VHD –Path “C:\Hyper\JXT-AD\Virtual Hard Disks\JXT-AD.vhdx” –DestinationPath c:\VHD-HyperV\JXT-AD.vhd
Convert-VHD –Path “C:\Hyper\JXT-DB\Virtual Hard Disks\JXT-DB.vhdx” –DestinationPath c:\VHD-HyperV\JXT-DB.vhd
Convert-VHD –Path “C:\Hyper\JXT-SP\Virtual Hard Disks\JXT-SP.vhdx” –DestinationPath c:\VHD-HyperV\JXT-SP.vhd

5. 配置Azure PowerShell到云端Azure订阅的远程管理
PS:Azure PowerShell的相关配置在目录\%appdata%\Windows Azure Powershell,如果乱了就删了重新弄。
(1) 首先下载Azure命令行工具(即Azure PowerShell)
下载地址:http://www.windowsazure.cn/downloads/#cmd-line-tools
(2) 访问https://manage.windowsazure.cn/publishsettings/下载publishSettingFile
(3) 在Powershell中执行Import-AzurePublishSettingsFile将下载到本地的publishiSettingFile导入。命令格式形如:
Import-AzurePublishSettingsFile -PublishSettingsFile C:\MyTest.publishsettings
(4) 在Powershell中执行命令
Get-AzureStorageAccount | Select StorageAccountName
获得当前订阅的所有存储账户名称。
执行命令
Set-AzureSubscription -SubscriptionName <你的订阅名称(用记事本打开下载的publishSettingFile文件可查看Name)> -CurrentStorageAccount jteststorage(你的存储账户名称)
将某个存储账户设置为当前存储账户,以后需要执行存储空间的指令时,就可将相关的文件放到当前设置的存储账户中。如创建VM时,需要将VM的文件放置到存储空间。

6. 将本地转换完的VHD文件上传到Azure存储空间
在Powershell执行Add-AzureVHD命令将VHD文件上传到Azure的存储账户。命令格式如下:
Add-AzureVHD -Destination <你的存储账户下某个容器的URL/目的端VHD(即文件名)> -LocalFilePath “C:\MyTest.vhd” -NumberOfUploaderThreads 5
Add-AzureVHD命令可以自动将动态大小的VHD转换为固定大小的;对VHD的MD5 HASH进行分析,识别空块,只传输实际容量数据;自动将Blob Type设置为Page Blob。
Windows Azure 实操 —— 迁徙本地服务器到Azure
上传完之后有完成提示,并可在Azure管理界面的存储-容器中看到。Windows Azure 实操 —— 迁徙本地服务器到Azure
在管理界面中看到上传完的大小是127G,这个是默认的大小,跟VHD本身的大小无关。

7. 在Powershell执行Add-AzureDisk命令将VHD文件转换为Windows Azure VM OS磁盘,命令格式如下:
Add-AzureDisk -OS Windows -MediaLocation “https://jteststorage.blob.core.chinacloudapi.cn/jtestcontainer/JXT-AD.vhd” -DiskName “JXT-AD”
Windows Azure 实操 —— 迁徙本地服务器到Azure
Windows Azure 实操 —— 迁徙本地服务器到Azure
不执行命令也可以使用Azure管理控制台中的创建Disk进行配置。

8. 创建Azure上的VM
选择虚拟机->创建虚拟机->从库中,选择并填写之前创建的信息一直到完成点击创建。
Windows Azure 实操 —— 迁徙本地服务器到Azure
Windows Azure 实操 —— 迁徙本地服务器到Azure
Windows Azure 实操 —— 迁徙本地服务器到Azure
创建完成后也就完成了迁移,需要的是虚拟机的D盘是临时存储盘,所以不要存储有用的数据。

遇到的问题:
1. 基于上传到VHD创建的虚拟机无法远程连接。
该问题只是现象,真实原因是第二代系统Azure根本就不支持!做到这里我很崩溃,意味着我之前的准备没什么用了,只能在Azure上重建虚拟机重新配置了。
2. DB服务器无法上传成功,报错信息:
Upload failed with exceptions: Elapsed time for upload: 00:28:51
当NumberOfUploaderThreads参数过大的话就可能出现此问题,把它调小点儿再试一下可能就好了。


最后在吐槽一下Hyper-V:
转换完的第二代的vhd   新建虚拟机第一代的话就启动不了,出错
选第二代的话  就没法选择vhd。。。


新增:关于服务器IP的处理,参加张磊的blog