当前位置:科技 > 业界 > 业界动态 > 正文

美团云“零感知”在线迁移解决方案

2016-05-31 17:05:24    IT168  参与评论()人

【IT168 资讯】内核报错、CPU工作不正常、硬盘故障、业务扩展导致性能出现瓶颈……..这些都是运维工程师们的噩梦。怎样积极、有效地预防故障的发生?如何主动提高运维可靠性?在性能危机出现时,怎样化解?所有这些问题,在美团云的“零感知”在线迁移解决方案中,都能找到答案。

在线迁移是什么?

Live Migration (在线迁移)是指将一台虚拟机从其所在物理机无缝地转移到另一台物理机的过程。

哪些场景下会用到在线迁移?

场景一:

* 在物理机发生内核报错、CPU工作不正常等底层基础设施故障时,管理员可以将虚拟机迁移到状态正常的物理机上,提前预防更恶劣的故障发生,比如机器彻底宕机。

场景二:

* 物理机硬盘故障,尽管云服务商往往使用了多副本的存储方式保障可靠性,即某块盘坏了另一块能够继续服务。但是坏盘送修往往有一定的时间窗口,在这段时间内将关键业务在线迁移走也是一种更为安全的选择。

场景三:

* 云计算服务商存在批量采购新机器,以及淘汰旧有机器的现象,可能某次采购之后,机器资源池有富余,这时候可以将老用户的机器均匀迁移到新机器上,以便提升性能。

场景四:

* 用户的某些机器上承载的业务发生变化,负载持续过高,性能下降,可以联系云计算服务商进行主动迁移。

场景五:

* 共享块存储服务(EBS)大大降低了在线迁移的成本,对用户来说,在上层业务暂时没有做到高可用性的情况下,可以通过将数据存在云端,底层快速保障就绪这种方式来提高可用性。

为什么美团云的在线迁移方式被称为“零感知”?

传统情况下,在数据迁移的过程中,用户的业务会被迫中断,因此被称为“冷迁移”。相反,美团云采用了“热迁移”方式,整个过程中,不关机不断网,用户业务始终不会中断。同时,无需运维介入,美团云能够替用户选择迁移路径及时间点,并进行高效的集中式运维管理。因此无论从业务角度,还是运维角度,美团云的迁移方案对用户来说,都是“零感知”的。

美团云如何做到“零感知” ?

美团云主机所采用的 QEMU/KVM 架构,对在线迁移技术有着较为成熟的支持。在软件实现上,为了追求对底层更加准确的控制,并没有使用例如 libvirt 这样的库,而是直接通过代码操作 QEMU 以及 QEMU monitor。在硬件上,物理机全部接入万兆网卡,同步内存的速度能够达到几百MB每秒,提升迁移成功率。

迁移过程是怎样的?

迁移虚拟机其实就是分别迁移网络、磁盘、机器状态(内存)的过程,假设源宿主机为A,迁移目标宿主机为B,我们会首先在B上启动一个空壳的虚拟机(QEMU进程),然后按照网络、磁盘、内存的顺序把A上面的QEMU转移过来。通过查看整个迁移过程的细节,我们能够明白为什么整个迁移过程完全是“无感知”的。

-第一步:网络

由于使用了Open vSwitch,我们可以很方便地在目标物理机上配置出完全相同的网桥,并且给将要到来的虚拟机分配相同的IP及MAC地址,这时候网络就算是就绪了,直到机器状态发生转移的那一瞬间,网络流量也会自然而然地由A切到B上,一个完全相同的虚拟网卡开始在B上工作了。但是这里还存在一个小问题,网络上的交换机内部有arp缓存,它仍然认为虚拟机MAC地址对应的这块网卡是在A而不是在B上,所以我们的控制程序需要在完成迁移后立刻从B向网络上发送一个免费arp报文,让交换机能够学习到新的地址。在这段时间内网络是不可用的,但由于时间非常短(几十毫秒左右),在TCP的超时重传范围内,因此基本不会被业务感知。

-第二步:磁盘

对于磁盘来说,通常对于这种块设备的迁移有两种方法。

一种是基于共享存储(EBS)的,支持在多点同时打开同一块盘。于是在B的虚拟机空壳上我们也会挂载上原先的这块磁盘,并且由QEMU自身保证。如果存在写入,则先在A上写,直到迁移完成的瞬间才开始在B上写。单点写入能够保证数据的一致性。

另一种方案是针对本地存储的。美团云的默认磁盘使用的是本地存储,为了避免迁移的时候需要拷贝大磁盘,我们使用了一个用户态的文件系统工具 fuse,它既可以像NFS一样方便地使用mount远程挂载磁盘,同时以用户态程序规避了内核难以调试的问题,并且和http整合到一起,形成了一个服务。在B端的空壳QEMU上新准备的磁盘也是空的,使用 fuse mount 挂载A上的远程磁盘文件,并将其设置成空壳QEMU的 backing_file,凭借QEMU的 copy_on_write 技术,A上的磁盘对于B的虚拟机来说变成本地可用。当内存迁移完成,新QEMU在B上运行后,我们还需要往B的QEMU monitor上发送 block_stream 命令,以一个较小的速度(30MB/s)从A上同步磁盘,这个同步动作和用户在虚拟机内部的IO访问是不冲突的,用户这段时间做出的磁盘修改都会被记录在B本地,直到最终同步完成,才会去 merge 这些差异的数据。

因此这两种方案都能保证迁移的过程中磁盘的数据同步过程中,原来的数据盘A都是可用的,从而保证原有的业务不会中断。

- 第三部:内存

最后一步是迁移内存。假设某个时刻网络和磁盘都在B上就绪了,虚拟机的整个系统仍然在A上运行着,为了保证业务不中断,我们一边从A往B拷贝着内存,填充空壳,另一方面仍然不能暂停A上QEMU的运行。但是只要在运行,内存就会有变化,可能拷贝了几十秒后(由网速决定)达到终点,但此时原先拷贝过的区域内一部分内存又变化了,因此,QEMU自身会在拷贝过程中记录下那些发生变化的脏页,针对它们再进行一次拷贝,如此循环。由于拷贝速度比内存变化速度快,所以在某个时刻,A与B上的QEMU内存会达到完全一致,A主动终止执行下一条CPU指令,B随即按照程序栈接替A执行,这样便完成了虚拟机系统从A到B的无缝切换。

下面就是整个迁移过程的框架:

美团云“零感知”在线迁移解决方案

美团云”零感知“迁移技术最大的技术难点是什么?

在同步内存这块,迁移速度的选择是一个技术难点。速度太大,过度占用网卡带宽,宿主机负载很重,容易影响其他用户体验;速度太小,脏页一直增长,来不及同步,导致一直迁移中无法结束。

脏页的问题,曾经遇到过这样一个场景。某个网站用户要求做迁移,迁移的时间段内。网站的访问量也很大,内存同步速度赶不上网站内存的变化速度。因此,美团云将迁移速度作为重要的备选参数,使得管理员能够针对不同的用户需求动态调整。从而在各种情况下,提高迁移成功率,做到真正的“零感知”解决方案。

我们还在做什么?

在最新的QEMU 2.5版本中,我们注意到,一个被称作为自动收敛(autoconverge)的功能被集成到了迁移代码里,它通过适当降低虚拟CPU执行速度的方法,间接降低了内存变化速度,从而提升迁移成功率。

此外,还有一个新特性叫 post-copy,它跟原先这种同步内存的方式(pre-copy)比起来,能够在第一时间就去B端将QEMU空壳启动起来,然后通过 page fault 的方式按需去A端读内存,这样一来,虽然同步的过程比较长,但能够避免集中拷贝大段内存,从而提高迁移成功率。

美团云正在不断迭代,试图在更严峻的环境下,为用户提供真正“零感知”的在线迁移解决方案,从而大幅度提高云服务的可靠性,并降低运维的依赖性。这样靠谱的云,你值得拥有!

 

社会文史娱乐汽车科技旅游城市文化

新闻 军事 论坛 娱乐

新闻频道
国内国际社会评论文史专题经济新闻图库老照片
军事频道
军事要闻中国军情国际军情军事历史网友原创军事专题军事图库武器装备军事文化
汽车频道
车闻Update漫话车型漫记车映像实拍解析行业动态新车资讯独家评测汽车生活人文之旅
教育频道
留学移民高考中小学拒讲堂师说商道商论
游戏频道
游点意思网络游戏网页游戏单机游戏手机游戏军事游戏游戏产业发号中心游戏美女图说游戏囧游囧事
科技频道
业界互联网行业通信数码手机平板IT硬件相机笔记本家电产品库
旅游频道
X旅行视界目的地 美图发现社区
文化频道
专题非遗沙龙历史艺文博览读书图库书画禅文化
书画频道
资讯收藏展览在线展厅艺术家视觉专题
体育频道
国际足球中国足球NBACBA 综合体育图片汇总专题策划
视频频道
新闻军事中华出品原创娱乐纪录片微电影决胜海陆空
娱乐频道
明星电影电视音乐专题图库论坛
公益频道
老兵出镜老兵动态老兵资料库关爱老兵在行动公益组织公益人物
城市频道
城市聚焦城市设计城市生活城市策划城 市图赏城市加盟城市论坛
社区频道
中华论坛网上谈兵中华拍客社会时政国际风云生活消费休闲旅游美丽女人娱乐八卦经济风云情感世界文学天地
好医生频道
保健养生疾病防治行业资讯名医谈健康 医生专栏食疗跑步
经济频道
国内宏观海外经济产经商贸时尚消费电商眼球儿企业故事专栏评说识局经济