
企业通用迁移上云过程随着云计算平台的飞速发展,云上IT资源在弹性、成本、丰富度方面越来越显示出它的优势。企业将线下的IT基础设施资产迁移上云越来越变成了一种趋势和潮流。在现代主流云厂商的迁移服务过程中,企业级客户一站式迁移上云的典型过程路径是:迁移前:资产发现、评估对现有IT服务资产进行发现评估,以便制定合适的迁移计划。如服务器系统使用服务器备份迁移工具,数据库采用DTS等,大数据采用闪电立方,其他应用如容器考虑容器镜像迁移等。迁移中:进度把控迁移过程中,会依次进行迁移测试演练、迁移实施,以及迁移过程进度把控。迁移后:业务验证跟踪迁移完成后,在云上进行业务交割。最终的迁移记录还可以保留方便跟踪。其中服务器系统数据作为现代企业IT资产中最重要的一环,也是本文所主要讨论的迁移上云对象。服务器迁移上云痛点然而服务器迁移上云从来都不是一个容易的工作。传统服务器迁移上云方式也需要大量手工操作完成,面临着诸多痛难点问题:操作麻烦、门槛高在服务器应用环境老旧、复杂的情况下,重新部署的成本非常之高。同时平迁的话也担心还原度,成功率低。IT运维开发人员如果对老旧系统不熟悉,也不敢轻易迁移。周期长、成本高一般情况下使用离线导入导出镜像的方式迁移,但这种方式如果迁移大量服务器耗时将会非常长,迁移过程中也容易因为网络原因中断,需要大量重复劳动。迁移消耗大量人力资源不说,数据导出导入耗时效率也低。效果差、影响业务就算费尽千辛万苦,把数据导入到云平台,但对云Guest OS规范标准不够熟悉,制作的系统镜像容易无法启动,或者出现诸多异常,影响正常业务运行,叫苦不迭。自动化迁移产品诞生针对上述痛点问题,为了简化用户上云过程,各个云平台厂商也提供了很多自动化的服务器迁移方式。例如AWS的SMS服务,Azure的Size Recovery等。阿里云也提供了一种自动化迁移产品:服务器迁移中心SMC。SMC支持全自动化迁移,可以让服务器迁移过程变得简单、快捷、有效,同时高性价比。作为一个合格的服务器迁移方式,它需要满足以下功能特点。高度成熟化首先需要适用各种迁移场景。支持系统盘+数据盘整体迁移,无需重新部署。同时兼容各个服务器系统平台,包括物理机、虚拟机以及各大云平台。基本覆盖所有主流Windows、Linux、32位、64位操作系统版本。高度自动化最好支持简单命令即可执行,迁移过程可以做到无人值守,降低使用门槛。从数据同步到数据处理,再到最后迁移结果的验证都可以自动化完成。同时为了大大减少迁移周期,需要支持自动定期增量同步的灵活方案。最好能按需按量迁移,节省成本。高度智能化提供自动检测、自适应修复的只能功能。能实现自动对源服务器进行迁移条件检测并自动提供修复方案,迁移完成后自动完成虚拟化驱动配置,系统初始化服务如cloud-init安装配置等,保障整体迁移效果,同时无需过多人力干预,最大程度减少人员投入。何为自动化迁移基础迁移功能介绍在谈自动化迁移之前,服务器迁移产品首先要满足一些基础迁移功能,这是自动化迁移能力之本。SMC作为上线3年、迭代超过70多个版本的服务器迁移产品,已经累积了相当多的迁移经验,同时沉淀出了很多强大的基础迁移功能。系统平台兼容性高支持物理机、虚拟机、各大云平台服务器,Any Platform To Alibaba Cloud。支持所有主流Windows/Linux操作系统版本支持主流的文件系统格式:如NTFS、EXT2/3/4、XFS、BTRFS等功能方案丰富灵活支持一次性迁移,增量迁移,块复制、文件复制混合迁移,按需迁移高效灵活支持公网传输,专线、VPN私网传输,适应各类复杂客户端源环境支持迁移到ECS镜像,迁移到目标实例,甚至迁移到容器镜像,满足各种迁移场景自动化迁移能力一览拥有了基础迁移功能之后,我们再来看看现代自动化迁移具体有哪些能力。当然这里还是以SMC产品为例,主要包含以下3个方面。迁移前:一键上传迁移源信息自动收集迁移源信息,便于分析评估,拟定迁移计划迁移中:一键启动迁移任务自动托管迁移全过程,无需人工干涉,迁移进度一目了然迁移后:一键验证迁移结果自动拉起迁移目标结果进行验证,快速跟踪迁移效果如果迁移产品满足了这些自动化迁移能力,我们就可以称之为一个合格的服务器迁移产品。**自动化迁移的正确姿势那么怎么能快速开始进行自动化迁移呢?自动化迁移的正确姿势是还是要从学走路开始,常规路径是先选一个简单好用的迁移产品,比如SMC,从熟悉常规迁移操作开始。常规迁移步骤准备工作要迁移到阿里云,首先要准备一个阿里云账户,确保一些条件已实名认证账户余额>=100元(用于创建临时迁移资源条件,实际花费可能是不到几毛钱)使用过或开通快照服务准备账号AK、SK,需要有AliyunSMCFullAccess权限一般迁移产品都会有一个直观易用的控制台操作面板,主要操作步骤分为在源服务器中操作和在控制台面板中操作两部分:源服务器操作登录到源服务器系统,部署对应版本的迁移客户端程序;而SMC客户端是绿色免安装的,而且非常轻量方便部署按提示运行迁移客户端程序即可;SMC提供console命令行版本和符合windows用户习惯的可视化界面版本控制台操作登录到迁移控制台入口,就可以选择已导入的迁移源,开始创建迁移任务配置好必要的任务参数,如目标区域,磁盘分区列表,目标类型等成功创建并启动后,找到已创建的任务,等待迁移完成即可迁移完成后,还可以使用一些方式验证迁移结果,比如用结果镜像去创建实例进行验证,或者如果迁移结果是一个目标实例,直接去目标实例验证即可;当然SMC还提供一种自动验证迁移结果的便捷功能,可以进行快速验证集成自动化迁移能力在熟悉了基础迁移功能之后,下一步就可以进阶使用到更高级的迁移能力:将迁移功能集成到自己的工具产品服务里去,为自己所用。成熟开放的迁移产品肯定会考虑到客户这个更高层次的需求,也就是二次开发能力,比如提供开放的OpenAPI接口,供客户自由集成使用。而SMC当然也不例外。使用SMC OpenAPI二次开发,配合云上云下各类运维工具,任何用户都可以轻易地集成SMC迁移功能实现自动化迁移能力。下面就是集成SMC自动化迁移能力的具体姿势。自动化导入迁移源使用运维工具如Ansible,下发自动化部署脚本到在迁移源服务器系统中运行,SMC客户端会在待迁移源服务器后台运行起来,同时获取迁移源Id等信息。Ansible Shell脚本代码示例:#!/bin/bash echo "Prepare Alibaba Cloud Migration Tool..." access_id=$1 secret_key=$2 # choose the right architure client tool word_bit=$(getconf WORD_BIT) long_bit=$(getconf LONG_BIT) architure="" if [ "$word_bit" == "32" ] && [ "$long_bit" == "64" ]; then architure=x86_64 else architure=i386 fi dest_dir=/smc/ download_url="https://p2v-tools.oss-cn-hangzhou.aliyuncs.com/smc/Alibaba_Cloud_Migration_Tool.zip" tools_path="$dest_dir"/Alibaba_Cloud_Migration_Tool_linux.zip # download client tools wget "$download_url" -O "$tools_path" # decompress client tools unzip "$tools_path" -d "$dest_dir" tool_tar_path=$(find ${dest_dir} -name "go2aliyun_client*${architure}.zip" | head -1) # decompress the right architure client tool unzip "$tool_tar_path" -d "$dest_dir" tool_dir=$(find ${dest_dir} -name "go2aliyun_client*${architure}" | head -1) echo "Run Alibaba Cloud Migration Tool..." exec_path="$tool_dir"/go2aliyun_client chmod +x "$exec_path" nohup $exec_path --accessid=$access_id --secretkey=$secret_key --nocheckversion --noenterkey & sleep 30s # get source id source_id=$(cat "$tool_dir"/Logs/go2aliyun_client*.log | grep Successfully | awk -F 'Successfully' {'print $1'} | awk -F '[' {'print $4'} | awk -F ']' {'print $1'})自动化创建并启动迁移任务使用SMC API调用脚本,指定迁移源Id等信息来创建并启动迁移任务,同时跟踪迁移任务进度直至完成,获取迁移结果镜像Id等信息。SMC支持多开发代码平台SDK:Python、Java、C#、Go等Python API调用代码示例:#!/usr/bin/env python #coding=utf-8 import json import time import uuid from aliyunsdkcore.client import AcsClient from aliyunsdksmc.request.v20190601 import CreateReplicationJobRequest from aliyunsdksmc.request.v20190601 import StartReplicationJobRequest from aliyunsdksmc.request.v20190601 import DescribeReplicationJobsRequest # 初始化AcsClient实例,设置地域ID及您的AccessKey信息 client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing') # 创建迁移任务 def create_replication_job(): #创建API请求,并设置参数, 如迁移源ID,磁盘分区大小,迁移任务名、任务描述 request = CreateReplicationJobRequest.CreateReplicationJobRequest() request.set_SourceId('s-bp152mkfswvidyr3****') # 分区参数最好取迁移源的分区参数,如SizeBytes、Device # 同时同一个磁盘下的分区大小之和要小于磁盘大小,否则磁盘分区可能初始化异常 request.set_SystemDiskSize(80) request.add_query_param('SystemDiskPart.1.SizeBytes', 79 * 1024 * 1024 * 1024) request.add_query_param('SystemDiskPart.1.Device', '0_0') # request.set_ClientToken(uuid.uuid4()) request.set_Name('smcName') request.set_Description('setDescription') # (可选)设置已配置高速通道服务或者VPN网关的VPC的ID、VPC下的交换机ID request.set_VpcId('vpc-bp1vwnn14rqpyiczj****') request.set_VSwitchId('vsw-bp1ddbrxdlrcbim46****') # 发送请求获取返回值 response = client.do_action_with_exception(request) # python2: print(response) print(str(response, encoding='utf-8')) print('**********成功创建迁移任务**********') return json.loads(response)['JobId'] # 启动迁移任务 def start_replication_job(job_id): # 创建API请求,并设置参数,如迁移任务ID request = StartReplicationJobRequest.StartReplicationJobRequest() request.set_JobId(job_id) # 发送请求获取返回值 response = client.do_action_with_exception(request) # python2: print(response) print(str(response, encoding='utf-8')) print('**********启动迁移任务**********') # 查询迁移任务状态、迁移结果镜像 def describe_replication_jobs(job_ids): # 创建API请求,并设置参数 request = DescribeReplicationJobsRequest.DescribeReplicationJobsRequest() # 设置迁移任务ID列表 jobIds = [job_ids] request.set_JobIds(jobIds) # 设置迁移任务的名称 request.set_Name('smcName') # 设置迁移任务的页码 request.set_PageNumber(1) # 设置每页行数 request.set_PageSize(10) # 设置迁移源ID列表 sourceIds = ['s-bp152mkfswvidyr3****'] request.set_SourceIds(sourceIds) # 发送请求获取返回值 response = client.do_action_with_exception(request) # python2: print(response) print(str(response, encoding='utf-8')) print('**********查看迁移任务状态**********') jobslist = json.loads(response)['ReplicationJobs']['ReplicationJob'] for i in jobslist: return (i['Status'], i['ImageId']) # 执行创建迁移任务方法 job_id = create_replication_job() # 执行启动迁移任务方法 start_replication_job(job_id) # 每隔10分钟执行一次查询迁移任务状态,判断是否迁移完成。 while True: print('迁移任务正在执行……') time.sleep(600) status, image_id = describe_replication_jobs(job_id) if status == 'Finished': print('迁移完成, 迁移结果镜像为 %s' % image_id) break自动化验证迁移结果使用OOS API调用脚本,指定迁移结果源镜像Id,迁移源主机名、私网IP、实例规格等信息来执行迁移结果自动化验证模板,同时获取验证结果信息。该ACS-SMC-CreateAndVerifyInstance模板过程会自动用指定镜像Id创建临时实例来自动验证。同时还可以按需自定义符合自己业务逻辑的OOS验证模板。Python API调用代码示例:#!/usr/bin/env python #coding=utf-8 import json import time from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkoos.request.v20190601.StartExecutionRequest import StartExecutionRequest from aliyunsdkoos.request.v20190601.ListExecutionsRequest import ListExecutionsRequest client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-beijing') def start_execution(template_name, parameters=None): request = StartExecutionRequest() request.set_accept_format('json') request.set_TemplateName(template_name) if parameters: parameters = json.dumps(parameters) request.set_Parameters(parameters) resp = client.do_action_with_exception(request) return resp def list_exexutions(execution_id=None): request = ListExecutionsRequest() if execution_id: request.set_ExecutionId(execution_id) resp = client.do_action_with_exception(request) executions = resp['Executions'] if executions: execution = executions[0] return execution['Status'], execution['Outputs'] start_resp = start_execution(template_name='ACS-SMC-CreateAndVerifyInstance', parameters={ "regionId": "cn-beijing", "zoneId": "cn-beijing-h", "hostName": "testhostname", "imageId": "m-xxxxxxxxxxxxxx", "instanceType": "ecs.c5.2xlarge", "privateIp": "172.17.30.48", "systemDiskSize": 40, "instancesCount": 1, "isDeleteInstance": True, "commandType": "", "commandContent": "", "timeout": 600, "workingDir": "/root", "rateControl": { "mode": "Concurrency", "maxErrors": 0, "concurrency": 10 }, "OOSAssumeRole": "" }) execution_id = start_resp['Execution']['ExecutionId'] # 每隔1分钟执行一次查询执行状态,判断是否验证完成。 while True: print('验证正在执行……') time.sleep(60) status, outputs = list_exexutions(execution_id) if status == 'Success': print('迁移结果验证通过, 输出参数为 %s' % outputs) break总结服务器迁移工作是企业IT基础资源数据上云过程中必不可少的过程。而如何选用合适的迁云方案也是非常值得探讨的话题。服务器迁移本质上也是一种转型改变,转型和改变往往伴随着阵痛,本来不是简单的过程。但如果选对了合适的云产品和迁云产品工具,企业上云之路也会走得更加顺畅。阿里云服务器迁移中心SMC,是为了解决客户迁移服务器系统应用环境上云过程中的种种痛点而生的。SMC目标是能将任意平台的服务器系统搬迁到阿里云,同时致力于让迁云过程变得更加方便简捷。建议用户可以先从熟悉常规迁移操作步骤开始,然后利用自动化迁移可集成能力,进一步加强迁移效能,更好地满足各类迁移场景需求,这就是自动化迁移上云的正确姿势。更多参考SMC控制台入口SMC操作指南SMC API简介OOS创建并验证目标实例模板
1.前言 将线下服务器系统整体搬迁上云是上云客户的一个常见需求。对于1-10台少量级服务器的迁移需求有很多上云方案可以应对,然而上百台量级服务器的迁移上云就是一个没那么简单的工程问题。本文记录了某平台客户使用迁云工具将500台服务器系统批量迁移上阿里云公有云平台的案例,希望能给有类似需求的客户提供一些批量迁云方案作参考。 2.案例背景 2018年6月,迁云需求群里有业务同学来咨询,上来就开门见山:某客户线下云平台需要整体迁移到阿里云公有云平台,有将近500台服务器系统需要迁移,因为数量大、应用多,重新部署的方式太麻烦基本不考虑,看有没有其他的思路。继续从业务同学那儿了解得知,包含这些需求: 1.这些系统80%以上是虚拟机,其余是物理机,所以需要同时支持P2V和V2V场景; 2.这些系统版本绝大部分是Linux,还有少量的Windows Server,都需要能迁移; 3.希望能以制作镜像的方式迁移,等需要用的时候再创建实例即可。 而这些需求,刚好都在迁云工具的功能支持之列。于是我们还是向业务同学推荐了使用迁云工具的方案。 3.初次迁云演练 无论使用什么迁移工具或方案进行系统迁移工作,提前进行基本的迁移演练是必不可少的过程。 于是业务同学马上联系了客户,参照迁云工具帮助文档快速熟悉了一下基本的使用方法之后,找了台测试系统就开始上手做迁云测试: 1.先下载迁云工具到待迁移系统; 2.再简单配置一下迁移源和目标镜像信息; 3.然后运行迁云工具等待即可。 结果10分钟左右就将一个带数据盘的CentOS系统迁移到ECS公有云平台生成了镜像。接着使用该镜像创建了一个按量实例,启动后验证了一下整体系统应用服务,结果基本正常,测试流程初步通过。 对这个测试结果客户表示基本满足需求,同时希望尽快展开迁移任务。 4.批量迁云实战 1台系统的迁移还好说,然而对于500台这么大批量的系统,如何更加方便的迁移上云呢?来看看客户实际上是怎么做的。 4.1.自动化批量运维工具 一般来说,对于大批量的服务器系统,都会配备自动化运维工具来统一管理。客户的批量系统管理场景里面,用的自动化运维工具是比较常用的Ansible。先简单介绍一下: Ansible是一种很强大的自动化运维工具,实现了批量系统配置、批量程序部署、批量运行命令等功能。使用Ansible可以很方便的完成一些需要重复操作的工作,比如:向100台服务器拷贝同一个文件,或者同时在100台服务器上安装Apache服务并启动。 对于这次批量迁移任务,也可以使用类似Ansible这样自动化批量运维工具来做。 4.2.迁云工具命令行调用 自动化运维工具的一个常用功能就是可以批量下发并执行脚本,所以只要被执行的工具能够支持在命令行中调用,理论上都能被批量的执行。 而迁云工具本身就是一个轻量绿色的客户端工具程序,无需安装或复杂配置即可使用。同时迁云工具提供一系列的命令行参数,专为命令行调用场景做了很多支持。 比如:--noenterkey 禁用交互,--nocheckversion 禁用提示版本更新,--progressfile 设置进度日志文件可以方便跟踪等。 4.3.批量迁移任务脚本 了解了Ansible的功能之后,我们就知道用它来批量下发迁云工具和执行迁移任务是很合适的。 客户根据实际迁移任务需要编写了自动化批量迁移任务脚本,主要做了以下几个工作: 1.批量下发迁云工具到待迁移服务器; 2.批量配置迁云工具,如目标镜像名等信息; 3.批量执行迁云工具,同时获取迁移任务结果。 以下是相关脚本示例: #首先向所有服务器发送迁云工具程序 ansible -f 6 -i host.file all -m copy -a "src=go2aliyun_client1.2.9.1_linux_x86_64.zip dest=/temp" #然后解压缩程序 ansible -f 6 -i host.file all -m shell -a "cd /temp && unzip go2aliyun_client1.2.9.1_linux_x86_64.zip" #再执行修改配置文件脚本 ansible -f 6 -i host.file all -m shell -a "cd /temp/go2aliyun_client1.2.9.1_linux_x86_64 && ./config.sh" sleep 120 # 配置文件脚本./config.sh工作是配置目标镜像名,主要根据子网IP来配置。(其他配置如AK,区域、磁盘信息等都是一致已配置好的) #!/bin/bash image_name=`ip a | grep inet | grep eth0 | grep brd | awk '{print $2}' | awk -F '/' '{print $1}'| awk -F '.' '{print "move_"$1"_"$2"_"$3"_"$4}'` sed -i "s/IMAGE_NANE/${image_name}/" user_config.json #最后执行迁移脚,同时运行并发量是6个 ansible -f 6 -i host.file all -m shell -a "cd /temp/go2aliyun_client1.2.9.1_linux_x86_64 && chmod +x go2aliyun_client &&./go2aliyun_client --nocheckversion --noenterkey" #获取迁云结果,从client_data中获取生成的镜像Id以及完成状态 #判断client_data里的status自带,如果是Finished则表示迁云完成,同时image_id字段就是最终生成的镜像Id。 4.4.ECS资源额度申请 批量迁移过程中需要创建对应数量的ECS资源,可能会超过用户默认的ECS资源存量额度(Quota)上限,因此可以提前向阿里云提出提高以下资源额度上限申请: 按量收费的ECS实例vCPU额度; 自定义镜像额度。 4.5.初步迁云实战效果 准备就绪之后,客户就开始进行首批批量迁移任务。结果也比较顺利,白天几个小时陆陆续续迁移了近100台系统。客户侧专门提供了200M的宽带来做迁移,一台数据量4GB左右的系统从数据传输到打快照制作镜像平均15分钟以内就能完成: 初战告捷,客户有了更多的信心,准备加大迁移队列,开始进行后续批次的迁移任务。 5.批量迁移过快引发的“血案” 正所谓车技再厉害,也怕出意外。大批量迁云肯定不会那么的一帆风顺,一些特殊情况可能会干扰正常迁云的进行。这次批量迁移过程中也遇到了一个突然的问题考验。 5.1.发现问题 客户第二批次迁移开始没多久,迁云移数据后台开始报了大片迁移异常通知。看错误原因,发现都是一样的访问迁云服务网络异常中断导致迁云失败。排查迁云服务端服务一切正常,但是客户侧telnet测试服务还是反复报Connection closed by foreign host的错误。通过在阿里云侧和客户侧抓包发现两侧都收到了reset信号,看不出来是哪边的问题。因为客户侧IP和服务端口可以说是固定的,就有两个怀疑: A.客户侧IP或服务端口被客户侧网络运营商出口限制了; B.或者被阿里云侧网络入口限制了; 5.2.排查问题 在确认了迁云服务端服务本身是正常的情况下,先让客户确认本地网络防火墙有无出口限制,反馈没有;查看阿里云控制台云盾也没有异常拦截记录;同时也向阿里云侧网络同学咨询有无网络入口方面的限制,反馈也没有。接着也向客户数据中心运营商确认了各层网络链路没有IP或端口记录或防火墙之类的限制。 最后找到阿里云侧网络安全的同学咨询,给出初步判断可能是DDoS之类的拦截。安全同学跟进排查不久,就发现了跟客户IP相关的拦截记录,不过不是DDoS拦截。原因是客户这次大批量迁移的过程中,批量迁移动态的创建和释放了一定数量的中转实例,又因为迁移速度很快,一般只有10多分钟,中转实例的生命周期很短,凑巧触发了耿直的网络安全策略。这其实是一种“误判”,批量迁移操作和迁云工具都是没有问题的。 5.3.解决问题 这个问题可以说是因迁移速度过快而差点引发的“血案”,这是在众多迁云案例里面第一次遇到的,结果也在掌控之中。虽然不是迁云工具本身的原因,但却是一次有意义的经验教训。 安全同学在解除了对该客户的相关拦截限制之后,客户侧网络异常问题就得到了彻底的解决,迁移任务又可以进行下去了,无论速度多快、弯道再多也不用担心会翻车了。 后来的迁移就一直顺风顺水没出过问题了,在客户侧200M宽带的加持下,迁云工具跑得十分卖力而平稳。从问题当天中午得到解决到后面两天时间就把剩下的200台系统迁移完成,客户的500台服务器系统已经如期全部迁移完成。 6.批量创建实例 500台服务器批量迁移上云之后,首先得到的是对应数量的自定义镜像。客户后续还要将这些镜像创建成实例,同时有以下需求: 1.创建按量收费的实例来做验证,验证完成后再升为包年包月的; 2.保留跟原来系统相同的子网IP,因为涉及原业务相关; 3.创建实例去购买页面一个个操作是不可能的,需要有工具调用来做。 这里提供一个方案,就是可以使用阿里云命令行工具调用OpenAPI配合脚本来批量创建。 阿里云命令行工具是专为阿里云OpenAPI打造的、用于管理阿里云资源的工具。它可以调用OpenAPI来创建实例。主要步骤如下: 1.下载阿里云命令行工具并配置Access Id和Secret Key; 2.调用创建实例的OpenAPI参数请参考CreateInstance文档说明。假设创建实例的目标区域是cn-qingdao,镜像Id是m-xxxxxxxxx, VSwitch是vsw-xxxxxxx,子网IP是10.0.0.10,实例规格是ecs.n1.samll,调用如下即可: aliyun ecs CreateInstance --RegionId 'cn-qingdao' --ImageId 'm-xxxxxxxxx' --VSWitchId 'vsw-xxxxxxx' --PrivateIP '10.0.0.10' --InstanceType 'ecs.n1.samll' 3.将迁云工具所生成的镜像Id信息和对应的子网IP等信息做成配置,然后编写脚本调用命令行工具来自动读取进行批量执行创建实例。 另外,批量实例创建并启动之后,如果需要进行批量管理和配置,可以使用阿里云自动化批量运维工具“云助手”来做。 7.后记 近期客户开始进行批量创建实例并进行业务联调,目前结果是:近500个服务器镜像已经全部创建实例并正常启动,业务联调良好。目前来看,客户使用迁云工具进行批量迁云已经基本达到了当初的需求预期。因为使用了迁云工具,也让本次迁云过程节省了很多人力物力时间成本。期间虽然也遇到一些问题,但跟总体迁云结果对比看也是很值得的。 随着越来越多客户的使用,迁云工具一直在积累各种迁云案例经验。我们有迁云数据表明,使用迁云工具再配合我们迁云服务支持,让服务器迁移上云的成功率可以达到95%以上。如果有迁移上云需求,欢迎联系咨询我们,我们是专注致力于让客户更方便快捷地上云的阿里云ECS镜像系统团队。 上云就上阿里云! 迁云实践系列: 阿里云迁云工具最佳实践指南 阿里云迁云工具迁移方案总结
1. 前言 在云计算服务高速发展的今天,有越来越多的客户想要加入到云计算的大军中来。怎样方便快捷的将已有的系统数据迁移上云,就变成了一个很有意义的课题;本文就将以此为出发点介绍一下阿里云迁云工具的功能以及最佳实践指南。 2. 工具介绍 2.1. 简介 阿里云迁云工具是阿里云弹性计算Windows系统专家团队开发的一种能将其他环境平台的操作系统迁移到阿里云ECS平台的轻量型工具。它支持主流Windows、Linux操作系统平台,支持P2V(Physical to virtual)、V2V(Virtual to virtual),能够将物理机、虚拟机、以及其他云平台云主机的系统一站式地迁移至阿里云ECS平台,具有兼容性好、操作简便、使用成本低的特点。 2.2. 发展 随着阿里云业务的快速发展,迁移上云工具的使用前景变得越发可观,好的迁移上云服务之于阿里云业务拓展也有着重要的意义。 阿里云弹性计算团队在迁移工具的研发道路上也有过很多尝试,主要都是导出镜像文件到本地的方式,如离线版本迁移工具。然而该方式存在一些痛点:一是需要有足够的本地存储作为中转,有一定的使用成本;二是还需要考虑将镜像文件上传导入到阿里云,操作过程较为繁琐;这些都不能很好的满足很多客户的使用场景; 阿里云迁云工具正是在这个需求背景下应运而生,首先它直接使用公网迁移用户的系统,不需要占用用户额外的本地存储空间,减轻了客户的负担和迁移成本;同时本工具在易用性方面做了很多努力,相比以前的版本工具极大的简化了使用条件、降低了使用门槛,使用户的系统一键迁移到阿里云成为可能; 2.3. 迁移对比 在使用迁云工具之外,常规迁移上云的方式一般有两种:重新部署系统环境式迁移和制作系统镜像式迁移。 阿里云弹性计算Windows系统专家团队一直都在致力于简化镜像系统的限制条件、为开放与支持更多的系统版本而努力。但对于用户自定义镜像还是有一些必不可少的要求,比如要确保虚拟化驱动的完备,确保系统引导的正常,以及考虑文件系统结构兼容性等。在保证好这些必要条件后,还要考虑如何将系统应用环境数据传输到阿里云。 迁云工具本身就是为了这些迁移工作的自动化而设计的,在很多情况下,相比于用户自己制作镜像以及迁移数据的过程有很大的简化。迁云工具与常规的迁移方式对比效果如下: 迁移方式 迁移过程 评分(5星制) 总结 重新部署系统环境式迁移 1.收集源系统应用信息,创建一台相同系统版本的实例; 2.手动安装部署各个应用软件环境; 从源系统导出数据,再导入到新实例系统中; 3.测试新实例业务是否正常; 操作容易度 1星 迁移速度 1星 系统还原度 2星 重新部署系统环境的方式, 在数据量和应用环境复杂的情况下操作难度很高, 对操作人员有较高的系统运维知识要求,迁移过程耗时长, 系统还原度低,适用性不高,一般不建议使用。 制作系统镜像式迁移 1.准备对应的本地存储空间,处理虚拟化驱动,检查系统引导等条件; 2.从源系统导出镜像文件,上传导入到阿里云; 3.创建实例测试业务是否正常; 操作容易度 2星 迁移速度 3星 系统还原度 4星 制作系统镜像的方式,首先需要本地有对应的存储空间来做中转, 同时需要手动检查镜像是否符合上云镜像的条件,操作过程比较麻烦。 导出和导入都需要人工处理;需要有一定系统运维基础的用户使用; 使用迁云工具迁移 1.下载迁云工具,简单配置,运行主程序一键生成镜像; 2.创建实例测试业务是否正常; 操作容易度 4星 迁移速度 4星 系统还原度 5星 使用迁云工具的方式,只需要源系统有公网访问能力,无需本地存储等资源, 支持数据盘与系统盘的自动关联,全程自动化运行,操作简单快捷, 真正能实现系统一键迁移到阿里云。推荐给所有想体验快速迁移上云的用户使用。 如果将迁移对比的结果用之前大热的电影《敦刻尔克大撤退》里的故事来作比喻的话(以下图片均来自网络): 重新部署系统环境式迁移的方式,就像在陆上靠腿走路的士兵,花了一周时间,撤退结果仍然很糟糕: 制作系镜像式迁移,就像在海上航行的游艇老船员,一去一回花了一天时间,结果还算感人; 最后是使用迁云工具的方式,就像无畏的飞行员驾驶着战斗机,仅仅只用一小时,就完成了历史性的使命。 2.4. 支持平台 适用的操作系统(64位和32位): 系统平台 版本号 支持状态 Windows 2003/2008/2012/2016 支持 CentOS 5/6/7 支持 Red Hat 5/6/7 支持 Ubuntu 10/12/14/16/17 支持 Debian 7/8/9 支持 SUSE Linux 11.4/12.1/12.2支持 OpenSUSE 13.1支持 Gentoo 13.0支持 其他Windows系统如Windows 7/8/10,以及RetHat、Ubuntu、SUSE系列内核的Linux系统理论上也能支持。 有过迁移案例的云主机、虚拟机平台: AWS EC2,Microsoft Azure VM VMware vSphere VM ,UCloud UHost 青云VM,电信云VM,腾讯云CVM 阿里云ECS(不同区域) 2.5. 资费说明 迁云工具本身是免费工具,除了创建少量临时的ECS资源做中转可能会产生少量费用外,其他不收取任何费用; 另外按照阿里云的按量收费标准,阿里云账户需要有至少100元余额。 3. 最佳实践 3.1. 使用方式 阿里云迁云工具是一个绿色免安装的程序,分Windows和Linux版本,有64位和32位之分。主要使用方式是: 1. 下载迁云工具包到源系统中; 2. 在主配置文件user_config.json 里配置好需要迁移的系统镜像信息; 3. 使用管理员权限运行主程序go2aliyun_client(或go2aliyun_client.exe)进行迁移; 4. 迁移工作完成时,在阿里云账号下会生成一个自定义镜像;您可以使用该自定义镜像创建 ECS 实例或者更换系统盘来测试。 3.2. 配置说明 主配置user_config.json 是一个JSON 格式的文件,主要包括阿里云账号的 Access Id 和Assess Secret Key 信息,以及要生成的目标自定义镜像的简单配置信息(区域、镜像名、系统盘大小、平台、架构、数据盘配置等)等。 以下是配置文件 user_config.json 的模板: { "access_id": "", "secret_key": "", "region_id": "", "image_name": "", "system_disk_size": 40, "platform": "", "architecture": "", "bandwidth_limit":0, "data_disks": [] } 3.2.1. 配置示例一:迁移一台无数据盘的 Linux 服务器 假设您的服务器配置信息为: 发行版本:CentOS 7.2 系统盘:30 GB 系统架构:64 位 您的迁云目标为: 目标地域:阿里云华东1 地域(cn-hangzhou) 镜像名称:CLIENT_IMAGE_CENTOS72_01 系统盘设置:50 GB。 那么您可以根据如下信息配置 user_config.json 文件: { "access_id": "YourAccessKeyID", "secret_key": "YourAccessKeySecret", "region_id": "cn-hangzhou", "image_name": "CLIENT_IMAGE_CENTOS72_01", "system_disk_size": 50, "platform": "CentOS", "architecture": "x86_64", "data_disks": [], "bandwidth_limit": 0 } 3.2.2. 配置示例二:迁移一台有数据盘的 Linux 服务器 如果您的 Linux 服务器在示例一的基础上加入了 3 块数据盘,源目录和数据盘大小分别为: /mnt/disk1:100 GB /mnt/disk2:150 GB /mnt/disk3:200 GB 那么您可以根据如下信息配置 user_config.json 文件: { "access_id": "YourAccessKeyID", "secret_key": "YourAccessKeySecret", "region_id": "cn-hangzhou", "image_name": "CLIENT_IMAGE_CENTOS72_01", "system_disk_size": 50, "platform": "CentOS", "architecture": "x86_64", "data_disks": [ { "data_disk_index": 1, "data_disk_size": 100, "src_path": "/mnt/disk1" }, { "data_disk_index": 2, "data_disk_size": 150, "src_path": "/mnt/disk2" }, { "data_disk_index": 3, "data_disk_size": 200, "src_path": "/mnt/disk3" } ], "bandwidth_limit": 0 } 具体配置参数说明及示例详见阿里云迁云工具帮助文档。 3.3. 注意事项 3.3.1. 迁移前 Linux系统迁移前可以先使用工具包里的client_check程序检测一下系统条件是否满足,执行命令./client_check --check即可,如果所有项测试通过,则表明是符合迁移条件的; 因为本工具对于增量数据的迁移支持还不够完善,所以建议先暂停业务再进行迁移,比如各数据库服务(oracle、sqlserver、mongodb、mysq等)、docker服务等。 3.3.2. 迁移中 迁云工具运行过程中,会在目标区域下创建一个用以辅助迁移的中转实例(名为INSTANCE_FOR_GOTOALIYUN),注意不要把这个实例当成了迁移的结果;一般情况下不要干涉中转实例,耐心等待迁云工具的迁移工作完成; 如果程序中途报错中断,可以先进行故障排除,待问题处理完成后,再执行主程序即可继续迁移工作;任何一个过程异常中断了,都能通过重新执行主程序来尝试恢复。 3.3.3. 迁移后 可以先创建按量收费的实例或再现有的实例中以更换系统盘的方式来测试该生成的镜像是否能正常启动,启动后可以如下顺序检查: 1. 有数据盘的情况下先检查数据盘是否正常,Linux系统需要手工编辑/etc/fstab添加数据盘mount项;Window 2008及以上系统建议先使用工具Reset File Permission修复一下默认文件系统权限; 2. 检查网络服务是否正常; 3. 检查系统应用与业务是否正常。 3.4. 使用场景 3.4.1. 迁移场景 对于系统迁移,做好充分的迁移演练测试是迁移成功的重要前提。 场景一:微型系统迁移,小型或无数据库,数据量级10-100G。比如个人应用网站,开发测试环境等。 配置好主配置文件,直接运行主程序即可。迁移完成之后创建实例验证。 场景二:小型系统迁移,少量应用服务器+数据库服务器,数据量级100G-1000G。比如小型企业应用站点等。 可以在每个服务器部署一个迁云工具,分别迁移应用服务器和数据库服务器;在迁移数据库服务器时建议选个系统维护的时间暂停数据库服务后再迁移;迁移完成后,依次创建实例验证系统业务正常性以及数据库同步性。 场景三:中型系统迁移,众多应用服务器+数据库服务器,有中型数据库,数据量1000G以上。比如中型企业应用站点等。 提前演练系统迁移测试,评估各个系统的迁移时间,以及切换到阿里云后的各系统配置对接过程;必要时考虑使用专线来加大传输速度;可以的话业务数据库建议暂停后再迁移以保持数据文件的一致性,也可以先只迁移应用环境,后通过使用阿里云的DTS服务来进行数据库的迁移。 3.4.2. 迁移参考 迁移工具的一些性能及影响说明,可以作为系统迁移时的参考。 3.4.2.1. 迁移时间估算 迁移总时间=传输时间+打快照时间 传输时间=实际数据量/实际网速 打快照时间=实际数据量/打快照速度 注意:迁云工具传输数据时默认是打开了压缩传输选项的,相当于使用zlib库默认6级的压缩率,理想情况下对于传输速度会有30%-40%的提升。 打快照时间是依赖阿里云快照服务,目前速度在5-10MB/s左右,预计在今年5月份会有一定提速; 3.4.2.2. 对源系统的影响 迁云工具不会干涉源系统业务,除了网络资源的占用,对于其他如CPU、内存等资源的消耗一般很少;同时可以使用主配置里的bandwidth_limit参数来设置上传带宽上限; 迁云工具会生成少量日志文件和缓存数据文件,除此之外不会修改源系统文件; 3.5. 更多方案 3.5.1. 低版本系统上云 一些低版本系统,比如CentOS/Red Hat 5.5以下系统,因为内核没有支持virtio等必要的虚拟化驱动,是无法直接在ECS上运行的,此时可以考虑升级到适合的内核版本后再做迁移,如果不知道操作过程,具体迁云方案可以进迁云工具支持群进行咨询; 3.5.2. 数据传输增强 迁云工具的数据传输支持压缩、数据校验以及ssh安全通道等配置选项,如果有相关需求,可以进迁云工具支持群进行咨询; 3.5.3. 其他系统上云 一些不在上述适用的系统平台列表中的系统想要使用迁云工具迁移上云,比如Oracle Linux,Amazon Linux、XenServer等,也可以进迁云工具支持群进行咨询,我们会根据客户的需求来进行相关系统测试以及提供相关迁云方案。 3.6. 故障排除 1. 工具支持断点恢复。传输过程支持断点续传;任何一个过程异常中断了,在处理完问题后,都能通过重新执行主程序来尝试恢复;2. Windows系统启动后建议先检查一下磁盘盘符,如有丢失或变更,可通过磁盘管理修复;3. 实例启动后网络服务异常,可能需要手动配置网络;4. 其他故障排除可参见阿里云迁云工具故障排除FAQ; 4. 后记 迁云工具目前可能还存在着一些需要改进的地方,我们也将继续投入、不断完善,以期能够提供更好的迁云支持。目前提供的这些快捷工具还只是一个开端,我们也在积累各种迁云方案来应对不同的场景。助力客户更加方便快捷的上云是我们的使命!如果大家在迁云过程中有遇到任何问题,也都欢迎来跟我们一起探讨。 最后祝愿大家都能愉快地迁移到阿里云! 阿里云迁云工具帮助文档: https://help.aliyun.com/document_detail/62349.html https://help.aliyun.com/document_detail/62394.html 国际站帮助文档: https://www.alibabacloud.com/help/faq-detail/62394.htm https://www.alibabacloud.com/help/faq-detail/62349.htm 指导视频: https://help.aliyun.com/video_detail/67824.html
首先需要先尝试升级RedHat 4至带有virtio驱动的版本(必须),见以下链接:
https://access.redhat.com/articles/2488201
https://access.redhat.com/articles/3078#RHEL4
然后,第一个办法是:考虑制作成镜像VHD格式,上传到阿里云OSS,再导入为镜像;
第二个办法是使用迁云工具,这是帮助文档:
https://help.aliyun.com/document_detail/62349.html
https://help.aliyun.com/document_detail/62394.html
视频指导:
https://help.aliyun.com/video_detail/67824.html
(注意:Red Hat 5及以下版本可能需要升级rsync和grub)
迁移上云推荐使用阿里云迁云工具,帮助文档:
https://help.aliyun.com/document_detail/62349.html
https://help.aliyun.com/document_detail/62394.html
视频指导:
https://help.aliyun.com/video_detail/67824.html
推荐使用阿里云迁云工具,帮助文档:
https://help.aliyun.com/document_detail/62349.html
https://help.aliyun.com/document_detail/62394.html
视频指导:
https://help.aliyun.com/video_detail/67824.html
-------------------------
-------------------------