【云主机迁移原理】华为云主机迁移服务SMS的原理分析

版权声明:Powered by 小超超 https://blog.csdn.net/qq_39295735/article/details/88412362

【背景】

前几天给一个客户演示华为云主机迁移工具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

 

 

 

猜你喜欢

转载自blog.csdn.net/qq_39295735/article/details/88412362