感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!
如果转载,请保留作者信息。
博客地址:http://blog.csdn.net/qq_21398167
在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进行虚拟机动态迁移
共享存储的动态迁移实验配置图
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:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/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。
存储池配置图
添加一个新的存储池。点击左下角的“+”号,弹出一个新的窗口。输入以下参数:
Name:存储池的名字。
Type:选择 netfs:Network Exported Directory。因为本文使用了 NFS 作为共享存储协议。
添加共享存储池
点击“Forward”后,输入以下参数:
Target Path:共享存储在本地的映射目录。本文中这个目录在源主机和目的主机上必须一致。
Format:选择存储类型。这里必须是 nfs。
Host Name:输入共享存储服务器,也就是 NFS服务器的 IP地址或 hostname。
Source Path:NFS服务器上输出的共享目录。
存储池设置
点击“Finish”后,共享存储添加成功。此时在物理机上查看 Linux系统的文件系统列表,可以看到共享存储映射的目录。
源主机上创建基于共享存储的 KVM虚拟机。
选择共享存储池,点击”New Volume”创建新的存储卷。
输入存储卷参数。本例为虚拟机创建了大小为10G,格式为 qcow2的存储卷。
添加存储卷
在这个共享存储卷上创建虚拟机。本文创建了一个基于 Window 2008 R2系统的虚拟机。
连接远程物理主机上的 VMM。这里以源主机为例,目的主机做相同的配置。
在源主机上打开 virt-manager应用程序,连接localhost本机虚拟机列表。点击 File->Add Connection,弹出添加连接窗口,输入以下各项:
Hypervisor:选择 QEMU。
Connection:选择连接方式 。本文选择 SSH连接。
Hostname:输入将要连接的主机名或 IP地址,这里填写目的主机名 victory4。
添加远程 VMM 连接
点击 Connect,输入 SSH连接的密码后,将显示源主机和目的主机上的虚拟机列表。
管理远程 VMM
从源主机动态迁移 KVM虚拟机到目的主机。
在源主机上启动虚拟机 Windwos2008 R2。
在虚拟机中,开启实时网络服务(用来验证迁移过程中服务的可用性)。
准备动态迁移,确保所有的虚拟存储设备此时是共享的,包括 ISO和 CDROM。
在源主机的 virt-manager窗口中,右键点击等待迁移的虚拟机,选择“Migrate ”。
New host:选择目的主机的 hostname。
Address:填入目的主机的 IP地址。
Port and Bandwith:指定连接目的主机的端口和传输带宽,本文中没有设定,使用默认设置。
虚拟机迁移设置
点击“Migrate”和“Yes”开始动态迁移虚拟机。
图 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...
[email protected]'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镜像。
其他设置的信息同server02上img虚拟机的信息一致
单击“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.xml中source 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添加解析的ip和target的域名即可