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)

posted @ 2017-03-02 22:41  所有的梦想都画在墙上  阅读(207)  评论(0)    收藏  举报