标签:rip mount conf 缓存 sys 基于 spec hugepages 两种
KVM迁移静态迁移(冷迁移)
对于静态迁移,你可以在宿主机上保存一个完整的客户机镜像快照,然后在宿主机中关闭或
者暂停该客户机,然后将该客户机的镜像文件复制到另一台宿主机中,使用在源主机中启动该客户
机时的命令来启动复制过来的镜像。
动态迁移(热迁移)
如果源宿主机和目的宿主机共享存储系统,则只需要通过网络发送客户机的 vCPU 执行状
态、内存中的内容、虚机设备的状态到目的主机上。否则,还需要将客户机的磁盘存储发到目的主
机上。共享存储系统指的是源和目的虚机的镜像文件目录是在一个共享的存储上的。
在基于共享存储系统时,KVM 动态迁移的具体过程为:
1、迁移开始时,客户机依然在宿主机上运行,与此同时,客户机的内存页被传输到目的主机上。
2、QEMU/KVM 会监控并记录下迁移过程中所有已被传输的内存页的任何修改,并在所有内存页都传
输完成后即开始传输在前面过程中内存页的更改内容。
3、QEMU/KVM 会估计迁移过程中的传输速度,当剩余的内存数据量能够在一个可以设定的时间周期
(默认 30 毫秒)内传输完成时,QEMU/KVM 会关闭源宿主机上的客户机,再将剩余的数据量传输
到目的主机上,最后传输过来的内存内容在目的宿主机上恢复客户机的运行状态。
4、至此,KVM 的动态迁移操作就完成了。迁移后的客户机尽可能与迁移前一致,除非目的主机上
缺少一些配置,比如网桥等。
注意,当客户机中内存使用率非常大而且修改频繁时,内存中数据不断被修改的速度大于KVM能够
传输的内存速度时,动态迁移的过程是完成不了的,这时候只能静态迁移。
关于实时迁移的效率,业界不少人提出了改进的建议,比如通过使用内存压缩技术,减少需要传输
的内存的大小
迁移注意事项:
1、最好迁移的服务器cpu品牌一样
2、64位只能在64位宿主机间迁移,32位可以迁移32位和64位宿主机
3、宿主机中的虚拟机名字不能冲突
4、目的宿主机和源宿主机软件配置尽可能的相同,如 有相同的桥接网卡,资源池等。
5、两台迁移的主机 cat /proc/cpuinfo |grep nx 的设置是相同的NX,全名为“No eXecute”,即“禁止运行”,是应用在CPU的一种技术,用作把存储器区域分隔为只供存储处理器指令集,或只供数据使用。任何使用NX技术的存储器,代表仅供数据使用,因此处理器的指令集并不能在这些区域存储。这种技术可防止大多数的缓冲溢出*,即一些恶意程序,把自身的恶意指令集放在其他程序的数据存储区并运行,从而把整台计算机控制。
静态迁移**
1.拷贝镜像文件和虚拟机配置文件2.重新定义此虚拟机
动态迁移:
1.创建共享存储
2.两台机器挂载共享存储(手工挂载;使用资源池)
3.启动动态迁移
4.创建迁移后的虚拟机配置文件
5.重新定义虚拟机
1.冷迁移(静态迁移)
test01 test02
192.168.1.12 192.168.1.13
(1)两台虚拟机防火墙全部关闭,禁用selinux
[root@localhost ~]# systemctl stop firewalld
//关闭防火墙
[root@localhost ~]# vim /etc/selinux/config
//修改selinux状态,需重启linux生效
[root@localhost ~]# getenforce
Disabled //查看selinux状态
//迁移和克隆差不多,都需要对磁盘文件和xml配置文件进行操作
先做在虚拟机做一个测试文件一个
[root@kvm01 ~]# virsh start test01
域 test01 已开始 //先打开虚拟机
[root@localhost ~] vi xgp
Xgp666
然后虚拟机关机
Kvm01
[root@kvm01 ~]# scp /etc/libvirt/qemu/test01.xml root@192.168.1.13:/etc/libvirt/qemu/
//复制配置文件
[root@kvm01 ~]# scp /kvm-vm/centos.raw root@192.168.1.13:/kvm-vm/
Kvm02
[root@kvm02 ~]# cd /etc/libvirt/qemu/
//进入虚拟机配置文件路径
[root@kvm02 qemu]# virsh define test01.xml
定义域 test01(从 test01.xml)
[root@kvm02 qemu]# virsh start test01
//开启test01
验证一下虚拟机里是否有刚刚在kvm01创建的文件
热迁移(动态迁移)
test01 test02 nfx
192.168.1.12 192.168.1.13 192.168.1.80
1)在nfs服务器上的操作
[root@localhost ~]# yum -y install nfs-utils
//安装nfs工具
[root@localhost ~]# mkdir /kvmshare
//创建一个共享目录
[root@localhost ~]# vim /etc/exports
//允许用户名单和权限
/kvmshare *(rw,sync,no_root_squash)
//可读写,同步到磁盘,相当于使用root权限(如果没有这条需要有777权限)
开启各项服务
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# systemctl enable rpcbind
[root@localhost ~]# systemctl start nfs-server
[root@localhost ~]# systemctl enable nfs-server
[root@localhost ~]# systemctl stop firewalld
//关闭防火墙
[root@localhost ~]# setenforce 0
//禁用selinux
两台kvm测试能否访问到nfs
[root@kvm01 ~]# showmount -e 192.168.1.80
`
[root@kvm02 ~]# showmount -e 192.168.1.80
2)kvm01上基于NFS服务创建虚拟机
验证:
1.12:
[root@localhost ~]# touch /opt/nfsshare/test
//创建一个文件
1.80:
[root@localhost ~]# ls /kvmshare/
centos7.qcow2 test //查看一下
//存储池和存储卷完成之后,直接创建虚拟机
配置虚拟机使用bridge桥接网路,使其能够ping的通外网。并且在这里我们执行一个ping百度的命令,并让他保持一直是ping着的状态,用来模拟迁移到kvm02上服务不中断。
Kvm01
然后最小化安装一个linux
然后给这个linux设置桥接网络
1)关闭虚拟机
[root@localhost kvm-vm]# virsh destroy centos7.0
域 test02 被删除
2)创建虚拟桥接网考br0
[root@localhost kvm-vm]# systemctl stop NetworkManage
//关闭network管理工具关闭
[root@localhost kvm-vm]# virsh iface-bridge ens33 br0
//他会提示失败,没关系最后启用就行了
使用附加设备 br0 生成桥接 ens33 失败
已启动桥接接口 br0
3)修改kvm虚拟机域的xml配置文件(定位到interface)
[root@localhost network-scripts]# virsh edit centos7.0
编辑了域 centos7.0 XML 配置。
<interface type=‘bridge‘> #修改network
<mac address=‘52:54:00:75:f0:8f‘/> #删除
<source bridge=‘br0‘/> #修改
4)开启虚拟机域,配置IP,验证 是否能够联通外网
[root@localhost network-scripts]# virsh start centos7.0
域 centos7.0 已开始
centos7.0虚拟机设置
vi /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network
测试ping baidu.com
配置虚拟机使用bridge桥接网络,使其可ping通外网
Kvm02操作,创建存储池和kvm01一样
这里创建完成之后,会看到之前在kvm01.上创建的test文件和centos.qcow2
的存储卷。
在KVM01上链接kvm02
//因为kvm01上用的是bridge br0网卡,所以Kvm02 也来一个桥接网络
1)创建虚拟桥接网考br0
[root@localhost kvm-vm]# systemctl stop NetworkManage
//关闭network管理工具关闭
[root@localhost kvm-vm]# virsh iface-bridge ens33 br0
//他会提示失败,没关系最后启用就行了
使用附加设备 br0 生成桥接 ens33 失败
已启动桥接接口 br0
[root@kvm02 ~]# brctl show #查看一下
bridge name bridge id STP enabled interfaces
br0 8000.000c29ccc9f4 yes ens33
virbr0 8000.5254008b52f8 yes virbr0-nic
在kvm01上迁移centos7.0
迁移之前在centos7.0里ping baidu.com
迁移完了之后在kvm上查看一下是否还在ping
迁移完毕
常见错误:
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、迁移时的存储错误:# 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错误:
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
原因:两台宿主机无法解析主机名
解决方法:重新配置主机名和ip的解析
4、迁移时语法错误:
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
firewall-cmd --add-port=49152/tcp
1、KVM为什么要调优
性能的损耗是关键。KVM采用全虚拟化技术,全虚拟化要有一个软件来模拟硬件层,故有一
定的损耗,特别是I/O,因此需要优化。KVM性能优化主要在CPU、内存、I/O这几方面。当然
对于这几方面的优化,也是要分场景的,不同的场景其优化方向也是不同的。
2、KVM优化思路及步骤
KVM的性能已经很不错了,但还有一些微调措施可以进一步提高KVM性能。
1)CPU优化
要考虑CPU的数量问题,所有guestcpu的总数目不要超过物理机CPU的总数目。如果超
过,则将对性能带来严重影响,建议选择复制主机CPU配置,如图所示:
KSM(kernel samepage merging,相同页合并)
内存分配的最小单位是page(页面),默认大小是4KB。可以将host主机内容相同的内存
合并,以节省内存的使用,特别是在虚拟机操作系统都一样的情况下,肯定会有很多内容相
同的内存值,开启了KSM,则会将这些内存合并为一个,当然这个过程会有性能损耗,所以
开启与否,需要考虑使用场景。
而KSM对KVM环境有很重要的意义,当KVM上运行许多相同系统的客户机时,客户机之间
将有许多内存页是完全相同的,特别是只读的内核代码页完全可以在客户机之间共享,从而
减少客户机占用的内存资源,能同时运行更多的客户机。
通过/sys/kernel/mm/ksm目录下的文件可查看内存页共享的情况:
KSM主要有两个服务:ksm和ksmtuned。
ksm的配置文件:/sys/kernel/mm/ksm/*1
full_scans:已经对所有可合并的内存区域扫描过的次数。
pages_shared:正在使用中的共享内存页数量
pages_sharing:有多少内存页正在使用被合并的共享页,不包括合并内存页本
身。这是实际节省的内存页数量。
pages_to_scan:在ksmd进程休眠之前会去扫描的内存页的数量。
pages_unshared:无重复内容而不可以被合并的内存页数量。
pages_volatile:因为内容很容易变化而不被合并的内存页数量。
run:控制ksmd是否运行。0:停止运行但是保存合并的内存页;1:马上运行
ksmd;2:停止运行,并且分立已经合并的所有内存页。
sleep_millisecs:ksmd进程的休眠时间。
其中pages_to_scan、sleep_millisecs、run三个文件是可读写的,其他文件是
只读的。
1 vm002 running
查看使用情况
[root@kvm001 ksm]# cat /proc/meminfo |grep -i hugepage
AnonHugePages: 55296 kB
HugePages_Total: 1033
HugePages_Free: 513
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
可以看到消耗了520个大页(1033-513),每个页面大小为2M,正好是虚拟机vm002消耗
的内存。
让系统开机自动挂载hugetlbfs文件系统,在/etc/fstab中添加:hugetlbfs /dev/hugepages hugetlbfs defaults 0 0
I/O的优化
在实际的生产环境中,为了避免过度消耗磁盘资源而对其它的虚拟机造成影响,我
们希望每台虚拟机对磁盘资源的消耗是可以控制的。比如多个虚拟机往硬盘中写数据,谁可
以优先写,就可以调整I/O的权重weight,权重越高写入磁盘的优先级越高。
对磁盘的I/O控制有两种方式:
1)在整体中的权重,范围在100-1000
2)限制具体的I/O。
[root@kvm001 ~]# virsh blkiotune vm002
weight : 1000
device_weight :
device_read_iops_sec:
device_write_iops_sec:
device_read_bytes_sec:
device_write_bytes_sec:
设置权重为500
[root@kvm001 ~]# virsh blkiotune vm002 --weight 500
[root@kvm001 ~]# virsh blkiotune vm002
weight : 500
device_weight :
device_read_iops_sec:
device_write_iops_sec:
device_read_bytes_sec:
device_write_bytes_sec:
编辑虚拟机的XML配置文件:
还可以使用blkdeviotune设置虚拟机的读写速度,语法如下:
[root@kvm001 ~]# virsh blkdeviotune --help
.........--total-bytes-sec <number> total throughput limit, as scaled integer
(default bytes)
--read-bytes-sec <number> read throughput limit, as scaled integer
(default bytes)
--write-bytes-sec <number> write throughput limit, as scaled integer
(default bytes)
--total-iops-sec <number> 以每秒字节数位单位的总 I/O 操作限制
--read-iops-sec <number> 以每秒字节数位单位的读取 I/O 操作限制
--write-iops-sec <number> 以每秒字节数位单位的写入 I/O 限制
--total-bytes-sec-max <number> total max, as scaled integer (default
bytes)
--read-bytes-sec-max <number> read max, as scaled integer (default
bytes)
--write-bytes-sec-max <number> write max, as scaled integer (default
bytes)
--total-iops-sec-max <number> total I/O operations max
--read-iops-sec-max <number> read I/O operations max
--write-iops-sec-max <number> write I/O operations max
--size-iops-sec <number> I/O size in bytes
--group-name <string> group name to share I/O quota between
multiple drives
--total-bytes-sec-max-length <number> duration in seconds to allow total
max bytes
--read-bytes-sec-max-length <number> duration in seconds to allow read
max bytes
--write-bytes-sec-max-length <number> duration in seconds to allow write max
bytes
--total-iops-sec-max-length <number> duration in seconds to allow total I/O
operations max
--read-iops-sec-max-length <number> duration in seconds to allow read I/O
operations max
--write-iops-sec-max-length <number> duration in seconds to allow write I/O
operations max
--config 影响下一次引导
--live 影响运行的域--current 影响当前域
系统调优工具tuned/tuned-adm
CentOS在6.3版本以后引入了一套新的 系统调优工具tuned/tuned-adm,其中,
tuned是服务端程序,用来监控和收集系统各个组件的数据,并依据数据提供的信息动态调
整系统设置,达到动态优化系统的目的;tuned-adm是客户端程序,用来和tuned打交
道,用命令行的方式管理和配置tuned,tuned-adm提供了一些预先配置的优化方案可供
直接使用。当然不同的系统和应用场景有不同的优化方案,tuned-adm预先配置的优化策
略不是总能满足要求,这时候就需要定制,tuned-adm允许用户自己创建和定制新的调优
方案。
安装tuned工具
[root@kvm001 ~]# yum install tuned -y
开机启动并开启tuned服务
[root@kvm001 ~]# systemctl start tuned
[root@kvm001 ~]# systemctl enable tuned
[root@kvm001 ~]# systemctl status tuned
● tuned.service - Dynamic System Tuning Daemon
Loaded: loaded (/usr/lib/systemd/system/tuned.service; enabled; vendor
preset: enabled)
Active: active (running) since 二 2017-10-17 08:36:52 CST; 5h 56min ago
Main PID: 1332 (tuned)
CGroup: /system.slice/tuned.service
└─
1332 /usr/bin/python -Es /usr/sbin/tuned -l -P
10月 17 08:36:52 kvm001 systemd[1]: Starting Dynamic System Tuning
Daemon...
10月 17 08:36:52 kvm001 systemd[1]: Started Dynamic System Tuning
Daemon.
查看当前优化方案
[root@kvm001 ~]# tuned-adm active
Current active profile: virtual-guest
查看预先设定好的优化方案
[root@kvm001 ~]# tuned-adm list
Available profiles:
标签:rip mount conf 缓存 sys 基于 spec hugepages 两种
原文地址:https://blog.51cto.com/14320361/2455973