目录:
(3.1)了解cgroup工作机制
(3.2)KVM环境中对CPU资源的限制
(3.3)KVM环境中对网络资源的限制
(3.4)P2V
(3.5)V2V


(3.1)了解cgroup工作机制
cgroup,其名称源自控制组群(control groups)的简写,是Linux内核的一个功能,用来限制、控制与分离一个进程组的资源(如CPU、内存、磁盘输入输出等)。这个项目最早是由Google的工程师在2006年发起,最早的名称为进程容器。在2007年时,因为在Linux内核中,容器(container)这个名词有许多不同的意义,为了避免混乱,被重命名为cgroup,并且被合并到2.6.24版的内核中去。自那以后,又添加了很多功能。cgroup的一个设计目标是为不同的应用情况提供统一的接口,从控制单一的进程到操作系统层虚拟化。cgroup提供:
资源限制:组可以被设置不超过设定的内存限制,也包括虚拟内存
优先级:一些组可能会得到大量的CPU或磁盘IO吞吐量
结算:用来衡量系统确实把多少资源用到合适的目的上
控制:冻结组或检查点和重启动
cgroup是一个很重要的资源控制机制,有时候我们需要对CPU进行限制,对网络进行限制,对内存或者磁盘IO进行限制,如果没有做限制很可能会因为某个程序或者进程大量消耗资源而导致系统崩溃,此时我们使用cgroup进行资源管理就会非常的有效。
(3.1.1)CPU管控器在kerner中被默认启动,这可使所有系统service的可用CPU量相同,而与其所包含进程数量无关。此项默认设定可以使用/etc/systemd/system.conf配置文件中的defaultControllers参数来修改。如需管理CPU的分配,请使用单位配置文件[Service]部分中的下列指令:CPUShares=value,请使用CPU share的数量代替value。默认值为1024,您可以增加此数值来给单位分配更多CPU。一般我们对CPU资源进行限制主要是通过命令行进行操作或者通过修改配置文件这样两种方式。现在我们先在vms002主机上安装Apache服务。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第1张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第2张图片
(3.1.2)接着我们在通过systemd-cgtop命令发现此时并没有对httpd服务做任何的限制。一般我们服务的启动脚本是放在/usr/lib/systemd/system/目录下的httpd.service文件中的。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第3张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第4张图片
(3.1.3)而我们需要对服务的属性进行设置的时候,主要是通过命令# systemctl set-property httpd.service CPUShares=2048来完成的,此时在/etc/systemd/system/目录下便会产生一个关于httpd.service的目录文件。并且在90-CPUShares.conf文件中会产生我们命令行设置的信息,此时通过# systemd-cgtop命令查看,也已经产生了httpd的一行信息。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第5张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第6张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第7张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第8张图片
(3.1.4)对CPU等资源进行限制的时候,只有这个资源紧张的时候,这种分配才生效,当这种资源不紧张的时候,设置无效。我们发现此时vms002主机的系统中是有2个CPU在运行的,接着我们进入到/sys/devices/system/cpu/目录中看到cpu1/online的数值为1开启状态,我们可以将cpu1/online的设置为0关闭禁用
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第9张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第10张图片
(3.1.5)接着我们在vms002主机上安装一个cpuload软件,并将cpuload可执行文件复制独立的两个文件cpuload1和cpuload2。同时创建cpuload1.service和cpuload2.service两个定制服务文件,并将配置文件拷贝到/usr/lib/systemd/system/目录下。自定义服务,定制服务
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第11张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第12张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第13张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第14张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第15张图片
(3.1.6)此时在系统中我们便可以看到两个服务cpuload1.service和cpuload2.service,并且都是没有启动的状态。我们将两个服务启动起来,此时通过如下的命令# ps mo pid,comm,psr `pgrep cpuload`,便可以看到cpuload1和cpuload2都是运行在0号CPU上的。此时我们通过top命令可以发现两个cpuload服务的资源使用率基本差不多,也可以使用# systemd-cgtop命令查看。
# ps mo pid,comm,psr `pgrep cpuload`
# top -d 1
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第16张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第17张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第18张图片
(3.1.7)接着我们使用命令行的方式对cpuload1进行资源限制,此时在/etc/systemd/system/目录下便产生了一个cpuload1.service.d的目录。然后我们使用修改配置文件的方式创建cpuload2.service.d,并且在cpuload2.service.d目录下的90-CPUShares.conf配置文件中将CPUShares的值更改为1024
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第19张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第20张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第21张图片
(3.1.8)然后我们将服务重载一下,再将cpuload2的服务启动起来,此时cpuload2服务就已经正常的运行了。
# systemctl daemon-reload
# systemctl restart cpuload2.service
# systemctl status cpuload2
# top -d 1
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第22张图片
(3.1.9)此时我们通过top命令发现cpuload1服务的CPU使用率基本是cpuload2服务CPU使用率的2倍,与我们设置的期望值一致。我们通过# systemd-cgtop命令同样发现cpuload1服务也基本是cpuload2服务的CPU使用率的2倍
# top -d 1
# systemd-cgtop
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第23张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第24张图片
(3.1.10)接着我们对内存进行管理限制,我们先安装一个内存测试的工具memload,同时在/usr/lib/systemd/system目录下创建一个定制服务的配置文件memtest.service消耗1024M的内存。自定义服务,自定义一个服务,定制服务
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第25张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第26张图片
(3.1.11)我们将memtest服务启动起来,此时便会发现可用的内存前后大约少了1024M左右
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第27张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第28张图片
(3.1.12)接着我们使用修改配置文件的方式来对内存资源做限制操作,我们进入到/etc/systemd/system/目录中,创建一个目录memtest.service.d,接着在memtest.service.d目录中创建一个配置文件90-MemoryLimit.conf用来限制内存最大使用512M。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第29张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第30张图片
(3.1.13)服务中是设置了消耗1024M的内存,但实际上经过了cgroup的资源限制后,我们发现系统只是消耗了512M的内存了
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第31张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第32张图片
(3.1.14)接下来我们设置对CPU的亲和性做限制,所谓CPU的亲和性(affinity)就是指定进程在哪个特定的CPU上运行。正常的情况下httpd服务的进程是会随机的运行在系统中的任意的CPU上的(图3-32)。现在假设我们的系统有4核的CPU,此时如果我们有多个服务在同时运行,我们可以指定1号CPU运行Apache,2号CPU运行Nginx,3号CPU运行MySQL,同时单独指定4号CPU不运行任何的服务,使得不同的服务运行在不同的CPU上,此时如果MySQL服务出现了异常,CPU的使用率已经达到了100%了,那么也只是3号CPU的资源枯竭,不会影响到其他CPU上服务的运行,此时我们作为管理员便可以使用4号CPU来做管理,管理员可以正常的登录系统将系统中异常的进程kill掉。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第33张图片
(3.1.15)我们在/etc/systemd/system/httpd.service.d目录下,创建一个资源限制的文件90-CPUAffinity.conf,在配置文件中使用cgroup设置CPU资源的亲和性为0号CPU
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第34张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第35张图片
(3.1.16)接着我们将服务全部重新加载一下,再将httpd服务重新启动一下。此时发现httpd的进程经过了资源限制后,已经全部在0号CPU运行了。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第36张图片


(3.2)KVM环境中对CPU资源的限制
(3.2.1)我们先在vms002主机的KVM环境中创建一个rhel7-1的虚拟机。发现这台rhel7-1虚拟机的线程是同时任意运行在当前vms002主机的0号和1号CPU上的。
# ps mo pid,lwp,comm,psr,args `pgrep qemu-kvm`
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第37张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第38张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第39张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第40张图片
(3.2.2)我们可以在virt-manager的界面配置rhel7-1虚拟机的亲和性为1号CPU。此时rhel7-1虚拟机的所有进程都默认是在1号CPU上运行
# virsh edit rhel7-1
# ps mo pid,lwp,comm,psr,args `pgrep qemu-kvm`
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第41张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第42张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第43张图片
(3.2.3)接着我们再创建一个虚拟机rhel7-2,并且设置rhel7-2虚拟机也是运行在1号CPU上,此时我们发现rhel7-1和rhel7-2两台虚拟机都运行在1号CPU上了。而且使用# top -d 1命令发现,两台虚拟机的CPU使用率基本是持平的。
# ps mo pid,lwp,comm,psr,args `pgrep qemu-kvm`
# top -d 1
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第44张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第45张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第46张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第47张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第48张图片
(3.2.4)接着我们来调整KVM环境里两台虚拟机的CPU消耗的属性,我们先将两台虚拟机关机,然后再分别编辑rhel7-1和rhel7-2,通过命令# virsh edit rhel7-1对rhel7-1虚拟机进行设置,cputune表示调优,我们设置CPUShares的值为2048,设置rhel7-2虚拟机的CPUShares的值为1024
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第49张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第50张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第51张图片
(3.2.5)接着我们将两台虚拟机关机后在重新开机启动,并执行# cat /dev/zero > /dev/null的命令,通过# top -d 1命令查询到rhel7-1虚拟机的CPU使用率基本是rhel7-2虚拟机使用率的2倍,使用# systemd-cgtop命令也基本可以看出两台虚拟机在0号CPU运行,且rhel7-1的使用率是rhel7-2的使用率的2倍
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第52张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第53张图片


(3.3)KVM环境中对网络资源的限制
(3.3.1)注意:如果我们在vms002(192.168.26.102)主机上搭建了一个FTP服务,并且在/var/ftp目录下床架了一个dvd的目录,此时使用挂载将vms002主机上的光盘镜像挂载到/var/ftp/dvd目录上,此时如果在KVM环境中有一台虚拟机rhel7-1(192.168.122.65)主机,那么这个rhel7-1虚拟机是可以通过ftp://192.168.122.1/dvd 访问到光盘镜像的内容的。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第54张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第55张图片
(3.3.2)我们可以通过修改配置文件的方式对KVM环境中的虚拟机的网络资源进行限制。在rhel7-1(192.168.122.65)虚拟机上设置进流量和出流量最大都是128k,而rhel7-2(192.168.122.115)虚拟机不作任何的网络流量限制。
# virsh edit rhel7-1
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第56张图片
(3.3.3)然后我们在vms002主机上创建一个200M的文件,并通过scp的方式拷贝到两台虚拟机,以便比较其传输速度的快慢。测试发现200M的文件拷贝到rhel7-2主机用了7秒,而将200M的文件拷贝到rhel7-1主机上至少用了7分钟,从而说明了我们的网络资源限制的配置生效了。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第57张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第58张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第59张图片


(3.4)P2V
(3.4.1)注意:如果出现了以下报错“状态 :睡眠中,进程ID:3475”,可以通过执行如下的命令处理。
# rm -rf /var/run/yum.pid
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第60张图片
(3.4.2)物理到虚拟,即Physical to virtual,简称P2V。它是指将操作系统、应用程序或者数据从计算机的物理硬盘中迁移到一个虚拟化环境中或是磁盘分区中。P2V可以手工创建或定义一个虚拟环境,并在此环境中安装操作系统、应用程序或者数据,这可能会是一个冗长或不确定的过程,尤其是在一个包含大量旧的硬件条件的新环境中。为了简化操作,会有一些支持全部或者部分虚拟化的自动软件工具,也就是我们所熟识的迁移工具。通常P2V就是创建虚拟的应用服务器环境,如在IBM服务器上搭建虚拟环境从而运行Windows系统。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第61张图片
(3.4.3)现在我们准备完成的P2V迁移的拓扑图如下所示,物理机被迁移的系统使用的是rhel7.1的版本,同时物理机需要使用virt-p2v-0.9.1-2.1.el6.centos.noarch镜像盘来引导,虚拟化环境的宿主机使用的是rhel6.6的系统,且在我们的虚拟化环境中需要安装virt-v2v软件。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第62张图片
(3.4.4)我们使用KVMhost(192.168.26.131)作为宿主机,安装rhel6.6的系统,然后使用TestRhel7作为被迁移的物理机,安装的是rhel7.1的系统。我们将virt-p2v-0.9.1-2.20130730.1.el6.centos.noarch.rpm软件放置到KVMhost宿主机上,并将virt-p2v使用rpm安装起来,随后我们便得到了一个virt-p2v-0.9.1-2.20130730.1.el6.centos.iso的镜像文件,这个文件我们将作为TestRhel7系统在被迁移时的引导盘。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第63张图片
(3.4.5)接着我们设置TestRhel7物理机在开机时,使用virt-p2v-0.9.1-2.20130730.1.el6.centos.iso这个引导盘进入系统。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第64张图片
(3.4.6)接着我们设置KVMhost主机,将rhel6.6的光盘镜像挂载到/mnt目录下,并且设置好aa.repo的YUM源。并在KVMhost主机的系统中将虚拟化的环境安装一下,同时将KVMhost主机的CPU虚拟化功能打开。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第65张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第66张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第67张图片
(3.4.7)由于需要打开图形化功能,所以我们需要保证KVMhost主机上的xorg-x11-xauth.x86_64这个软件包安装起来。配置完成后将系统重启一下即可。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第68张图片
(3.4.8)接着我们还要在KVMhost主机上安装virt-v2v软件,并在/etc/fstab文件中进行光盘自动挂载的配置(/dev/cdrom光盘镜像挂载到/mnt目录下)
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第69张图片
/dev/cdrom /mnt iso9660 defaults,ro,loop 0 0
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第70张图片
(3.4.9)接着我们在KVMhost主机上的/etc/virt-v2v.conf配置文件中进行配置,我们设置默认的存储storage生效,并设置默认的网络network生效,并将virt-manager打开
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第71张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第72张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第73张图片
(3.4.10)接着我们将TestRhel7主机启动并使用光盘镜像引导,进入到了virt-p2v的界面,选择连接网络,然后输入KVMhost主机的IP地址和密码
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第74张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第75张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第76张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第77张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第78张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第79张图片
(3.4.11)此时作为物理机的TestRhel7此时便已经迁移到了我们KVMhost主机的虚拟机上了,设置好网卡、硬盘、显示的相关协议后,由物理机迁移过来的虚拟机便可以正常的启动了。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第80张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第81张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第82张图片


(3.5)V2V
(3.5.1)V2V(Virtual-to-Virtual)迁移是在虚拟机之间移动操作系统和数据,照顾主机级别的差异和处理不同的虚拟硬件。虚拟机从一个物理机上的VMM迁移到另一个物理机的VMM,这两个VMM的类型可以相同,也可以不同。如VMware迁移到KVM,KVM迁移到KVM。可以通过多种方式将虚拟机从一个VM Host系统移动到另一个VM Host系统
(3.5.2)现在我们准备完成的V2V迁移的拓扑图如下所示,被迁移的虚拟机是vmware环境中的一台rhel7.1的虚拟机,虚拟化环境中使用的宿主机是rhel6.6的系统,其中rhel7.1的虚拟机是TestRhel7,rhel6.6主机是KVMhost。我们需要将TestRhel7作为虚拟机迁移到KVMhost宿主机中作为虚拟机运行。
注意:如果是要把物理机的Windows系统P2V到KVM里的话,不要忘记了要在Windows系统安装半虚拟化驱动
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第83张图片
(3.5.2)其中vmdk文件是TestRhel7虚拟机的硬盘文件,vmx文件是TestRhel7虚拟机的配置文件,我们将这两个文件拷贝到KVMhost宿主机中
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第84张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第85张图片
(3.5.3)首先我们要将vmware的硬盘文件转换成KVM所能读取的硬盘格式。
# qemu-img convert -O qcow2 -f vmdk TestRhel7.vmdk TestRhel7.qcow2
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第86张图片
(3.5.4)由于vmware虚拟机的配置文件的格式是文本的格式,一行一个条目,而KVM虚拟机的配置文件的格式是xml格式,两种配置文件不通用,所以我们需要把vmware的配置文件转换成KVM所能读懂的配置文件,我们使用virt-goodies_0.4.tar.gz软件,找到vmware2libvirt可执行文件,并生成TestRhel7.xml文件。
注意:故障排错,需要将TestRhel7.xml和TestRhel7.vmdk放在同一个文件夹里然后执行转换xml文件的操作
# ./vmware2libvirt -f /root/TestRhel7.vmx > /root/TestRhel7.xml
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第87张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第88张图片
(3.5.5)修改一下名称为v_TestRhel7,将模拟器的值修改为/usr/libexec/qemu-kvm,同时存储需要设置磁盘的格式为vda,且硬盘的位置为/var/lib/libvirt/images/TestRhel7.qcow2
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第89张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第90张图片
(3.5.6)接着将TestRhel7.xml配置文件拷贝到/etc/libvirt/qemu的目录中,将TestRhel7.qcow2的硬盘文件拷贝到存储池中,然后创建迁移到KVMhost宿主机中的虚拟机v_TestRhel7
# virsh define TestRhel7.xml---此处指的是文件名称
# virsh start v_TestRhel7---此处指的是虚拟机的名称
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第91张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第92张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第93张图片
(3.5.7)然后将v_TestRhel7虚拟机的硬盘格式更改为qcow2格式,然后启动虚拟机,此时虚拟机便可以正常的启动了。
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第94张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第95张图片
KVM虚拟化技术详解(三)--guestos资源限制及P2V,V2V_第96张图片

—————— 本文至此结束,感谢阅读 ——————