感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!
如果转载,请保留作者信息。
博客地址:http://blog.csdn.net/qq_21398167

原博文地址:http://blog.csdn.net/qq_21398167/article/details/46414087

CentOS7+KVM上实现服务器的迁移   

目录

注:本文使用的virt-manager版本为0.8.4.1

1.使用virt-manager管理多台虚拟机...1

2.使用virt-manager进行虚拟机动态迁移...2

3.使用virt-manager进行虚拟机静态迁移...11

4.动态迁移遇到的问题以及解决方案...15

 

 

注:本文使用的virt-manager版本为0.8.4

 

1.使用virt-manager管理多台虚拟机
   在一台机器上的virt-manager可以通过add connection管理其它机器上的虚拟机,一般通过"remote tunnel over ssh"就可以了,前提是建立SSH连接,为了简单起见,最好配置密钥证书认证模式,采用无密码登录。简单配置如下:

$ ssh-keygen -trsa 产生SSH公钥及私钥
$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@somehost #
拷贝公钥到需要管理的机器上。

配置好以后命令行输入virt-manager打开管理界面。选择fileà Add Connecttion..

依次填入文本框中内容如下:

Hypervisor: QEMU/KVM

Method:SSH

Username:root

Hostname:192.168.0.123  (需要被操作的服务器地址)

然后点击connect连接即可,此时就会出现另一台服务器上的虚拟机供操作。

 

2.使用virt-manager进行虚拟机动态迁移

 

 共享存储的动态迁移实验配置图
图 3. 共享存储的动态迁移实验配置图 

1.确保网络连接正确,源主机、目的主机和 NFS服务器之间可以互相访问。

2.  确保源主机和目的主机上的 VMM运行正常。

3.  设置 NFS服务器的共享目录。

 

NFS服务器安装

# yum install nfs*

# yum install rpcbind-*

 

NFS服务的配置文件为/etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。

/etc/exports文件内容格式:

<输出目录>

[客户端1选项(访问权限,用户映射,其他)]

[客户端2选项(访问权限,用户映射,其他)]

输出目录:

输出目录是指NFS系统中需要共享给客户机使用的目录。

客户端:

客户端是指网络中可以访问这个NFS输出目录的计算机

客户端常用的指定方式

指定ip地址的主机:192.168.0.200

指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0

指定域名的主机:david.bsmart.cn

指定域中的所有主机:*.bsmart.cn

所有主机:*

 

选项:

选项用来设置输出目录的访问权限、用户映射等。

NFS主要有3类选项:

访问权限选项

设置输出目录只读:ro

设置输出目录读写:rw

用户映射选项

all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);

no_all_squash:与all_squash取反(默认设置);

root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);

no_root_squash:与rootsquash取反;

anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);

anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

 

 

其它选项

secure:限制客户端只能从小于1024tcp/ip端口连接nfs服务器(默认设置);

insecure:允许客户端从大于1024tcp/ip端口连接服务器;

sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

async:将数据先保存在内存缓冲区中,必要时才写入磁盘;

wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);

no_wdelay:若有写操作则立即执行,应与sync配合使用;

subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)

no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

/home/image*(rw,sync,no_root_squash)    (这里有多少台服务器就需要给每台服务器配置)

重新启动 nfsserver服务

# service nfsserver restart

 

首先在源主机和目的主机上添加共享存储。这里以源主机为例,目的主机做相同的配置。

添加 NFS存储池到源主机和目的主机的 vit-manager中:点击 Edit menu->HostDetails->Storage tab 
存储池配置图
图 4. 存储池配置图 

添加一个新的存储池。点击左下角的“+”号,弹出一个新的窗口。输入以下参数:

Name:存储池的名字。

Type:选择 netfsNetwork Exported Directory。因为本文使用了 NFS 作为共享存储协议。 

 

 

 

添加共享存储池
图 5. 添加共享存储池 

点击“Forward”后,输入以下参数:

Target Path:共享存储在本地的映射目录。本文中这个目录在源主机和目的主机上必须一致。

Format:选择存储类型。这里必须是 nfs

Host Name:输入共享存储服务器,也就是 NFS服务器的 IP地址或 hostname

Source PathNFS服务器上输出的共享目录。 
存储池设置

图 6. 存储池设置 

点击“Finish”后,共享存储添加成功。此时在物理机上查看 Linux系统的文件系统列表,可以看到共享存储映射的目录。

源主机上创建基于共享存储的 KVM虚拟机。

选择共享存储池,点击”New Volume”创建新的存储卷。

输入存储卷参数。本例为虚拟机创建了大小为10G,格式为 qcow2的存储卷。 
添加存储卷

图 7. 添加存储卷 

在这个共享存储卷上创建虚拟机。本文创建了一个基于 Window 2008 R2系统的虚拟机。

连接远程物理主机上的 VMM。这里以源主机为例,目的主机做相同的配置。

在源主机上打开 virt-manager应用程序,连接localhost本机虚拟机列表。点击 File->Add Connection,弹出添加连接窗口,输入以下各项:

Hypervisor:选择 QEMU

Connection:选择连接方式 。本文选择 SSH连接。

Hostname:输入将要连接的主机名或 IP地址,这里填写目的主机名 victory4 
添加远程 VMM 连接

图 8. 添加远程 VMM 连接 

点击 Connect,输入 SSH连接的密码后,将显示源主机和目的主机上的虚拟机列表。 

管理远程 VMM
图 9. 管理远程 VMM 

从源主机动态迁移 KVM虚拟机到目的主机。

在源主机上启动虚拟机 Windwos2008 R2

在虚拟机中,开启实时网络服务(用来验证迁移过程中服务的可用性)。

准备动态迁移,确保所有的虚拟存储设备此时是共享的,包括 ISO CDROM

在源主机的 virt-manager窗口中,右键点击等待迁移的虚拟机,选择“Migrate ”

New host:选择目的主机的 hostname

Address:填入目的主机的 IP地址。

Port and Bandwith:指定连接目的主机的端口和传输带宽,本文中没有设定,使用默认设置。
虚拟机迁移设置

图 10. 虚拟机迁移设置 

 

点击“Migrate”“Yes”开始动态迁移虚拟机。 
11. 虚拟机迁移进度

图 11. 虚拟机迁移进度 

 

 

3.使用virt-manager进行虚拟机静态迁移

关闭server02上的虚拟机vm02-win2003,然后将虚拟磁盘镜像vm02-win2003se.img文件上传到server01

  [root@server02 home]# sftp 10.8.0.124

Connecting to 10.8.0.124...

  root@10.8.0.124's password:

sftp> put vm02-win2003se.img

Uploading wm02-win2003 to/root/vm01-wi2003se.img

vm02-win2003se.img 100% 10G11.1MB/s 15:21 

  sftp> exit

  

方法一、图形界面导入磁盘镜像

     server01上导入vm02-win2003se.img文件,

  整个过程跟创建新VM差不多,与新建不一同的是,这里选择导入从server02上传过来的img镜像。

  

  

  

 

 

其他设置的信息同server02img虚拟机的信息一致

  

  

       单击“Finish”,VMM便自动运行该虚拟机了。

    迁移过程中,server02 vm02-win2003se的静态网络配置在server01vm11-win2003se中变成了动态获取。

  

方法二、使用命令导入磁盘镜像

       /etc/libvirt/qemu目录下,有与虚拟机相对应的xml配置文件。

   如果使用命令导入磁盘镜像的话,从源主机拷贝镜像文件和 XML 配置文件到目的主机中。也就是说,除了vm02-win2003se.img镜像文件外,还需要将server02 /etc/libvirt/qemu目录下的vm02-win2003se.xml文件也传到server01上,并且放到/etc/libvirt/qemu目录下。然后对 xml 进行适当的修改并激活。

     由于vm02-win2003se.img镜像文件放在/root目录下,故需将vm02-win2003se.xmlsource file的值改为/root/vm02-win2003se.img

  <disk type='file' device='disk'>

  <driver name='qemu' type='raw' cache='none'/>

  <source file='/root/ vm02-win2003se.img '/>

  <target dev='hda' bus='ide'/>

 <address type='drive' controller='0' bus='0' unit='0'/>

  </disk>

     激活虚拟机配置文件

    # virsh define /etc/libvirt/vm02-win2003se.xml

     至此,便完成的虚拟机的迁移,server01上有一个名为vm02-win2003se的虚拟机。如何要将此虚拟机改名为vm11-win2003se的话,需在xml文件中的第二行对name时行修改,xml文件和镜像文件也修改也一致比较好。

  启动该虚拟机

  #virsh start vm02-win2003se

4.动态迁移遇到的问题以及解决方案

动态迁移的一些必要条件:

1.关闭防火墙  Iptable –F

2.配置文件/etc/hosts 添加对应的IP和主机名(192.168.0.121 hostname

3关闭 selinux服务

 

问题1 
error: internal error hostname on destination resolved to localhost, butmigration requires an FQDN 

因为默认情况下hostname localhost,我们需要把目标的hostname修改一下,临时的也可以。 
#hostname target 
问题2 
error: internal error Attempt to migrate guest to the same host00020003-0004-0005-0006-000700080009 
    
这个在mail list中有大牛说是服务器提供商的问题,你可以用#dmidecode -s system-uuid查看一下这个ID,理论上是#virsh sysinfo | grep uuid# virsh capabilities | grep uuid,这三个ID是一样的。

修改一下libvirtd的配置文件 
#sed -i "/#host_uuid/ahost_uuid = \"`uuidgen`\""/etc/libvirt/libvirtd.conf 
   
重启一下libvirtd服务 
# /etc/init.d/libvirtd restart 
   
然后再查看一下 
# virsh capabilities | grep uuid 


问题3
error: unable to set user and group to '107:107' on '/image/vmtest/disk.img':No such file or directory 
   
如果顺利进入到这步的话,就很简单了,没有directory直接创建一个就可以,没有disk.img直接create一个 
注:创建的磁盘应该和源虚拟机的磁盘是一样的大小(更大应该是可以)和格式(raw还是qcow2

qemu-img create /image/vmtest/disk.img+sizeG 

问题4 
error: Unable to resolve address 'target' service '49155': Name or service notknown 
   
/etc/hosts添加解析的iptarget的域名即可

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐