最近通过艰苦卓绝的度娘(我很想用谷歌,可是,你懂的),终于搞明白如何在centos7中限制kvm虚拟机可访问的资源了。
度娘给出的结果中,大部分都说的很对,然而,却很难照着做,主要原因有两点:
1、网上的版本大都是针对centos6.x而写的,但是centos7和centos6的操作有些不同。
比如centos6中启动服务的命令是用/etc/init.d/目录下对应的服务的start方法,而centos7中对服务的管理都是靠systemctl这个命令。
2、对命令中的某些参数解释的不够清晰,甚至是没有解释,直接扔一个命令上去,然后说这个命令能起到什么作用。
对于符合这一点的文章,我一般称为技术八股文。不幸的是,网上的文章大部分都是技术八股文。
下面就把我实现的步骤写下来。
一般来说,升级一下系统吧。升级系统可以把系统中的软件更新到最新状态,这样可以最大程度的减少一些莫名其妙的问题。命令如下:
yum update -y
参数-y是为了更新系统是不提示直接安装。如果你喜欢每次都按一下键盘的话,就不要带这个参数了。
另外,如果不是root用户,要用sudo:
sudo yum update -y
然后安装libcgroup和libcgroup-devel。这两个是为系统增加cgroup功能,具体每个包都是干什么,我也不知道。
yum install libcgroup libcgroup-devel -y
安装完成后,系统中会增加一个叫做cgconfig的服务。
网上一般都要求启动此服务。但是我测试的情况是,不启动这个服务也可以。
为了和网上保持一致,就启动此服务吧。
使用systemctl启动此服务:
systemctl start cgconfig
如果想看此服务的状态,可以用以下命令来看:
systemctl status cgconfig
看其他服务的状态也是用这个命令。
如果看到“Active: active (exited)”的字样,就说明启动成功了。
网上一般都要求设置此服务为自动启动,既然我觉得没用,就不设置了。
网上一般都说服务启动后在根目录下看到cgropu的目录,但是我也没有看到。不过这个似乎和我这个初学者没有半毛钱关系,能用就行。
下面就是设置对磁盘资源的控制。这个主要是靠virsh这个命令中的子命令blkiotune和blkdeviotune进行设置。blkdeviotune没研究不解释。blkiotune设定的是某个虚拟机对资源的访问,网上的资料说可以设置权重(weight),但是我设置后没发现有什么作用,所以我还是强制设定的读写速度。这里总共有六项可以设定。通过以下命令查看指定名字的虚拟机当前的设定:
virsh blkiotune win2k8r2
输出如下:
weight : 0
device_weight :
device_read_iops_sec:
device_write_iops_sec:
device_read_bytes_sec:
device_write_bytes_sec:
命令中的“win2k8r2”就是要设定的虚拟机的名字。
这里可以看到六项可以设定的内容。我只设定device_read_bytes_sec这一项。设定命令如下:
virsh blkiotune win2k8r2 --device-read-bytes-sec /dev/sda2,5000000
这样就把名字为win2k8r2的虚拟机对/dev/sda2这个设备的读取速度限制在5M了。这里要注意的是,参数中的“-”,单词前面用的是“--”,两个减号;单词之间用的是“-”,一个减号,而上一个命令中显示的是对应项目,用的是下划线。
要注意的是,虽然我们限制了读取速度为5M,但实际上可能会在这个速度上下波动。
查看设置是否成功的方法是用iotop这个工具,使用方法类似于top,就不解释了。
最后声明一下,这篇文章仅适于初学者,如果你是大牛,请无视。