HV如何在线迁移Linux

HV如何在线迁移Linux,第1张

前言

当前,云计算技术的飞速发展对企业降低IT投入成本、减少系统运维开销、加速业务交付速度、动态调整业务规模以及保障业务可靠性具有重要意义。

目前,云计算带来的这些好处依赖于底层虚拟化技术将服务器资源虚拟出多份可供用户使用的计算资源,从而方便云计算提供商为企业用户提供高效、d性、高可靠和可维护的底层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对各种在线迁移场景的优化和实践。

网站服务器迁移方案,更换主机如何完成网站的迁移工作呢迁移的步骤和注意事项如下:
1、做好前期的检查工作
服务器尽量不要随意更换,要迁移的时候应该检查要更换的主机IP是否安全。
2、网站数据做备份
迁移网站前,一定要备份。
3、保留原网站至少7天
准备网站迁移的话,至少要将原有网站内容保存7天以上,这几天内不用更新网站,这是为了保证搜索引擎仍可以使用原来的IP地址访问到网站的内容。因为很多搜索引擎会都会缓存DNS,如果迁移网站马上就删除原网站的全部数据,就可能导致出现大量的404错误页面,因此一定要等搜索引擎更新DNS缓存之后,才可以删除原数据。
4、在访问量少的时段迁移
一般情况下,凌晨时刻是极佳的网站迁移时段。
5、确认新网站是否正常
使用FTP迁移到新的虚拟主机上,要手动确认网站能否正常访问。
6、对域名A记录进行解析
域名解析设置方法:会员登录→域名管理→点击需要解析的域名→域名解析服务→设置新的解析地址,也就是对域名的A记录进行修改。在域名控制面板解析好后,迅速对网站控制面板中的域名从新设置,一般两个小时左右就可以成功访问新的主机了。

1、为了使新服务器的配置和引入尽可能简单,整理您当前使用的服务器是必要的。因此,数据迁移是删除任何冗余或过期页面、备份、电子邮件和用户帐户的最佳时间。这意味着您将传输的数据量减少到最小,另一方面,您可以从目标系统上的所需资源中获得更大的价值。
2、您应该为关闭活动服务器进程制定准确的计划,以便以后不会出现数据丢失导致的复杂情况。指定应停止对文件、脚本和配置所做的任何更改的时间,并尽可能临时阻止对数据库的访问。也可以稍后更新您的数据库。在大多数情况下,数据传输是通过完整的服务器备份进行的。

caching_sha2_password认证插件提供更多的密码加密方式,并且在加密方面具有更好的表现,目前MySQL 80选用caching_sha2_password作为默认的认证插件,MySQL 57的认证插件是MySQL_native_password。如果客户端版本过低,会造成无法识别MySQL 80的加密认证方式,最终导致连接问题。

MySQL存储引擎现在负责提供自己的分区处理程序,而MySQL服务器不再提供通用分区支持,InnoDB和NDB是唯一提供MySQL 80支持的本地分区处理程序的存储引擎。 如果分区表用的是别的存储引擎,存储引擎必须进行修改。要么将其转换为InnoDB或NDB,要么删除其分区。通过MySQLdump从57获取的备份文件,在导入到80环境前,需要确保创建分区表语句中指定的存储引擎必须支持分区,否则会报错。

MySQL 80的默认字符集utf8mb4,可能会导致之前数据的字符集跟新建对象的字符集不一致,为了避免新旧对象字符集不一致的情况,可以在配置文件将字符集和校验规则设置为旧版本的字符集和校验规则。

MySQL 80启动使用的lower_case_table_names值必须跟初始化时使用的一致。使用不同的设置重新启动服务器会引入与标识符的排序和比较方式不一致的问题。

< lower_case_table_names >

>

要避免MySQL 80上的启动失败,MySQL配置文件中的sql_mode系统变量不能包含NO_AUTO_CREATE_USER。

从MySQL 5724和MySQL 8013开始,MySQLdump从存储程序定义中删除了NO_AUTO_CREATE_USER。必须手动修改使用早期版本的MySQLdump创建的转储文件,以删除NO_AUTO_CREATE_USER。

在MySQL 8011中,删除了这些不推荐使用的兼容性SQL Mode:DB2,MAXDB,MSSQL,MySQL323,MySQL40,ORACLE,POSTGRESQL,NO_FIELD_OPTIONS,NO_KEY_OPTIONS,NO_TABLE_OPTIONS。从57到80的复制场景中,如果语句使用到废弃的SQL Mode会导致复制异常。

在执行到MySQL 803或更高版本的in-place升级时,BACKUP_ADMIN权限自动授予具有RELOAD权限的用户。

本文对MySQL 57到MySQL 80的升级过程中出现部分易出现问题进行整理:升级对MySQL版本的要求、升级都做了哪些内容、数据库升级做了哪些步骤以及注意事项,希望对大家版本升级有帮助。

如果您在升级 Windows 10 后发现您的数据存储在国外,您可以采取以下措施:

更改数据存储位置:如果您使用的是云存储服务,例如 OneDrive、Dropbox 或 Google Drive 等等,您可以将您的数据迁移到本地存储设备上,例如硬盘或USB驱动器。这可以确保您的数据仅存储在您掌控之中的设备上。

采取加密措施:如果您必须将数据存储在云端,您可以采取更强的加密措施来保护您的数据。例如,在存储敏感信息之前,您可以使用数据加密软件对其进行加密。

遵守数据隐私法规:如果您的数据包含个人信息或其他敏感信息,您需要遵守本地数据隐私法规,例如欧盟的 GDPR 或美国的 CCPA 等等。这些法规可以帮助保护您的数据免受非法访问或滥用。

寻求专业帮助:如果您不确定如何处理存储在国外的数据,您可以寻求专业帮助,例如数据隐私和安全专家或法律顾问。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13112345.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存