HV如何在线迁移Linux
前言
当前,云计算技术的飞速发展对企业降低IT投入成本、减少系统运维开销、加速业务交付速度、动态调整业务规模以及保障业务可靠性具有重要意义。
目前,云计算带来的这些好处依赖于底层虚拟化技术将服务器资源虚拟出多份可供用户使用的计算资源,从而方便云计算提供商为企业用户提供高效、弹性、高可靠和可维护的底层IT基础架构。其中,虚拟机在线迁移技术正是构建虚拟机技术上述优点的重要组成部分,该技术可以简化系统维护复杂度、实现业务负载均衡、优化服务器能源消耗并增强云计算可靠性。
作为国内领先的公有云服务提供商,UCloud对其云平台在线迁移方案进行了深入的优化,通过实践证明这些优化能够很好的应对线上各种迁移场景,为用户业务的稳定与可靠提供了重要保障。
原理
在线迁移技术的本质就是在虚拟机不停机的情况下,不同物理机之间进行在线跨机迁移。首先是在目标物理机建立相同配置的虚拟机,然后进行各类数据迁移,最终快速切换到目标端新虚拟机。由于整个迁移过程中,绝大多数时间内用户虚拟机都能保持正常运行,且最后阶段的切换过程非常短暂,不会造成用户业务中断,对用户运行在虚拟机中的业务几乎没有影响,因此在线迁移技术在实现云平台资源动态调整以及故障处理方面具有重要意义。
因为云计算平台除了核心的底层虚拟化技术外,还包括SDN网络、分布式存储和运维管理系统等,所以在线迁移方案不仅要包括跨机迁移技术本身,还包括迁移前后虚拟机的管理信息以及网络和磁盘配置信息的切换等工作。为此,本文将在线迁移过程划分为三个阶段:准备阶段、迁移阶段和切换阶段。
考虑到UCloud云计算平台采用KVM虚拟化技术实现虚拟化底层方案,同时共享存储的在线迁移仅是非共享存储的一个特例,因此本节将以非共享存储为例,详细介绍UCloud底层KVM虚拟化技术如何进行虚拟机的在线迁移。其中,迁移环境为虚拟化底层KVM+Qemu、虚拟化管理Libvirt、虚拟化网络Openvswitch。
假设将源物理机SourceHost的一个虚拟机VM 迁移到目标物理机DestHost,非共享存储虚拟机在线迁移过程的具体步骤如下:
准备阶段
Step1 选择一台具有足够磁盘和内存资源的物理机DestHost,并在DestHost上创建VM对应的系统盘和数据盘,同时选定接收迁移数据的tcp端口(如图 1-1所示),这两个磁盘在DestHost和SourceHost上的路径必须完全一致。不同的是,DestHost上初始创建的只是空盘,上面没有真实数据。
图 1-1 在目标端新建虚拟机镜像
Step2 通过虚拟化管理软件Libvirt在DestHost上创建一个和VM同样配置的虚拟机VM’,系统盘和数据盘使用Step1中创建的系统盘和数据盘(如图 1-2所示)。VM’当前是paused状态,虚拟机VM’的vcpu处于暂停状态,同时虚拟机VM’会通过监听一个内网的tcp端口来接收迁移数据。
图 1-2 在目标端创建新虚拟机
迁移阶段
Step3 虚拟化管理层Libvirt给VM对应的Qemu进程发出一个迁移指令,并指定参数,例如指定DestHost为目标、需要迁移块设备、最大停机时间、迁移带宽限制等,然后迁移数据就会通过指定tcp链路传输给DestHost上的VM’。需要注意,迁移数据的网络包不是经过 vswitch,而是直接从SourceHost的ethx网卡出,进到DestHost的ethx,因为VM’对应Qemu进程正作为DestHost一个用户态进程,监听在ethx对应的内网ip(如图 1-3所示)。
图 1-3 虚拟机迁移数据
Step4 经过前面三步,虚拟机的数据就正式开始迁移,剩下的挑战是如何保证数据迁移的一致性,因为此时VM处于运行状态,里面时刻发生内存更新、磁盘io操作和设备状态变更,而VM’是paused状态,只通过一个线程接收VM进程发过来的数据。
为此,在迁移过程中各种数据如何有序迁移?首先,Libvirt会发送qmp_dirve_mirror命令来通知Qemu进行虚拟机磁盘数据迁移,从而在源端和目标端直接同步磁盘数据。然后,Libvirt会再次发送qmp_migrate命令通知Qemu进行虚拟机内存数据迁移,进一步完成虚拟机主要数据的迁移。最后,由于设备状态对应的数据量很少,在迁移最后阶段会通过一次性同步,将Qemu里每个设备注册的状态同步到目标端。
另外,迁移过程中发生变更的数据如何迁移?如果不迁移变更的数据,那数据必然不一致,也表明迁移还不能结束,因此Qemu一般通过数据迁移准备、数据迁移、数据迁移收尾三个步骤来完成。
循环调用磁盘和内存迁移函数也是按阶段来分别调用的。首先,循环调用磁盘和内存迁移函数的迁移数据准备功能,即前期准备工作,例如把磁盘按block为单位组织成一个数组,并设置记录脏块机制;把内存所有页全部设置为脏页,并发送开始迁移的标志到VM’的进程。
图 1-4 全量数据迁移示意图
紧接着,需要进行真正的数据迁移,Qemu在这个阶段调用磁盘和内存迁移函数的第二步骤功能,并且要求必须等磁盘数据迁移完成后才会执行内存数据迁移。如图 1-4所示,Qemu首先会进行磁盘(内存)的全量数据迁移,依次将每个block(页)迁移到目标端DestHost。
图 1-5 增量数据迁移示意图
然后再通过多次迭代,将迁移过程中虚拟机产生的新数据迁移到目标端DestHost(如图 1-5所示)。这一迭代过程是收敛的,收敛依据与之前设置的带宽、最大停机时间有关。同时,在迭代过程中,Qemu将边迁移边记录剩下的脏数据大小,并与停机时间进行比较,如果这个值比停机时间大,那么继续迁移,如果比停机时间小,那么源端Qemu进程就会暂停,从而避免产生新的脏数据,以便进行迁移收尾工作。
在虚拟机暂停之后,进入第三步迁移收尾工作,源端Qemu进程会把磁盘、内存脏数据和设备状态一次性同步到目标端,完成时VM和VM’的数据将会一致。这时,上层管理软件会把VM关闭,并把VM’的vcpu恢复运行状态,整个虚拟机的数据迁移就完成了。
切换阶段
Step5 数据迁移完成后,VM关闭,VM’作为它的一个完全拷贝,在DestHost上运行着,但网络还是不通的(如图 1-2所示)。VM’通过DestHost的vswitch 连接到物理机网卡,vswitch相当于一个虚拟交换机,而VM从SourceHost迁移到DestHost,在网络上相当于把网线从一个交换机拔下插到另一个交换机上,此时就需要一次arp广播,告知VM的mac地址已经变更到另外一台交换机的某个端口。
这就是迁移完成后的网络切换,由于切换时间很短,少于tcp的超时重传时间,因此对于原VM上跑着网络服务程序几乎是无感知的。此后,如图 1-6所示,目标端DestHost虚拟机就具备和用户直接进行交互的能力,而源端SourceHost虚拟机此时就可以删除。
图 1-6 完成虚拟机迁移示意图
总结
通过以上迁移步骤,可以在KVM虚拟化平台上实现虚拟机的跨越迁移,进而方便实现云平台负载均衡与系统运维,并确保用户虚拟机性能的可靠性。同时,从用户角度来看,这个过程并不需要关心虚拟机在源端SourceHost还是目标端DestHost,但可以持续与虚拟机进行交互,整个迁移过程对用户来说是透明的。
虽然,当前KVM虚拟化在线迁移能够满足大多数情况下的用户虚拟机迁移,但还存在以下问题:
在磁盘和内存负载高的情况下,存在迁移无法完成的情况;
跨机迁移存在网络中断时间长的问题;
跨存储类型的场景下如何进行迁移;
如何应用迁移进行虚拟机组件的更新。
后面的文章我们会更加深入介绍UCloud对各种在线迁移场景的优化和实践。
如果想把MAC系统上的jenkins移动到LINUX系统中,具体的操作方法有以下这几点,可以参考一下:
1、 jenkins的安装
jenkins安装有多种方式,一种是你直接下载,安装运行,这种方式依赖于它内置的Jetty web服务器。另一种是使用Tomcat或者Glassfish 应用服务器来运行。jenkins运行需要的系统环境推荐最低是:Java 8 (either JRE or JDK),256MB 空闲内存,1GB以上的磁盘空间。
1) 直接去官网下载
下载完成以后是一个后缀为pkg的文件,打开该文件就可以安装了。当然你也可以使用命令行的方式来安装。
例如Mac下:
安装最新的release版本:
brew install jenkins
或者安装LTS 版本
brew install jenkins-lts
2、 使用Tomcat作为运行服务器进行安装
在Tomcat上安装Jenkins,你可以将jenkinswar文件拷贝到$TOMCAT_HOME/webapps 目录下。
jenkins的配置。jenkins在安装时,需要勾选一些要安装的插件。当然这些插件也可以在安装完jinkins以后根据需要再安装。
1> General
General配置图
在这里在“参数化构建过程”项中,添加一些参数,来进行参数化构建。
例如:图中的Choice类型的BranchName,用于代码分支的选择,可以决定打那个分支上的代码。
2> 源代码管理
源代码管理]![这里写描述
由于使用的是Git工具来管理源代码,所以在这里安装的Git的插件。如果你没有看到下面的这一项,请检查你是否安装了Git的管理的插件。
这里配置上了代码仓库的地址。还有指定的分支的名字。分支名这里使用了上面配置的参数,用户在打包的时候可以选择分支。
注意:下面的数字10和33的值的设定在第一次拉取代码的时候是比较有用的,如果你的代码仓库比较大,提交次数比较多,那么设定该值,能够提高代码拉取的成功率。
3> 构建触发器
你可以根据情况构建触发器,例如什么时候触发打包,在这里我们使用手动build,所以没有配置。你可以根据情况来配置。
4> 构建环境
对于打包苹果的应用而言, 这里要指定你的证书文件。
5> 构建
这里的Target对应项目的Target。
在这里还可以指定打包后的输出文件的名字和目录。名字一般指定项目名和版本的组合。这样测试容易看出是哪个版本的包。
在这里需要指定访问keychain的路径和密码。
你也可以指定构建的shell命令,来帮你做一些事。例如生成一个用于下载plist配置文件。
6> 构建后的操作
当构建完成以后,你可以指定存档的文件,这里一般过滤ipa和dSYM文件。
这些配置完成以后,就完成了一个job项,之后就可以进行build编译了。如果没有问题,那么就可以进行打包了。如果有问题,你可以在该job下的Console Output中查看所报的错误,然后做相应的更改修正。
你也可以在jenkins的“用户”设置下做一些用户权限的控制。例如分配给他们的打包权限是:job还是view权限等。
所以,以上就是把MAC系统上的JENKINS移动到LINUX系统的具体操作方法,希望可以帮到你
1、MySQL Workbench
MySQL Workbench是一款专为MySQL设计的ER/数据库建模工具。它是著名的数据库设计工具DBDesigner4的继任者。你可以用MySQL Workbench设计和创建新的数据库图示,建立数据库文档,以及进行复杂的MySQL 迁移
MySQL Workbench是下一代的可视化数据库设计、管理的工具,它同时有开源和商业化的两个版本。该软件支持Windows和Linux系统,下面是一些该软件运行的界面截图:
2、数据库管理工具 Navicat Lite
NavicatTM是一套快速、可靠并价格相宜的资料库管理工具,大可使用来简化资料库的管理及降低系统管理成本。它的设计符合资料库管理员、开发人员及中小企业的需求。 Navicat是以直觉化的使用者图形介面所而建的,让你可以以安全且简单的方式建立、组织、存取并共用资讯。
界面如下图所示:
Navicat 提供商业版Navicat Premium 和免费的版本 Navicat Lite 。免费版本的功能已经足够强大了。
Navicat 支持的数据库包括MySQL、Oracle、SQLite、PostgreSQL和SQL Server 等。
3、开源ETL工具Kettle
Kettle是一款国外开源的etl工具,纯java编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job则完成整个工作流的控制。
·授权协议:LGPL
·开发语言: Java
·操作系统: 跨平台
4、Eclipse SQLExplorer
SQLExplorer是Eclipse集成开发环境的一种插件,它可以被用来从Eclipse连接到一个数据库。
SQLExplorer插件提供了一个使用SQL语句访问数据库的图形用户接口(GUI)。通过使用SQLExplorer,你能够显示表格、表格结构和表格中的数据,以及提取、添加、更新或删除表格数据。
SQLExplorer同样能够生成SQL脚本来创建和查询表格。所以,与命令行客户端相比,使用SQLExplorer可能是更优越的选择,下图是运行中的界面,很好很强大。
l授权协议: 未知
l开发语言: Java
l操作系统: 跨平台
5、MySQL管理工具phpMyAdmin
phpMyAdmin是一个非常受欢迎的基于web的MySQL数据库管理工具。它能够创建和删除数据库,创建/删除/修改表格,删除/编辑/新增字段,执行SQL脚本等。
l授权协议:GPL
l开发语言:PHP
l操作系统:跨平台
6、Mongodb 管理工具Mongodb Studio
Mongodb是一款性能优良,功能丰富的文档型非关系型数据库。由于该数据库是开源项目并且还在不断更新中,目前为止在任何平台上都不能找到功能相对完整的客户端数据库管理工具。而越来越多的项目中使用了Mongodb,使得管理起来十分麻烦如果点点鼠标就搞定了那该有多好。
基于如上背景,我们制作了此MongoDB管理工具,在DBA/开发/管理员三个维度提供一定层次的管理功能。
Mongodb Management Studio功能如下:
l服务器管理功能
添加服务器,删除服务器
l服务器,数据库,表,列,索引,树形显示和状态信息查看
l查询分析器功能
支持select,insert,Delete,update
支持自定义分页函 数 $rowid(1,5)查询第一条到第五条,需放在select后面
l索引管理功能
支持列名的显示,索引的创建,查看,删除
l数据库Profile管理
可以设置Profile开关,查看Profile信息自定义分页大小
lmaster/slave信息显示
7、MySQL监控小工具mycheckpoint
mycheckpoint是一个开源的 MySQL监控工具,主要用来监控数据。通过视图方式提供监控数据报表。mycheckpoint支持以独立的Web服务器来运行。
例如:SELECTinnodb_read_hit_percent, DML FROM sv_report_chart_sample;
P2V(Physical-to-virtual)的迁移过程需要涉及一系列的复杂操作,我们可以借助一些工具使整个迁移过程变得简单。本文描述了如何使用这样的一款工具——PlateSpin Migrate完成P2V过程。
使用PlateSpin Migrate工具不仅可以完成P2V的迁移,还可以支持多种工作方式。例如:支持V2P的转换,高级的PlateSpin Portability Suite还可以支持把服务器信息同步到镜像文件中,用于灾难后的快速恢复。本文讨论如何使用该工具完成Window服务器的P2V转化过程。
开始转化前的第一步,首先要把所有的服务器安装在网络环境中。只要被转化的服务器和安装了PlateSpin Migrate的Windows服务器在同一个域中,PlateSpin Migrate可以自动检测到域内的Linux和Windows服务器。完成检测后,把这些服务器自动添加到“Discovered Server”工作组中。假如需要被转化的服务器不在Windows域中,我们可以通过点击“Discover Server Details”按钮,启用手动检测工具来加入该服务器。在弹出对话框中,输入服务器的IP地址,管理员账户和密码。输入管理员账户时参照“Domain\username” 或“Servername\username”的格式。
扫描完成后,PlateSpin Migrate界面会有提示信息,显示服务器已经被加入到可用服务器列表中。在开始前,还有一点需要确认,就是需要迁移到的目标虚拟服务器也已经被扫
wk_ad_begin({pid : 21});wk_ad_after(21, function(){$('ad-hidden')hide();}, function(){$('ad-hidden')show();});
描并加入到可用列表中。目前迁移支持的目标服务器有:VMware, Citrix XenServer 和 Novell's SUSE Xen。
PlateSpin Migrate支持两种完成P2V转化的方式:拷贝和Move Workload拷贝方式允许源主机保持在线的运行状态,然后把所有的相关文件和配置迁移到目标服务器。用户需要提供一个新的服务器名称和IP地址分配给新的目标服务器。另外,如果转化完成后,系统运行不正常,源服务器仍然可用;另外一种可选方式是:创建一个Move Workload任务,这种方式下直接把让目标服务器直接接管源服务器的身份和工作。用户需要在迁移任务即将完成前,手动关闭源服务器。
创建Copy Workload任务的最简单方式就是直接把操作界面中左侧的源服务器拖拽到右侧的目标服务器图标上。这时,将自动弹出活动窗口界面
开始转化前,用户需要输入手动输入各种相关参数信息,以防止迁移过程失败。点击Advanced按钮,将打开 所示的界面,在这个界面中通过显著的错误提示方式来提醒用户需要输入的参数信息。
当从物理机环境迁移工作任务到虚拟机环境时,需要分配唯一的主机名称、IP地址给目标主机。通过点击Network Configuration > Network Identification,打开输入界面,输入新的主机名称,然后点击Generate New System Identifier,验证新的主机名称是否是唯一。接下来,点击Network Identification,选择网卡,分配唯一的IP地址给目标虚拟机。然后选择“Job Configuration > Credentials",进入证书管理界面,选择允许登陆源主机服务器和目标虚拟机服务所需的身份验证证书。如果仍然有其他的报警提示,请遵循转化任务窗口中的提示把问题一一解决。
当所有的问题都解决之后,通过点击Staret按钮来启动任务。根据迁移的数据量的多少差别,迁移过程需要持续一段时间。 轻松完成P2V等迁移过程
PlateSpin Migrate是一个功能强大的迁移工具,协助用户完成工作流的迁移,简化P2V的过程。PlateSpin Migrate可以支持物理机到虚拟机,虚拟机到镜像、镜像到物理机等多种迁移方式。您也可以看到,PlateSpin Migrate可以把物理机轻松迁移到您正在使用的任意虚拟机环境中。
0条评论