百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

阿里干货|我的弯道不翻车,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虚拟文件系统交互,允许用户在运行时动态修改内核参数。这些参数控制着系统的各种行为,包括网络设置、文件...

取消回复欢迎 发表评论: