什么是KVM?
是Linux系统上的一种虚拟化平台,相当于Windows上安装VMware一样,以一种逻辑方式来打破原有的物理结构,可以允许一台服务器上运行多个操作系统,可以说KVM就是在Linux上安装的一款软件,可以在一台物理机上同时运行多个虚拟机
KVM有什么用?
如果Linux服务器利用率不高,则可以充分利用这些Linux服务器,在物理机上运行多个业务系统,合理运用资源
虚拟化的优势:
1.减少服务器成本,资源利用最大化
2.可以动态调整硬件资源,提高IT业务的灵活性
3.高可用性,具备更高效的故障防护手段
1.最简单的开启CUP虚拟化支持就是在安装系统的时候选择桌面,然后勾选虚拟化,安装虚拟化平台和工具
2.已经安装系统的话,安装KVM所需软件
yum -y groupinstall "Desktop"
yum -y install qemu-kvm qemu-kvm-tools python-virtinst.noarch qemu-img bridge-utils libvirt virt-manager
重启后检查CPU是否支持虚拟化
查看CPU是否支持虚拟化:cat /proc/cpuinfo | grep vmx
或者cat /proc/cpuinfo | grep -E 'vmx|svm'
检查kvm模块是否安装:lsmod | grep kvm
下图说明已经支持虚拟化也已经安装了kvm模块
配置KVM网卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:64:B2:56
TYPE=Ethernet
UUID=abc7b758-5ef0-40de-9444-cb56f44de31a
ONBOOT=on
NM_CONTROLLED=no
BOOTPROTO=none
BRIDGE="br0"
vim /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=on
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=192.168.0.101
NETMASK=255.255.255.0
GATEWAY=192.168.0.101
DNS1=192.168.0.101
重启网卡:service network restart
kvm管理工具:virt-manager
打开virt-manager:virt-manager
补充:出现下列问题为virt-manager版本问题,virt-manager-0.9.0-34版本对中文字符集的支持有问题
解决方法:卸载virt-manager-0.9.0-34版本,重新安装virt-manager-0.9.0-31.el6.x86_64
双击localhost(QEMU)选择存储选项,然后点击+可以新建存储池(创建一个虚拟机的存储池存放虚拟机文件,再创建一个存储池存放iso镜像文件)
把安装需要用的镜像都可以放在/kvm/iso这个目录下,方便使用
选择bdqn点击新建卷
创建一个test_kvm
然后回到初始管理页面,点击新建,创建一个虚拟机名字为CentOS6.5
然后最后点击完成就可以了,就会跟安装系统一样跳出窗口,开始使用
备注:这里的test为虚拟机的名称
KVM的配置文件存放位置:/etc/libvirt/qemu/
查看虚拟机状态:virsh list --all
虚拟机开机:virsh start test
虚拟机关机:virsh shutdown test
强制关闭虚拟机电源:virsh destroy test
通过配置文件启动虚拟机:virsh create /etc/libvirt/qemu/test.xml
挂起虚拟机:virsh suspen test
恢复虚拟机:virsh resume test
配置虚拟机伴随宿主自动启动(需要创建/etc/libvirt/qemu/autostart目录,内容为开机自动启动的系统):virsh autostart test
导出虚拟机配置:virsh dumpxml test > /etc/libvirt/qemu/test.xml.bak
删除虚拟机(virsh list --all命令查看删除结果):virsh shutdown test》virsh undefine test
通过备份的配置文件重新定义虚拟机:virsh define /etc/libvirt/qemu/test.xml
修改虚拟机配置信息:virsh edit test
虚拟机磁盘文件的两种格式:raw和qcow2
raw:默认格式,性能最好,速度最快,缺点是新功能的支持不齐全,
查看磁盘文件信息:qemu-img info /kvm/store/test.img
查看虚拟机磁盘信息:virt-df -h test
转换raw格式为qcow2格式
先关闭虚拟机:virsh shutdown test
转换格式:qemu-img convert -f raw -O qcow2 /kvm/store/test.img
文件文本操作
修改配置文件:virsh edit test(相当于vim命令)
查看配置文件:virt-cat -a /kvm/store/test.qcow2 /etc/sysconfig/network(相当于cat命令)
编辑文件:virt-edit -a /kvm/store/test.qcow2 /etc/php.ini
虚拟机克隆
首先要保证被克隆的虚拟机保持关闭状态
从test1克隆到test2:virt-clone -o test1 -n test2 -f /kvm/store/test2.qcow2
虚拟机快照
创建快照:virsh snapshot-create test
查看快照版本信息:virsh snapshot-current test
查看快照信息:virsh snapshot-list test
恢复快照:virsh snapshot-revert test 1382572463
删除快照:virsh snapshot-delete test 1382572463
备注:后面的数字是需要回到的版本号
KVM采取全虚拟化,全虚拟化是由一个软件来模拟硬件层,会有一定的损耗,特别是I/O,所以需要优化性能
CPU优化:所有虚拟机的guestcpu加起来的总数不要超过物理机,超过了会对性能带来严重的影响
内存优化
可以将内容相同的虚拟机内存合并(开启KSM),特别是操作系统一样的情况下,但是这个过程也会有性能消耗,需要考虑使用场景决定是否开启
查看内存页共享的情况:ll /sys/kernel/mm/ksm
pages_shared:该文件记录KSM共享的总页面数
pages_sharing:该文件记录当前共享的页面数
备注:每个页面的大小为4KB,内存大小(KB)=页面数X4
查询是否开启KSM:cat run(0为未开启,1为已开启)
临时开启KSM:echo 1 > run
开机自动开启KSM:echo 1 > /sys/kernel/mm/ksm/run
备注:该文件不支持vi编辑,只支持重定向
查看多长时间定期扫描相同页:cat pages_to_scan
备注:默认为100,越大越好,超过2000无效,需开启ksmtuned和tuned
查看当前虚拟机内存限制:virsh memtune vm
Hard_limit:强制最大内存
Soft_limit:可用最大内存
Swap_hard_limit:强制最大swap使用大小
设置强制最大内存100MB:virsh memtune vm --hard-limit 1024000 --live
--hard-limit:设置对象为强制最大内存
--soft-limit:设置对象为可用最大内存
--swap-hard-limit:设置对象为强制最大swap使用大小
--min-guarantee:保证最小内存
--config:下次重启生效
--live:在线生效
--current:只在当前生效
设置大页后端内存
查看内存信息:cat /proc/meminfo
1.指定大页需要的内存页面数(临时生效):echo 25000 > /proc/sys/vm/nr_hugepages
也可以vim /etc/sysctl.conf添加vi.nr_hugepages=2500来设置大页文件系统需要的内存页面数
2.关闭虚拟机:virsh destroy vm
3.编辑配置文件:virsh edit vm
添加
4.挂载hugetlbfs文件系统,启动虚拟机
mount -t hugetlbfshugetlbfs /dev/hugepages
service libvirtd restart
virsh start vm
5.查看HugePage内存页面信息:cat /proc/meminfo | grep HugePage
I/O的优化
调整I/O权重weight(100-1000之间),权重越高决定哪个虚拟机数据优先写入磁盘
限制具体的I/O:virsh blkiotune vm
设置权重值:virsh blkiotune vm --weight 500
或者修改XML配置文件
系统调优工具
tuned:服务端程序
tuned-adm:客户端程序
安装工具:yum -y install tuned
启动服务:service tuned start和service ktune start
查看当前优化方案:tuned-adm active
查看预先设定好的优化方案:tuned-adm list