QiHsMing 2017-03-02
一、前言
虚拟化技术已经成为未来计算机技术的一个重要的发展方向。Linux在虚拟化方面已经有了很多种解决方案:VMware、VirtualBox、Xen和KVM!现在给大家分享下本人在KVM里遇到坑及解决方法。
KVM简介
KVM是一个全虚拟化的解决方案。可以在x86架构的计算机上实现虚拟化功能。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel
CPU和具有AMD-V功能的AMD CPU。
在kvm技术中应用到2样东西:kvm+qemu
kvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备;
qemu是模拟IO设备(网卡,磁盘),kvm加上qemu之后就能实现真正意义上服务器虚拟化。
因为用到了上面两个东西,所以一般都称之为qemu-kvm
关于KVM的介绍在这里我就不多说了,有兴趣的童鞋可以自己去查找下;下面我们直接进行部署阶段。
二、环境介绍
本环境需要至少3台机器分别为:
1、KVM_Server_1: 192.168.30.131
2、KVM_Server_2: 192.168.30.132
3、iSCSI_Server: 192.168.30.133
三、安装前的准备(3台主机都需要操作)
1、开启BISO中的CPU虚拟化支持(具体方法在这里就不多介绍了)
2、查看系统对KVM虚拟化的支持
[root@localhost ~]# egrep "svm|vmx" /proc/cpuinfo |wc -l1 注:vmx是Intel系列CPU支持虚拟化的标签;
svm是AMD系列CPU支持虚拟化的标签;
如果数值大于0表示支持虚拟化
3、配置主机FQDN
[root@localhost ~]# hostname --fqdn
localhost
[root@localhost ~]# sed -i "s/HOSTNAME=.*$/HOSTNAME=KVM-1/g" /etc/sysconfig/network
[root@localhost ~]# hostname KVM-1
[root@KVM-1 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@KVM-1 ~]# echo "192.168.30.131 KVM-1" >> /etc/hosts
[root@KVM-1 ~]# echo "192.168.30.132 KVM-2" >> /etc/hosts
[root@KVM-1 ~]# hostname --fqdn
KVM-1
[root@KVM-1 ~]# exit
4、关闭Selinux
[root@KVM-1 ~]# grep "SELINUX=enforcing" /etc/selinux/config
SELINUX=enforcing
[root@KVM-1 ~]# sed -i 's/SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config
[root@KVM-1 ~]# setenforce 0[root@KVM-1 ~]# getenforce
Permissive
[root@KVM-1 ~]#
5、同步时间
[root@KVM-1 ~]# yum -y install epel-release
[root@KVM-1 ~]# yum -y install ntp*[root@KVM-1 ~]# date
Thu Mar 2 11:13:03 CST 2017
[root@KVM-1 ~]# cp -Rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
cp: overwrite `/etc/localtime'? y
[root@KVM-1 ~]# ntpdate 133.100.11.8
2 Mar 11:44:58 ntpdate[11762]: step time server 133.100.11.8 offset 1756.326390 sec
[root@KVM-1 ~]# sed -i 's#ZONE="America/New_York"#ZONE="Asia/Shanghai"#g' /etc/sysconfig/clock
[root@KVM-1 ~]# hwclock -w
[root@KVM-1 ~]# date -R
Thu, 02 Mar 2017 11:46:05 +0800
[root@KVM-1 ~]# echo "ntpdate 133.100.11.8" >> /etc/rc.d/rc.local
四、部署KVM;
以下操作需要在2台KVM宿主机上部署,这里以KVM-1为例给大家演示具体的安装流程
1、安装常用软件包
[root@KVM-1 ~]# yum -y install vim wget gcc make crontabs mlocate \
ntp lrzsz gcc-c++ autoconf setuptool ntsysv iptables \
system-config-securitylevel-tui system-config-network-tui \
sysstat dstat screen
2、安装KVM
[root@KVM-1 ~]# yum -y groupinstall Virtualization 'Virtualization Client' \
'Virtualization Platform' 'Virtualization Tools' 注:
Virtualization:提供虚拟机的环境,主要包含qumu-kvm
Virtualization-client:管理和安装虚拟机实例的客户端,主要有Python-virtinst,virt-manager,virt-viewer
Virtualization-platform:提供访问和控制虚拟客户端的接口,主要有libvirt,libvirt-client
Virtualization-tools:管理离线虚拟机镜像的工具,主要有libguestfs根据需求选择软件包。
3、启动 Libvirt 服务
[root@KVM-1 ~]# service libvirtd start
[root@KVM-1 ~]# chkconfig libvirtd on
[root@KVM-1 ~]# chkconfig --list libvirtd
libvirtd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
4、验证KVM模块的加载情况
[root@KVM-1 ~]# lsmod | grep kvm
kvm_intel 55464 0
kvm 345070 1 kvm_intel
5、创建网桥(必须操作)
[root@KVM-1 ~]# virsh iface-bridge eth0 cloudbr0
[root@KVM-1 ~]# df -h |egrep "Filesystem|sdb"
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 19G 2.2G 16G 13% /mnt
[root@KVM-2 ~]# df -h |egrep "Filesystem|sdb"
Filesystem Size Used Avail Use% Mounted on
/dev/sdb 19G 2.2G 16G 13% /mnt
六、创建Guest虚拟机
八卦:因为我们下一步要做Guest虚拟机在服务不中断的情况下从KVM-1的宿主机上动态迁移到KVM-2的宿主机上,所以我们在创建虚拟机的时候只需要在KVM-1的宿主机上创建就行了;但需要iSCSi的配置必须相同;
1、创建磁盘文件
[root@KVM-1 ~]# qemu-img create -f qcow2 /mnt/CentOS6.8.qcow2 10G
2、创建Guest虚拟机
[root@KVM-1 ~]# virt-install --name CentOS6.8 --os-variant=rhel6 --ram 512 --vcpus=1 \
--disk path=/mnt/CentOS6.8.qcow2,device=disk,format=qcow2,size=7,bus=virtio --accelerate \
--cdrom /mnt/iso/CentOS-6.8-x86_64-minimal.iso \
--vnc --vncport=5900 --vnclisten=0.0.0.0 \
--network bridge=cloudbr0,model=virtio --noautoconsole 参数介绍:
--name name 虚拟机名称,需全局惟一
--ram memory 分配给虚拟机的内存大小
--vcpus CPU 分配给虚拟机的cpu核心数
--disk 指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;常用的选项有:
device 设备类型,如cdrom、disk或floppy等,默认为disk;
bus 磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
perms 访问权限,如rw、ro或sh(共享的可读写),默认为rw;
size 新建磁盘映像的大小,单位为GB;
cache 缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
format 磁盘映像格式,如raw、qcow2、vmdk等;
sparse 磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
--cdrom 指定安装方法: 格式为 --cdrom /mnt/iso/CentOS-6.8-x86_64-minimal.iso
--vnc 开启VPN
--vncport vnc端口,默认为5900
--vnclisten vnc监听地址,建议设为:0.0.0.0 即:监听所有地址
--network 启用网络
bridge 桥接到物理桥
model 使用virtio驱动
--autoconsole 不自动打开终端
3、安装Guest虚拟机操作系统
使用vnc-Viever来连接
配置如下:
VNC地址:192.168.30.131:5900
注:如果出现窗口一闪就消失了,无法连接
解决方法:
点击vnc-viewer下面的options-----> expert ------> ColourLevel 的值改为rgb222 ---->确定
然后重新连接就OK了!
4、配置Guest虚拟机IP使其可以正常上网
具体配置在这里就不做演示了!
七、配置KVM动态迁移
前言
虚拟机的迁移技术为服务器的虚拟化提供简便的方法。目前流行的虚拟化产品 VMware,Xen,Hyper-V,KVM 都提供各自的迁移工具。其中 Linux 平台上开源的虚拟化工具KVM发展迅速,基于KVM的虚拟机的迁移特性也日趋完善。本文全面介绍KVM虚拟机在不同的应用环境下的静态迁移(离线迁移)和动态迁移(在线迁移),并且在最新发布的 SUSE Linux Enterprise Edition 11 SP1 上分别演示如何应用 libvirt/virt-manager 图形化工具和基于命令行的 qemu-kvm 工具进行迁移操作。
��移方式的分类
静态迁移
静态迁移:也叫做常规迁移、离线迁移(Offline Migration)。就是在虚拟机关机或暂停的情况下从一台物理机迁移到另一台物理机。因为虚拟机的文件系统建立在虚拟机镜像上面,所以在虚拟机关机的情况下,只需要简单的迁移虚拟机镜像和相应的配置文件到另外一台物理主机上;如果需要保存虚拟机迁移之前的状态,在迁移之前将虚拟机暂停,然后拷贝状态至目的主机,最后在目的主机重建虚拟机状态,恢复执行。这种方式的迁移过程需要显式的停止虚拟机的运行。从用户角度看,有明确的一段停机时间,虚拟机上的服务不可用。这种迁移方式简单易行,适用于对服务可用性要求不严格的场合。
共享存储的动态迁移
动态迁移(Live Migration):也叫在线迁移(Online Migration)。就是在保证虚拟机上服务正常运行的同时,将一个虚拟机系统从一个物理主机移动到另一个物理主机的过程。该过程不会对最终用户造成明显的影响,从而使得管理员能够在不影响用户正常使用的情况下,对物理服务器进行离线维修或者升级。与静态迁移不同的是,为了保证迁移过程中虚拟机服务的可用,迁移过程仅有非常短暂的停机时间。迁移的前面阶段,服务在源主机的虚拟机上运行,当迁移进行到一定阶段,目的主机已经具备了运行虚拟机系统的必须资源,经过一个非常短暂的切换,源主机将控制权转移到目的主机,虚拟机系统在目的主机上继续运行。对于虚拟机服务本身而言,由于切换的时间非常短暂,用户感觉不到服务的中断,因而迁移过程对用户是透明的。动态迁移适用于对虚拟机服务可用性要求很高的场合。
1、配置iSCSi共享存储
由于之前已经提到iscsi的配置方法了,且已经配置了这里就不多做介绍了
2、配置ssh免密码登录
a、KVM-1上操作
[root@KVM-1 ~]# ssh-keygen -t rsa
[root@KVM-1 ~]# scp /root/.ssh/id_rsa.pub [email protected]:/root/
b、KVM-2上操作
[root@KVM-2 ~]# ssh-keygen -t rsa
[root@KVM-2 ~]# scp /root/.ssh/id_rsa.pub [email protected]:/root/
[root@KVM-2 ~]# cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
c、KVM-1上操作
[root@KVM-1 ~]# cat /root/id_rsa.pub >> /root/.ssh/authorized_keys
d、相互测试登录情况
[root@KVM-1 ~]# ssh 192.168.30.132
[root@KVM-2 ~]# ssh 192.168.30.131
3、为了保证实验的顺利进行,我们先把iptables关闭
[root@KVM-1 ~]# service iptables stop
[root@KVM-2 ~]# service iptables stop
4、执行迁移
a、将Guest虚拟机从KVM-1上迁移至KVM-2上
[root@KVM-1 ~]# virsh list
Id Name State
----------------------------------------------------
11 centos running
[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
[root@KVM-1 ~]# virsh list
Id Name State
----------------------------------------------------
[root@KVM-1 ~]#
b、在KVM-2上查看
[root@KVM-2 ~]# virsh list
Id Name State
----------------------------------------------------
4 centos running
[root@KVM-2 ~]#
八、总结
关于KVM的动态迁移很多小伙伴儿们都没有提到需要做ssh免密码登录,在这里提醒大家一定要做哦,否则会出现错误的。
虽然在安装过程中踩到了很多坑,但本人还是坚持走了过来;下面来分享下大家在搭建过程中可能会遇到的坑:
1、迁移时遇到的错误描述:
[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: unable to connect to server at 'KVM-2:49152': No route to host 原因:你的免密登录没有成功
解决方法:重新做免密登录即可
2、迁移时的存储错误:
[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: Failed to open file '/mnt/CentOS6.8.qcow2': Input/output error
原因:存储没有挂载成功
解决方法:mount -o remount /dev/sdb /mnt
3、迁移时FQDN错误:
[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132/system
error: internal error hostname on destination resolved to localhost, but migration requires an FQDN
原因:两台宿主机没有FQDN名称
解决方法:重新配置FQDN,具体方法见上.
4、迁移时语法错误:
[root@KVM-1 ~]# virsh migrate centos --live qemu+ssh://192.168.30.132:/system
error: internal error Unable to parse URI qemu+ssh://192.168.30.132:/system
原因:qemu+ssh语法写错了
解决方法:正确的应该是:virsh migrate centos --live qemu+ssh://192.168.30.132/system
到此KVM的动态迁移就暂时到一个段落了,如果小伙伴儿们遇到问题可以直接回复或发邮件至:[email protected]