KVM

云计算是模式
虚拟化是技术
最好在centos7上搭建kvm,centos7可以完美的支持kvm
kvm是一个内核模块,KVM管理工具,主要围绕libvirt的
查看机器是否支持虚拟化
现在的服务器vt-x是默认开启
grep vmx /proc/cpuinfo 查看
安装qemu,virt
yum -y install qemu-kvm qemu-kvm-tools virt-manager libvirt virt-install
lsmod|grep kvm #查看kvm内核是否被加载
设置硬盘模式,创建虚拟磁盘,-f指定路径
全镜像模式:raw
稀松模式:qcow2
qemu-img create -f raw /data/raw/centos-7.1-x86_64.raw 10G ## #创建虚拟磁盘,-f指定格式,路径/opt/CentOS-7.1-x86_64.raw,大小10G
查看服务状态
systemctl enbale libvirtd.service ##libvirtd加入开机启动
systemctl start libvirtd.service
systemctl status libvirtd.service
创建虚拟机
virt-install --name centos-7_64 --virt-type kvm --ram 1024 --cdrom=/opt/CentOS-7-x86_64-DVD-1503-01.iso --disk path=/data/raw/centos-7.1-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
VNC连接
windows上安装个vnc,去连接这台机器的5900端口,就可以看到安装centos7的界面
##按tab建,编辑网卡名称

后面写入 net.ifnames=0 biosdevname=0 回车即可
virsh list --all 查看虚拟机状态
配置文件
kvm中虚拟机的是以xml的文件来生成的,如果要进行热添加,需要使用virsh edit centos-7.xml
CPU热添加
kvm虚拟机热添加cpu 注意。只能添加不能减少,而且不能超过设置的个数
virsh edit CentOS-7-x86_64 #为了实现CPU的热添加,就需要更改Cpu的最大值,当然热添加值不能超过最大值
配置文件修改:<vcpu placement='auto' current='1'>4</vcpu> #当前为1,自动扩容最大为4
设置cpu数: vrish setvcpus Centos-7_64 2 --live #热修改为2个cpu(不知减少),高版本自动激活
内存热添加
内存的设置拥有一个气球(balloon)机制,可以增大减少,但是也要设置一个最大值,默认并没有最大值,也可以在安装时指定
内存热膨胀和压缩,总数不能超过最大内存
[root@linux-node1 opt]# virsh edit CentOS-7-x86_64 #为了实现CPU的热添加,就需要更改Cpu的最大值,当然热添加值不能超过最大值 <memory unit='KiB'>4194304</memory> #修改最大支持内存扩容为4G <currentMemory unit='KiB'>1048576</currentMemory> #当前KVM虚拟机内存为1G 重启虚拟机 [root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64 #关闭KVM虚拟机 Domain CentOS-7-x86_64 is being shutdown [root@linux-node1 opt]# virsh start CentOS-7-x86_64 #启动KVM虚拟机 Domain CentOS-7-x86_64 started [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon #查看当前KVM内存大小 balloon: actual=1024 [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd balloon #热添加 unexpected end of expression [root@linux-node1 ~]# virsh qemu-monitor-command CentOS-7.1-x86_64 --hmp --cmd info balloon #在次查看 balloon: actual=2001
更改虚拟机中存储,硬盘设置(不建议生产环境使用硬盘的扩大收缩模式,很容易产生故障)
网络配置
默认情况KVM的网络是NAT模式,但是在生产情况,用的多的都是网桥模式。
[root@linux-node1~]# brctl addbr br0 #添加一个网卡 [root@linux-node1 ~]# brctl show #查看网卡信息 bridge name bridge id STP enabled interfaces br0 8000.000000000000 no virbr0 8000.5254009f0311 yes virbr0-nic [root@linux-node1 ~]# brctl addif br0 eth0 && ip addr del dev eth0 192.168.56.111/24 &&ifconfig br0 192.168.56.111/24 up && route add default gw 192.168.56.2 && iptables -F #把eth0加入网桥,使用桥接模式,给br设置ip,添加路由网关,关闭防火墙 [root@linux-node1~]# ifconfig br0 #查看网桥的IP br0:flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.56.111 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::20c:29ff:fe5d:cc27 prefixlen 64scopeid 0x20<link> ether 00:0c:29:5d:cc:27 txqueuelen 0(Ethernet) RX packets 4813 bytes 472527 (461.4 KiB) RX errors 0 dropped 0overruns 0 frame 0 TX packets 2705 bytes 510369 (498.4 KiB) TX errors 0 dropped 0 overruns 0 carrier 0collisions 0 [root@linux-node1 ~]# virsh edit CentOS-7-x86_64 #编辑虚拟机的网络配置使用br0网桥模式 <interface type='bridge'> #虚拟机网络连接方式 <mac address='52:54:00:22:04:0f'/> #为虚拟机分配MAC地址,务必唯一,如果是dhcp获得同样IP会引起冲突 <source bridge='br0'/> #当前主机网桥名称 重启虚拟机 [root@linux-node1 opt]# virsh shutdown CentOS-7-x86_64 #关闭KVM虚拟机 Domain CentOS-7-x86_64 is being shutdown [root@linux-node1 opt]# virsh start CentOS-7-x86_64 #启动KVM虚拟机 Domain CentOS-7-x86_64 started #然后配置静态IP地址,重启网卡,即可以通过xshell连接上KVM虚拟机了。
KVM常用命令
[root@linux-node1 ~]# virt-install #建立kvm虚拟机 [root@linux-node1 ~]# virsh list #查看正在运行的KVM虚拟机 [root@linux-node1 ~]# virsh list --all #查看所有KVM虚拟机 [root@linux-node1 ~]# virsh start name #启动KVM虚拟机 [root@linux-node1 ~]# virsh shutdown name #正常关闭KVM虚拟机 [root@linux-node1 ~]# virsh destroy name #强制关闭KVM虚拟机(类似于直接断电) [root@linux-node1 ~]# virsh suspend name #挂起KVM虚拟机 [root@linux-node1 ~]# virsh resume name #恢复挂起的KVM虚拟机 [root@linux-node1 ~]# virsh dumpxml name #查看KVM虚拟机配置文件 [root@linux-node1 ~]# virsh edit name #编辑KVM虚拟机的xml配置文件 [root@linux-node1 ~]# virsh undefine name #彻底删除KVM虚拟机,不可逆,如果想找回来,需要备份/etc/libvirt/qemu的xml文件)
KVM优化
cpu优化:对于全虚拟化,inter实现了技术VT-x,在CPU硬件上实现了加速转换,CentOS7默认是不需要开启的。
cpu缓冲绑定:
[root@linux-node1 ~]# lscpu|grep cache #centos7自带查看cpu信息命令 L1d cache: 32K L1i cache: 32K L2 cache: 256K L3 cache: 3072K L1是静态缓存,造价高。 L2,L3是动态缓存,通过脉冲的方式写入0和1,造价较低。 cache解决了cpu处理快,内存处理慢的问题,类似于memcaced和数据库。 如果cpu调度器把进程随便调度到其他cpu上,而不是当前L1,L2,L3的缓存cpu上,缓存就不生效了,就会产生miss,为了减少cache miss,需要把KVM进程绑定到固定的cpu上。 可以使用taskset把某一个进程绑定(cpu亲和力绑定,可以提高20%的性能)在某一个cpu上,例如:taskset -cp 125718(1指的是cpu1,也可以绑定到多个cpu上,25718是指的pid). cpu绑定的优点:提高性能,20%以上 cpu绑定的缺点:不方便迁移,灵活性差
内存优化
在此之际,Inter在最新的Core I7系列处理器上集成了EPT技术(对应AMD的为RVI技术),以硬件辅助的方式完成客户物理内存到机器物理内存的转换,完成内存虚拟化,并以有效的方式弥补了影子页表的缺陷,该技术默认是开启的
KSM内存合并
宿主机上默认会开启ksmd进程,该进程作为内核中的守护进程存在,它定期执行页面扫描,识别副本页面并合并副本,释放这些页面以供它用,CentOS7默认是开启状态 [root@linux-node1 ~]# ps aux|grep ksmd|grep -v grep root 2800.0 0.0 00 ? SN 04:220:00 [ksmd]
大页内存,CentOS7默认开启的
[root@linux-node1 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled [always] madvise never [root@linux-node1 ~]# ps aux|grep hugepage|grep -v grep root 2810.0 0.0 00 ? SN 04:220:03 [khugepaged] Linux默认的内存页面大小都是4K,HugePage进程会将默认的每个内存页面可以调整为2M
磁盘IO优化
IO调度算法,也叫电梯算法
1、Noop Scheduler:简单的FIFO队列,最简单的调度算法,由于会产生读IO的阻塞,一般使用在SSD硬盘,此时不需要调度,IO效果非常好
2、Anticipatory IO Scheduler(as
scheduler)适合大数据顺序顺序存储的文件服务器,如ftp server和web server,不适合数据库环境,DB服务器不要使用这种算法。
3、Deadline Schedler:按照截止时间的调度算法,为了防止出现读取被饿死的现象,按照截止时间进行调整,默认的是读期限短于写期限,就不会产生饿死的状况,一般应用在数据库
4、Complete Fair Queueing Schedule:完全公平的排队的IO调度算法,保证每个进程相对特别公平的使用IO
[root@linux-node1 ~]# dmesg|grep -i "scheduler" #查看本机Centos7默认所支持的调度算法 [ 1.332147] io scheduler noop registered [ 1.332151] io scheduler deadline registered (default) [ 1.332190] io scheduler cfq registered 临时更改某个磁盘的IO调度算法,将deadling模式改为cfq模式 [root@linux-node1 ~]# cat /sys/block/sda/queue/scheduler noop [deadline] cfq [root@linux-node1 ~]# echo cfq >/sys/block/sda/queue/scheduler [root@linux-node1 ~]# cat /sys/block/sda/queue/scheduler noop deadline [cfq] [root@linux-node1 ~]# vim /boot/grub/menu.lst #使更改的IO调度算法永久生效,需要更改内核参数 kernel /boot/vmlinuz-3.10.0-229.el7 ro root=LABEL=/ elevator=deadline rhgb quiet
虚拟化镜像制作
1.在开始创建过虚拟磁盘,并命名为CentOS-7.1-x86_64.raw,这个是虚拟机镜像。
[root@linux-node1 ~]# ll /opt/ total 5203344 -rw-r--r-- 1 qemu qemu4310695936 12月 28 04:46 CentOS-7.1.iso -rw-r--r--. 1 qemu qemu 10737418240 12月 28 08:55 CentOS-7.1-x86_64.raw
2. 分区的时候,只分一个/分区(不需要swap分区)。
3. 删除网卡里面{UUID,MAC}
4. 如果有/etc/udev/rules.d/70-persistent-ipoib.rules 则删除。
5. iptables关闭、selinux关闭
6.安装基础软件包。(net-tools lrzsz screen tree vim wget)

浙公网安备 33010602011771号