阿里干货|我的弯道不翻车,500台服务器批量迁云实战
nanshan 2024-10-28 16:32 16 浏览 0 评论
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%以上。如果有迁移上云需求,better call us,我们是专注致力于让客户更方便快捷地上云的阿里云ECS镜像系统团队。
温馨提示:飙车有风险,请谨慎驾驶!
上云就上阿里云!
更多资讯,尽在阿里云科技快讯~
来科技快讯看新闻鸭~
快点关注我认识我爱上我啊~~~
相关推荐
- 0722-6.2.0-如何在RedHat7.2使用rpm安装CDH(无CM)
-
文档编写目的在前面的文档中,介绍了在有CM和无CM两种情况下使用rpm方式安装CDH5.10.0,本文档将介绍如何在无CM的情况下使用rpm方式安装CDH6.2.0,与之前安装C5进行对比。环境介绍:...
- ARM64 平台基于 openEuler + iSula 环境部署 Kubernetes
-
为什么要在arm64平台上部署Kubernetes,而且还是鲲鹏920的架构。说来话长。。。此处省略5000字。介绍下系统信息;o架构:鲲鹏920(Kunpeng920)oOS:ope...
- 生产环境starrocks 3.1存算一体集群部署
-
集群规划FE:节点主要负责元数据管理、客户端连接管理、查询计划和查询调度。>3节点。BE:节点负责数据存储和SQL执行。>3节点。CN:无存储功能能的BE。环境准备CPU检查JDK...
- 在CentOS上添加swap虚拟内存并设置优先级
-
现如今很多云服务器都会自己配置好虚拟内存,当然也有很多没有配置虚拟内存的,虚拟内存可以让我们的低配服务器使用更多的内存,可以减少很多硬件成本,比如我们运行很多服务的时候,内存常常会满,当配置了虚拟内存...
- 国产深度(deepin)操作系统优化指南
-
1.升级内核随着deepin版本的更新,会自动升级系统内核,但是我们依旧可以通过命令行手动升级内核,以获取更好的性能和更多的硬件支持。具体操作:-添加PPAs使用以下命令添加PPAs:```...
- postgresql-15.4 多节点主从(读写分离)
-
1、下载软件[root@TX-CN-PostgreSQL01-252software]#wgethttps://ftp.postgresql.org/pub/source/v15.4/postg...
- Docker 容器 Java 服务内存与 GC 优化实施方案
-
一、设置Docker容器内存限制(生产环境建议)1.查看宿主机可用内存bashfree-h#示例输出(假设宿主机剩余16GB可用内存)#Mem:64G...
- 虚拟内存设置、解决linux内存不够问题
-
虚拟内存设置(解决linux内存不够情况)背景介绍 Memory指机器物理内存,读写速度低于CPU一个量级,但是高于磁盘不止一个量级。所以,程序和数据如果在内存的话,会有非常快的读写速度。但是,内存...
- Elasticsearch性能调优(5):服务器配置选择
-
在选择elasticsearch服务器时,要尽可能地选择与当前业务量相匹配的服务器。如果服务器配置太低,则意味着需要更多的节点来满足需求,一个集群的节点太多时会增加集群管理的成本。如果服务器配置太高,...
- Es如何落地
-
一、配置准备节点类型CPU内存硬盘网络机器数操作系统data节点16C64G2000G本地SSD所有es同一可用区3(ecs)Centos7master节点2C8G200G云SSD所有es同一可用区...
- 针对Linux内存管理知识学习总结
-
现在的服务器大部分都是运行在Linux上面的,所以,作为一个程序员有必要简单地了解一下系统是如何运行的。对于内存部分需要知道:地址映射内存管理的方式缺页异常先来看一些基本的知识,在进程看来,内存分为内...
- MySQL进阶之性能优化
-
概述MySQL的性能优化,包括了服务器硬件优化、操作系统的优化、MySQL数据库配置优化、数据库表设计的优化、SQL语句优化等5个方面的优化。在进行优化之前,需要先掌握性能分析的思路和方法,找出问题,...
- Linux Cgroups(Control Groups)原理
-
LinuxCgroups(ControlGroups)是内核提供的资源分配、限制和监控机制,通过层级化进程分组实现资源的精细化控制。以下从核心原理、操作示例和版本演进三方面详细分析:一、核心原理与...
- linux 常用性能优化参数及理解
-
1.优化内核相关参数配置文件/etc/sysctl.conf配置方法直接将参数添加进文件每条一行.sysctl-a可以查看默认配置sysctl-p执行并检测是否有错误例如设置错了参数:[roo...
- 如何在 Linux 中使用 Sysctl 命令?
-
sysctl是一个用于配置和查询Linux内核参数的命令行工具。它通过与/proc/sys虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)