热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

企业级虚拟化实战之KVM——虚拟机迁移

迁移概述系统的迁移是指把源主机上的操作系统和应用程序移动到目的主机,并且能够在目的主机上正常运行在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术。在源主机上实时备份操

迁移概述

系统的迁移是指把源主机上的操作系统应用程序移动到目的主机,并且能够在目的主机上正常运行


在没有虚拟机的时代,物理机之间的迁移依靠的是系统备份和恢复技术。在源主机上实时备份操作系统和应用程序的状态,然后把存储介质连接到目标主机上,最后在目标主机上恢复系统。随着虚拟机技术的发展,系统的迁移更加灵活和多样化。


迁移的目的:



  • 简化系统维护管理

  • 提高系统负载均衡

  • 增强系统错误容忍度

  • 优化系统电源管理


热迁移--Live Migration

热迁移(又叫动态迁移、实时迁移),即虚拟机保存(save)/恢复(restore):将整个虚拟机的运行状态完整保存下来,同时可以快速的恢复到原有硬件平台甚至是不同硬件平台上。恢复以后,虚拟机仍旧平滑运行,用户不会察觉到任何差异。



























迁移的种类解释
P2P物理机之间的迁移
V2P虚拟机迁到物理机
P2V物理机迁到虚拟机
V2V虚拟机迁到虚拟机

热迁移的应用

双机容错或者负载均衡

系统硬件维护

数据库备份

环境重现

计算机共享


1.虚拟机的热迁移技术最初是被用于双机容错或者负载均衡:当宿主机出现软硬件故障导致服务异常时,虚拟机可漂移到另外主机上,或者在集群中依据工作负载量的大小,选择更换宿主机与否来保证自身良好的服务提供性。

2.系统硬件维护:当前很多操作系统都能够稳定支持7x24运行,但是硬件却需要定期的进行维护。如果使用虚拟机的动态迁移技术,将虚拟机从需要维护的物理机器迁移到另外一主器,等维护完成后,在将其迁回到原来的物理机器。所有的系统服务和应用程序在迁移&恢复后仍旧正常运行,用户不会察觉到由于硬件维护造成的中断。最终实现了我们服务不受硬件维护干扰的7*24小时的工作愿望。

3.数据库备份:对于一些大型、 关键的数据库应用,备份是一项重要但复杂的工作。 虚拟机的保存/恢复可以将数据库运行在虚拟机中,如需备份就保存虚拟机,这样数据库中的所有数据、状态都做了备份。如果数据库崩溃了,就可以通过恢复虚拟机来恢复整个数据库。

4.环境重现:进行性能测试或程序调试时,都需要重现当时复杂庞大并且与实时完全一致的网络环境 ,不仅仅是重启、配置软件,而且常常需要一定的运行时间。我们可以将各服务安装到独立的各个虚拟机,然后利用各个独立虚拟机部署我们所需的工作环境,可以大大缩短环境重现时间。

5.计算机共享:在一些公共场合用户需要共享计算机,但是由于不同的系统配置和软件需要花费大量的时间来配置和恢复。这时使用虚拟机的保存/恢复可以很好地解决这个问题。或者也可以,在物理机上运行多个逻辑虚拟机帮助我们分配给每一个需要者一个独立,安全,稳定的环境。当因为宿主机出现问题影响虚拟机使用时,我们可以让该虚拟机漂移到其他宿主机以此来保持正常工作。



热迁移的优势

1.首先是可伸缩性比较强,IT管理者可以在合理时间段让运行某些关键业务的服务器适当减少工作量,以便进行更新操作系统,给应用程序打补丁等。而到了服务高峰期,又可以弹性地进行大负载量的运算。虚拟机迁移过程完全透明,几乎不影响使用。

2.其次,现在的数据中心都追求环保节能,工作量负载大的应用程序必然会令服务器能耗增加,有了虚拟机热迁移技术,当一台物理服务器负载过大时,系统管理员可以将其上面的虚拟机迁移到其他服务器,可有效减低数据中心服务器的总体能耗,再通过冷却系统将数据中心的温度保持在正常水平


热迁移的局限

进行虚拟机的热迁移也有不少的限制。例如,VMotion 在进行迁移之前,管理软件会检测目标服务器的X86架构是否与原服务器兼容。包括存储设备以及处理器,虚拟机必须放到共享的存储里,CPU 的类型也要一样,不仅不能一个是英特尔, 一个是AMD,甚至相同厂商不同产品线的CPU也不行,比如英特尔至强和奔腾


衡量虚拟机迁移的效率

(1)整体迁移时间

从源主机中迁移操作开始到目的主机上客户机服务处于不可用状态的时间,此时源主机上客户机已经暂停服务,目的主机上的客户机还未恢复服务。

(2)服务器停机时间

在迁移过程中,源主机和目的主机上的客户机都处于不可用状态的时间,此时源主机上客户机已暂停,目的目的主机.上客户还未恢复服务。

(3)对服务的性能影响

不仅包括迁移后的客户机中应用程序的性能与迁移前相对比是否有所降低,还包括迁移后对目的主机上的其他服务的性能影响。

Kvm动态迁移,也有如下几个建议和注意事项:
1.源宿主机和目的宿主机直接尽量用网络共享的存储系统来保存客户机磁盘镜像。例如NFS,
ISCSI,Glusterfs等。
2.为了提高动态迁移的成功率,尽量在同类型cpu的主机上面进行动态迁移,尽管kvm动态迁移也支持从Intel平台迁移到amd平台。但,从安全性,稳定度考虑不建议这样去操作! ! !
3.64位的客户机只能运行在64宿主机之间的迁移,而32位客户机可以在32宿主机和64位宿主机
之间迁移。
4.在进行动态迁移时,被迁移客户机的名称是唯一的,在目的宿主机上不能有与源宿主机被迁移客户机同名的客户机存在。
5.目的宿主机和源宿主机的软件尽可能的相同。也就是同为Vmware,KVM,Xen等。

热迁移实例

KVM动态迁移目前有两种,一种是基于共享存储的动态迁移,一种是基于数据块的动态迁移,需要qemu-kvm-0.12.2以上版本支持,OEL6.3版本是qemu-kvm-0.12.1.2,其它发行版可能有支持


虚拟化平台架构

在这里插入图片描述


NFS服务器配置

[root@python ~]# cat /etc/exports
/nfs-storage 192.168.213.0/24(rw,sync,no_root_squash)
[root@kvm ~]# showmount -e 192.168.213.163
Export list for 192.168.213.163:
/nfs-storage 192.168.213.0/24

宿主主机配置准备

(1)节点1挂载nfs目录(存储池)

[root@7u4-test ~]# virsh pool-define-as nfs-storage --source-format nfs --type netfs --source-host 192.168.213.163 --source-path /nfs-storage --target /nfs-storage
[root@7u4-test ~]# virsh pool-start nfs-storage
池 nfs-storage 已启动

(2)节点2挂载nfs目录(存储池)

[root@kvm ~]# virsh pool-define-as nfs-storage --source-format nfs --type netfs --source-host 192.168.213.163 --source-path /nfs-storage --target /nfs-storage
Pool nfs-storage defined
[root@kvm ~]# virsh pool-start nfs-storage
Pool nfs-storage started

确保两节点都有相同的虚拟机磁盘文件存储目录

在这里插入图片描述在这里插入图片描述


KVM虚拟机配置

(1)上传镜像

#centos7u4是制作好的后备镜像
[root@7u4-test vmdisk]# scp centos7u4.qcow2 192.168.213.163:/nfs-storage

(2)在node1上创建虚拟机

基于后备镜像创建磁盘文件

[root@7u4-test ~]# qemu-img create -f qcow2 -b /nfs-storage/centos7u4.qcow2 /nfs-storage/node-7u4.img
Formatting '/nfs-storage/node-7u4.img', fmt=qcow2 size=10737418240 backing_file='/nfs-storage/centos7u4.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off

创建虚拟机配置文件

[root@7u4-test ~]# vim /etc/libvirt/qemu/node-7u4.xml

(3)define虚拟机&&启动虚拟机

[root@7u4-test qemu]# virsh define node-7u4.xml
定义域 node-7u4(从 node-7u4.xml)
[root@7u4-test qemu]# virsh list --all
Id 名称 状态
----------------------------------------------------
10 node-7u4 running
- centos7-1 关闭
- centos7u4 关闭
- windows7 关闭

虚拟机迁移

(1)将虚拟机配置文件备份并传递到node2

#备份配置文件
[root@7u4-test ~]# virsh dumpxml node-7u4 >node-7u4.xml
#将备份文件上传到node2上并添加到域
[root@7u4-test ~]# scp node-7u4.xml root@192.168.213.128:/root
[root@kvm ~]# virsh define node-7u4.xml
Domain node-7u4 defined from node-7u4.xml

(2)迁移

因为测试我们忽略错误和安全隐患,此外需要配置主机名的host解析

[root@7u4-test ~]# cat /etc/hosts
192.168.213.171 7u4-test
192.168.213.128 kvm

同时给虚拟机配置好网络,并常ping

[ root@bogon nfs-storage ]# ping 192.168.122.100
| PING 192.168. 122.100 (192.168.122.100) 56(84) bytes of data.
54 bytes from 192.168.122.100: icmp seq=1 ttL=64 time=1.32 ms

在node1上虚拟机运行状态

[root@7u4-test ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
10 node-7u4 running

在node2上虚拟机是停运状态

[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
- node-7u4 shut off

配置免密互信,执行迁移命令

[root@7u4-test ~]# virsh migrate --live --verbose --abort-on-error --unsafe node-7u4 qemu+ssh://192.168.213.128/system
root@192.168.213.128's password:
迁移: [100 %]

迁移完成后

[root@7u4-test ~]# virsh list --all
Id 名称 状态
----------------------------------------------------
- centos7-1 关闭

[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
1 node-7u4 running

在ping的节点上查看,业务几乎没有中断(丢包可忽略,没有影响ping测试)

[root@python ~]# while true;do curl 192.168.213.188;sleep 1;done

在这里插入图片描述在这里插入图片描述


问题与解决

1.在进行热迁移时,出现错误:Unable to find security driver for model selinux

原因: 两个节点selinux状态不同,一个是selinux disabled,另一个是selinux permission

2.启动NFS中的虚拟机失败:Could not open '/nfs-storage/node-7u4.img': Permission denied

[root@7u4-test qemu]# virsh start node-7u4
错误:开始域 node-7u4 失败
错误:内部错误:process exited while connecting to monitor: 2020-05-07T13:59:15.032691Z qemu-kvm: -drive file=/nfs-storage/node-7u4.img,format=qcow2,if=none,id=drive-virtio-disk0: could not open disk image /nfs-storage/node-7u4.img: Could not open '/nfs-storage/node-7u4.img': Permission denied

解决方法: 关闭selinux

3.虚拟机与宿主机不在同一网段

在节点上新增NAT网卡,设置为bridge模式,使虚拟机成为网络中具有独立IP的主机

在这里插入图片描述4.在进行热迁移时,出现错误:error: unable to connect to server at '7u4-test:49152': No route to host

原因: 免密登录没有成功,重新做免密登录;也有可能是firewalld导致迁移时免密失败



推荐阅读
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 在单位的一台4cpu的服务器上部署了esxserver,挂载了6个虚拟机,目前运行正常。在安装部署过程中,得到了cnvz.net论坛精华区 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 域名解析系统DNS
    文章目录前言一、域名系统概述二、因特网的域名结构三、域名服务器1.根域名服务器2.顶级域名服务器(TLD,top-leveldomain)3.权威(Authoritative)域名 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
author-avatar
瓜子HR刘冲
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有