如何将虚拟机迁移至新的存储账户

Contributors: Blair Chen, Sun Wei, Liu Qing 我们在使用Azure的过程中,有时会需要把Azure虚拟机的相关VHD文件从现有的存储账户迁移到其它存储账户。比如说,当现有的存储账户下面已经存在超过了40个活跃使用的VHD文件,而由于每个VHD文件作为一个Azure Blob对象都可以产生上至每秒500个请求,导致单个存储账户的每秒20000个请求的上限可能会被超出,从而触发限制的机制。在这种情况下,建议需要将这个存储账户下的某些虚机尽快迁移至其它的存储账户,以免触发限制机制。 在讨论如何把虚拟机的VHD从一个存储账户迁移到另外一个存储账户之前,我们先来回顾一下Azure虚拟机的一些基本概念。首先,对于Azure IaaS的虚拟机在设计上是把计算和存储是分离开的。在创建虚拟机的时候,所有持久VHD(系统盘,数据盘VHD文件)都是创建在Azure存储里,而不是直接创建在虚机所处于的物理节点上。虚拟机启动的时候,会直接从存储账户里的VHD文件启动引导操作系统,存储账户中VHD文件本质上是一个blob文件。其次,创建VM的时候,Azure只允许把VHD创建在和虚拟机在同一个区域(比如北京或者上海的数据中心)的存储里,这主要是为了保证计算节点和存储之间的网络延迟尽可能小,从而保证虚拟机的IO性能。 迁移之前的准备计划 如果现有环境已经是生产环境,那么在迁移之前需要有周全的准备和计划,以确保最小化业务系统的中断时间。下面列出了在迁移之前需要检查以及准备的一些事项。 1. 梳理虚机迁移的源存储账户和目标存储账户的对应列表。 首先需要基于上述限制指标梳理一个详细的迁移列表,包括哪些虚机需要迁移,每台虚机迁移的源存储账户以及目标存储账户。如果目标存储账户还不存在,那么可以把目标存储账户先创建好备用。 2. 确认现有的部署架构是否需要虚机的内部IP地址需要保持不变。 由于在虚机的迁移过程中会删除现有的虚机,然后基于迁移至目标存储账户的VHD文件重新创建虚机,在这个过程中虚机的内部IP地址有可能会改变。所以需要确认现有的部署架构中是否对现有虚机的IP地址有任何依赖关系,比如是否使用了内部IP地址进行一些应用层的配置,IP地址的改变是否会影响应用的某些连接等等。 如果需要内部IP地址保持不变,可以在基于迁移后的VHD文件创建虚机时使用静态IP地址来确保虚机能够沿用之前的IP地址。 3. 确认现有的部署架构是否需要虚机的公有虚拟IP(VIP)地址保持不变。 如果需要迁移的虚机是其所属的云服务下面的唯一虚机,那么迁移的过程可能会导致这台虚机及其所属的云服务的公有虚拟IP地址变化。主要因为在这台虚机被删除掉后并且还未被重新创建之前这个时间段内,其所属云服务下面没有挂载任何虚机,这个状态下云服务的VIP资源将会被释放。而当新的虚机在这个云服务下重新被创建后,新的VIP则会分配给云服务。 如果确认需要保持现有的VIP不变,比如说某些客户端不是用DNS域名而是使用IP地址来指向Azure中的云服务,那么可以在迁移中增加一个步骤,比如在迁移这类虚机之前先在其所属的云服务下面创建一个A0型号的虚机。这样来确保在整个迁移过程中这个云服务下面始终至少有一台虚机,这样VIP资源就不会被释放,公有IP地址也就不会改变。在迁移完成后即可删除这个临时的A0虚机。 4. 检查并导出现有虚机的所有属性及配置信息。 通常虚机的所有属性及配置在迁移前后都是需要保持不变的,比如虚机名称、大小型号、开放的端口、所属的云服务、地缘组、虚拟网络等。所以建议导出虚机、虚拟网络的所有属性及配置信息至XML文件以保存记录。  5. 准备回滚计划及脚本。 建议要准备回滚计划,以备万一迁移失败或者时间过长无法在运维窗口时间内完成时,能够快速回滚至原有状态。迁移之前应该准备好回滚的脚本,确保虚机能够随时恢复至原有状态,避免出现预期外的系统中断。 6. 测试存储账户之间的VHD拷贝速度。 在存储账户之间拷贝文件是一个异步的操作,没有速度的SLA。但通常情况如果源和目标存储账户属于同一个物理集群的话,速度一般还是比较快的。根据经验,通常可以在10秒到3分钟之间完成一个100GB的VHD文件拷贝。 但是,如果源和目标存储账户不在同一个物理集群中,那个拷贝文件就可能会比较慢,这就需要运维窗口有足够的时间来完成迁移。同时,也可以用以下方法来控制迁移的时间长度。 a) 如果源存储账户属于一个地缘组,那么可以把目标存储账户也创建在同一个地缘组当中。这样可以确保源和目标存储账户属于同一个集群,从而避免跨集群拷贝文件可能会慢的问题。b) 也可以进行应用层面的迁移,比如将应用以及相关的数据从现有的虚机中迁移出来,重新部署到新的虚机中。  7. 在生产环境执行迁移之前,先用一台测试虚机测试迁移脚本。 在迁移任何生产环境的虚机之前,建议使用测试虚机对测试脚本进行完整的测试。 8. 准备一台Azure虚机用来执行迁移脚本,避免执行脚本环境的网络问题。 有时用户自己的本地网络可能会有各种限制以及不稳定的问题,这可能会导致迁移脚本在执行过程中由于网络的临时不稳定或丢包造成迁移的中断,造成不必要的麻烦。所以,建议准备一台Azure虚机配置好相关的powershell环境,用来执行迁移脚本。 9. 检查确保所有虚机中的应用、数据库以及用户数据都已经做好备份。   虚机迁移步骤 如果需要迁移的虚机是生产环境,建议按照顺序逐一迁移虚机,确保一台虚机迁移成功没有问题后再迁移下一台。如果出现问题或失败,可以立即执行回滚脚本将虚机恢复至其原有状态,最小化系统中断时间。 下面是一个单台虚机的迁移步骤说明供参考。注意由于每个用户的环境和需求不同,建议可以根据具体情况参考下述步骤进行补充和调整。 1. 导出虚拟机机配置文件 迁移的第一个准备工作是把虚拟机的配置文件导出,这主要是为了后面能用同样的配置信息把虚拟机重新创建出来。下面是导出虚拟机配置文件的powershell代码: $sourceVM = Get-AzureVM –ServiceName $cloudServiceName –Name $vmName $sourceVM | Export-AzureVM -Path $vmConfigurationPath 2. 远程登陆进入虚机OS,…


如何在CentOS 5.x 中安装Windows Azure Linux Agent (WALA)

在今天的这一个章节中,我们主要讨论在CentOs 5.x 中如何安装Windows Azure Linux Agent 2.11 (简称WALA)。如果你是需要对CentOS 6.x 发行版本进行Windows Azure 基本镜像进行配置,请参考Azure 中文官网 “创建并上传包含 Linux 操作系统的虚拟硬盘” 对应6.x 的相关步骤,在CentOS 5.x中进行Windows Azure Linux Agent 主要步骤和区别如下, 需要手工安装Python 2.6 以上版本 需要手工安装python-pyasn1 需要修改resource disk 类型为ext3 需要手工安装WALA (waagent -install) 准备 CentOS 5.x 客户虚拟机,您必须在本地有HyperV 功能的操作系统中完成特定的配置步骤才能使虚拟机在 Azure 中运行,如Windows 8.0 or Windows 2008 R2 或以上版本的Windows 操作系统 在 Hyper-V 管理器中,选择已经通过ISO镜像安装完成的虚拟机 单击“连接”以打开虚拟机窗口。使用root账号登录系统 通过运行以下命令卸载 NetworkManager # yum remove…


如何在Azure Websites中配置PHP从而改变系统默认时区

Azure Website为我们提供了可高度扩展的网站部署平台。由于Website是PaaS(平台即服务)层的服务,当用户把原有的PHP网站迁移到Azure Websites时,有一些配置方法与传统的方法不同。例如,在Azure Websites中,我们访问不到运行PHP引擎的服务器,也不能访问php.ini文件。 Azure websites提供的运行环境中,默认时区是UTC时间。对于中国区域的客户,我们往往希望通过date对象,直接得到GMT+8的时区。这时,我们需要在PHP应用的根目录下,创建.user.ini文件,并在其中指明: date.timezone=Asia/Chongqing 注意:添加.user.ini文件后,要重启Azure Websites。 这样,如果我们的PHP源代码如下: <html><head> <title>PHP Demo page</title></head><body>    <?php echo date(“r”);    ?></body></html> 上面的代码会得到下面的页面输出: 另: 一般来说,php.ini文件中的配置信息,只要不是System级别的配置项,我们都可以通过.user.ini文件来在应用程序的作用域里修改。这里(http://php.net/manual/en/ini.list.php) 是php.ini的配置项列表和作用级别。