【云主机迁移原理】华为云主机迁移服务SMS的原理分析
【背景】
前几天给一个客户演示华为云主机迁移工具SMS时,迁移脚本提示源主机上没有rsync工具,导致脚本启动失败。由于华为云官网提供的迁移工具是编译后的可执行文件,无法看到工具的源代码。通过这个提示推测,应该是利用rsync来实现文件级的迁移能力。
【主机迁移工具原理】
1、通过华为云公开的SMS迁移文档 https://support.huaweicloud.com/sms_faq/sms-faq.pdf 第13页,推测迁移的关键原理:
<1> 在源主机上安装Agent和rsync客户端,经测试linux主机不用重启,主要使用Agent来连接到华为云的目标主机的链路管理、兼容性检查(包括操作系统版本、存储容量)、断电续传、全量迁移、增量迁移等。
<2> 华为云后端服务器安装rsync服务端,用于调度、监控进度和控制复制速度。
<3> 华为云前端界面、负责管理目标主机的创建/开关机,进度/结果显示。
<4> Agent会调用linux的rsync工具进行文件同步(一个磁盘挂载后可识别为一个文件),涉及网络传输,需要开放ssh协议端口(linux:22 , windows: 8899/8900)
【rsync简介】
rsync(remote synchronize) 是linux/unix下的一个远程数据同步工具。它可以通过LAN/WAN快速同步多台主机间的文件和目录,并适当使用rsync算法(差分编码)来实现增量数据同步。
【rsync特点】
1、可以镜像保存整个目录树和文件系统。
2、可以保留原有的权限(permission,mode),owner,group时间,修改时间(modify time),软硬连接,文件acl文件属性(attributes)信息等。
3、传输效率高,能自动检测差异数据,增量同步。
4、支持匿名传输,方便网站镜像;页可以做验证,加强安全。
rsync大致使用三种主要的传输方式,分别为:本地传输(local),远程通道传输(remote shell),守护进程传输(daemon)。华为云主机迁移公司SMS,使用的就是远程通道传输(remote shell)
【rsync工作原理】
1、命令或脚本运行之后,同步端(源端)开始构造FileList,FileList就是被同步端(目标端)需要同步的文件索引,name->id,每个文件都有一个id值,如MD5。
2、全量同步:同步端(源端)构造完成之后,将FileList发送到被同步端(目标端),被同步端(目标端)rsync处理发送FileList,然后开始同步。
3、增量同步:因为2边都有文件,同步端(源端)发送Filelist,被同步端(目标端)用新旧的FileList进行MD5对比,只保留差异文件,构建新的FileList,并回应发送端(源端)。
4、同步端(源端)收到新的FileList后,开始同步文件到同步端。
【rsync的不足】
1、对文件目录扫描,如果文件数量级在百万/千万级,扫描非常耗时,降低了rsync效率。同时对CPU消耗非常大,甚至将源端的服务器卡死。
解决办法:rsync + inotify 解决扫描目录慢,耗CPU的问题。
inotify是linux系统中监控文件变化的工具,可以检测单个文件,也可以检测整个目录。inotify的设计初衷是当内核空间发生某种事件之后,可以立即通知用户,方便用户做出相应。
2、rysnc不能实时检测和同步数据,可以通过守护进程周期性出发同步,两次同步之间会有时间差,属于异步的迁移,数据一致性上存在时间差。
解决办法:该方案只能做异步同步,不能做实时同步。
什么是守护进程?
守护进程是linux的后台服务进程,生命周期较长,在系统加载时启动,在系统关闭时退出,通常独立于控制终端。主要作用:周期性执行某种任务或等待处理某些发生的时间,守护进程常用于定时器timer。本文分析的场景,守护进程主要定时把增/改/删的文件进行增量同步。
【架构图】
基于上述分析和实测发现,增量同步的速度很快,对源服务器的CPU消耗小,推测华为云的SMS工具使用守护进程 + inotify + rsync进行的高效增量同步。百度搜索了很多文章,都没有找到整个方案的架构图,我尝试画一个原理图,便于自己以后回顾,如有不对的地方,欢迎留言讨论。
【小结】
1、rsync 实现文件级的远程同步功能。
2、inotify + rsync 解决扫描目录慢,耗CPU的问题。
3、守护进程 提供定时将差异文件进行同步,即增量同步功能。
主要参考文献:
https://blog.csdn.net/yuanfeng78790/article/details/72633182
【云主机迁移原理】华为云主机迁移服务SMS的原理分析相关推荐
- 华为云跨云迁移工具案例实践:阿里云迁移到华为云
对于阿里云批量迁移到华为云,HyperMotion可以支持批量一键式安装Agent软件,做到了操作步骤简单化.自动化,可以满足常见源端操作系统类型. 例如:Windows 2003-2019,Cent ...
- 华为云迁移工具推荐最佳实践:Xen虚拟化迁移到华为云
1.迁移需求分析 Xen虚拟化是早期半虚拟化技术,现有部分本地还在使用,像Citrix公司开发的XenServer虚拟化管理平台,底层就是运用的xen虚拟化技术底座,但是目前市场使用比较多的还是开源K ...
- 阿里云服务器怎么整体迁移到华为云服务器
买了一台华为云的服务器,怎么将原先阿里云的服务器整体迁移到华为云服务器呢,编程爱好者之家为大家详细讲解下. 一:获取目的端服务器所在账号的AK/SK. 1.登录控制台,鼠标移动至右上方的用户名,在下拉 ...
- 华为云迁移工具推荐最佳实践:KVM虚拟化迁移到华为云
1.迁移需求分析 KVM虚拟化是当前开源虚拟化技术下大家使用比较多的,而且现在好多云底层都是使用的KVM虚拟化作为云平台虚拟化技术底座,华为云也是全面应用了KVM虚拟化技术,所以在将本地KVM的虚拟化 ...
- 【华为云技术分享】云图说|第三方云厂商数据如何迁移至华为云OBS?真相在这里......
很多客户有诉求将自己的业务从第三方云厂商迁移到华为云,发现自己的海量数据已经存放在了第三方云厂商的对象存储中,这部分数据怎么安全高效的迁移到华为云对象存储服务OBS呢? 别担心,一张云图说教会你将数据 ...
- 阿里云、腾讯云、UCloud 、华为云云主机对比测试报告
在2020年初之际,国内专业的云资源选型服务平台CloudBest旗下监测实验室,针对业界4家主流的云服务提供商,包括阿里云.腾讯云.UCloud与华为云进行了横向评测.本次测试在尽量保证测试环境相同 ...
- 【本地Mindspore代码迁移至华为云ModelArts平台训练】
*************************************************** 码字不易,收藏之余,别忘了给我点个赞吧! *************************** ...
- Redis从阿里云迁移至华为云
场景描述 公司服务器需要从阿里云迁移到华为云,但是应用里面有一些自增的编码是存储在redis中的,所以redis的数据也需要从阿里云迁移到华为云,阿里云采用redis 4.0 华为云使用 redis ...
- 阿里云、腾讯云、UCloud、华为云云主机对比测试报告 | 技术
本次测试在尽量保证测试环境相同的情况下,提供客观公正的测试数据,从技术层面对云服务提供商提供的云主机产品进行性能(CPU.磁盘.网络等)与性价比评测. 作者/来源:Cloudbest 在 2020 年 ...
- 本地pytorch代码迁移至华为云ModelArts平台训练
本地pytorch代码迁移至华为云ModelArts平台训练 上传代码和数据集至华为云OBS 注册华为云OBS账号并使用AK登录. 参考这篇文件OBS账号注册和登录 修改pytorch本地训练代码文件 ...
最新文章
- android修改系统设置权限_安卓保护隐私利器!完美解决软件「不给权限就不运行」的小工具...
- 采购订单中的容差项目解释
- 查看windows下系统信息
- 修正 010 Editor 模板文件 MachO.bt 的错误
- Linux buff/cache和清理占用过高
- koa2 session mysql_koa2实现session的两种方式(基于Redis 和MySQL)
- 气泡提示效果css.html,用纯CSS3绘制高端简约的气泡提示框
- Servlet文件上传功能的实现(commons-fileupload)
- 两天学会css基础(一)
- mysqlreport
- Java学习笔记(13)——Java注释
- 如何提高python代码运行速度_一行代码让你的python运行速度提高100倍
- linux rpm
- 2021-09-14联想云教室连接不上服务器解决办法
- 如何制作伪原创视频?呆头鹅批量视频剪辑软件一键处理10万个视频
- HDMI-FMC子卡的使用(基于VC707)(中)
- 永不消逝的电波(一):无线电入门篇
- 大学这么多比赛,我该参加哪个?
- 每日十道面试题(五)
- 从路边摊到估值100亿,文和友“精神战略”餐饮逻辑
热门文章
- 深度学习图像-半自动和自动标注工具
- TAGE Branch Predictor/分支预测
- u盘在电脑上读不出来?从这几方面排查
- linux marvell 网卡驱动,坑爹的marvell linux 网卡驱动
- 计算机专业教室三行诗,当学霸写起三行情书,看完第一个就懵了……
- Shopnc之nginx安装
- Debezium系列之:手动创建存放ddl database.history.kafka.topic对应的topic
- Kotlin 使用DSL构建语法结构 看这一篇就够了~
- mcafee 8.5i杀毒软件规则配置
- echarts地图数据过旧,通过geojson自定义经纬度地图