• 【虚拟机-存储迁移】存储账户之间转移虚拟机


    Azure 中一个常见的任务就是将虚拟机从一个存储账号转移到另一个。在我们深入了解这些步骤之前,简要的回顾一下 Azure 虚拟机是如何被创建的。当您在创建一台 Azure 虚拟机时,有两个服务会协同工作来创建该虚拟机:计算和存储。在存储方面,Azure 存储服务会在您的一个账户中创建一个 VHD。该 VHD 的物理节点是存储在您指定用于放置虚拟机的区域。在计算方面,我们在第二个群集中找到一个物理节点用于放置您的虚拟机。当 VM 在该群集中启动时,它会和存储服务创建连接并且从该 VHD 启动。当创建一个虚拟机时,我们要求您创建该 VM 时的 VHD 所位于的存储账户在同一区域,这是为了确保当虚拟机和存储账户通讯时能够保持性能一致性。

    region

    有了这个背景之后,让我们通过以下步骤将虚拟机从一个区域转移到另一个:

    1. 停止虚拟机
    2. 将 VHD blob 从源区域的存储账户复制到目标区域的存储账户
    3. 通过该 blob 创建虚拟机磁盘
    4. 从该磁盘启动虚拟机

    停止虚拟机

    在管理门户界面,选择您需要转移的虚拟机,在控制菜单中选择 关闭。

    ShutdownVm

    或者使用 Azure PowerShell cmdlet 来完成相同的操作:

     
    $servicename = "KenazTestService"
    $vmname = "TestVM1"
    Get-AzureVM -ServiceName $servicename -Name $vmname | Stop-AzureVM
    

    当您进行复制操作时,一个必要的步骤是关闭虚拟机以保证文件系统的一致性。Azure 目前还不支持虚拟机的实时转移。该操作意味着您在将一个专用的 VM 从一个区域转移到另一个 。如果您想要通过一个通用的映像创建 VM ,在虚拟机停止之前使用系统准备工具(sys-prep)对映像进行一般化处理。

    复制 VHD blob

    Azure 存储服务提供了将 Blob 从一个存储账户移动到另一个的功能,我们需要执行以下步骤来完成该操作:

    1. 确定源存储账户信息;
    2. 确定目标存储账户信息;
    3. 确保目标存储账户中存在目标容器;
    4. 执行 Blob 复制操作。

    注意:在位于不同区域的存储账户之间复制 blob 时,根据该 blob 的大小会出现花费一个小时或更长的时间的情况。执行该操作最便捷的方式是通过 Azure PowerShell:

     
    Select-AzureSubscription "kenazsubscription" 
    
    # VHD blob to copy #
    $blobName = "KenazTestService-TestVM1-2014-8-26-15-1-55-658-0.vhd" 
    
    # Source Storage Account Information #
    $sourceStorageAccountName = "kenazsa"
    $sourceKey = "MySourceStorageAccountKey"
    $sourceContext = New-AzureStorageContext –StorageAccountName $sourceStorageAccountName -StorageAccountKey $sourceKey  
    $sourceContainer = "vhds"
    
    # Destination Storage Account Information #
    $destinationStorageAccountName = "kenazdestinationsa"
    $destinationKey = "MyDestinationStorageAccountKey"
    $destinationContext = New-AzureStorageContext –StorageAccountName $destinationStorageAccountName -StorageAccountKey $destinationKey  
    
    # Create the destination container #
    $destinationContainerName = "destinationvhds"
    New-AzureStorageContainer -Name $destinationContainerName -Context $destinationContext 
    
    # Copy the blob # 
    $blobCopy = Start-AzureStorageBlobCopy -DestContainer $destinationContainerName `
                            -DestContext $destinationContext `
                            -SrcBlob $blobName `
                            -Context $sourceContext `
                            -SrcContainer $sourceContainer
    

    执行以上命令将会开始从您的源账户向目标账户进行 blob 的复制操作,此时,您可能需要稍作等待以确保 blob 能够完全的复制。如您需要查看该操作的状态,您可以使用以下命令。

     
    while(($blobCopy | Get-AzureStorageBlobCopyState).Status -eq "Pending")
    {
        Start-Sleep -s 30
        $blobCopy | Get-AzureStorageBlobCopyState
    }
    

    }

    当完成 blob 复制操作后,该状态将变为“成功”。更详细的 VHD 拷贝操作示例可以参考 “Azure 虚拟机: 跨存储账户拷贝 VHDS” 。

    使用 AzCopy 复制 blob

    另一种方式可以使用 AzCopy 工具(下载地址),下面同样是存储账户间 blob 复制的命令:

     
    AzCopy https://sourceaccount.blob.core.chinacloudapi.cn/mycontainer1 https://destaccount.blob.core.chinacloudapi.cn/mycontainer2 /sourcekey:key1 /destkey:key2 abc.txt
    

    关于如何在不同场景使用 AzCopy 工具更详细的信息,请查看“使用 AzCopy 命令行工具入门”。

    创建虚拟机磁盘

    此时,您复制到目标存储账户中的 blob 仍然只是一个 blob, 为了可以从该 blob 启动,您需要通过该 blob 创建一个虚拟机磁盘。导航至虚拟机 磁盘 部分并且选择 创建。

    注意:以上指令是特定的用于专用的 VMs,如您想要使该 VHD 作为映像来加载,您需要重启 VM, 使用 sysperp 工具一般化处理,复制 blob,然后作为映像添加(而非磁盘)。

    VirtualMachineDisks

    在 VHD URL 选项处选择目标容器中复制的 blob,勾选选项“ VHD 包含操作系统”,这向 Azure 表明您所创建的磁盘对象是用作 OS 磁盘使用的,而非作为数据磁盘使用。

    CreateVHD

    注意:如果遇到该错误提示“ Blob 发生租约冲突….”,返回上一步确认该 blob 复制操作已经完成。

    LeaseCOnflict

    或者,您可以通过 执行 PowerShell 命令来进行相同的操作。

     
    Add-AzureDisk -DiskName "myMigratedTestVM" `
                -OS Linux `
                -MediaLocation "https://kenazdestinationsa.blob.core.chinacloudapi.cn/destinationvhds/KenazTestService-TestVM1-2014-8-26-16-16-48-522-0.vhd" `
                -Verbose
    

    以上步骤完成后,该磁盘将出现在虚拟机 磁盘 部分。

    创建虚拟机

    此时,您可以使用之前创建好的磁盘来创建虚拟机,在经典管理门户中,选择从库中创建虚拟机并且在我的磁盘下选择您创建好的磁盘。

    注意:如果您转移的虚拟机有一个已经配置好的存储池(或者需要磁盘驱动器的字母排序保持不变),记录下 VHD 映射到源 VM 的 LUN 编号,并且确保数据磁盘在目标虚拟机上被附加到了同样的 LUN 编号上。

    LinuxVM_thumb

    现在虚拟机已经在目标存储账户中运行了。

    立即访问http://market.azure.cn

  • 相关阅读:
    Service Broker between two instance
    第一次调用Web service响应速度慢的解决办法
    MVC静态化
    WinFrom Exception Handler
    The difference for ROW_NUMBER/RANK/DENSE_RANK/NTILE
    字符编码
    TSQL中的参数与变量
    Entity Framework Power Tool
    Use ActionFilterAttribute to check user logging
    SiteFactory技术实现QQ群19452522用户交流贴
  • 原文地址:https://www.cnblogs.com/zangdalei/p/7422649.html
Copyright © 2020-2023  润新知