Total Pageviews

Monday 23 January 2012

如何修改OpenVZ VPS的资源配置

OpenVZ环境下管理VPS的资源

我们在OpenVZ环境下建立了一台VPS,采用的是默认的设置。
这里我们将对其使用的资源进行限制。

我们默认创建的VPS信息如下:

IP:172.17.96.200

VPS ID:200

HOSTNAME:vps200

VPS使用的资源有磁盘空间,CPU,内存等。

1、管理磁盘配额
主要针对VPS进行磁盘限制,对VPS的磁盘进行配额需要的参数文件是/etc/sysconfig/vz,在该文件中DISK_QUOTA=yes表示对所有的VPS打开磁盘配额。这个参数也可以在/etc/sysconfig/vz-scripts/vpsid.conf文件中指定,只对特定的VPS生效。对于一个VPS,/etc/sysconfig/vz-scripts/vpsid.conf中的配置优先于/etc/sysconfig/vz。

磁盘配额有软限制和硬限制。磁盘的使用空间可以超过软限制,无法超过硬限制。

磁盘配额包括空间配额和节点配额,空间是对容量进行限制,节点(inode)对文件数量进行限制。

我们对vps200进行磁盘配额,设置空间软限制为1Gb,硬限制为1.2Gb。则操作如下:

#vzctl set 200 –diskspace 1000000:1200000 –save

这里单位是Kb。

对inode进行配额:

#vzctl set 200 –diskinodes 100000:120000 –save

设置配额时间,配额时间表示可以超过软限制的时间,单位是秒,操作如下:

#vzctl set 200 –quotatime 3600 –save

2、CPU限制
这里有两个概念:cpuunits和cpulimit。前者是一个VPS正常运行使用CPU时间的一个保证数,后者是VPS使用CPU时间不能超过数,这两个数字是OpenVZ使用特殊的算法计算出来的。

为了获取VPS运行最优的CPU时间,我们运行vzcpucheck来获取宿主机的CPU利用信息。

#vzcpucheck

Current CPU utilization: 2000
Power of the node: 93229

这个命令显示了OpenVZ计算的所有正在运行的VPS和硬件节点进程的CPU时间和硬件节点的极限CPU时间。

下面设置vps200在硬件节点充分运行的时候CPU时间保证为2%,则vps的CPU即使使用和硬件节点相同的CPU时间,则VPS不会获得超过4%的CPU时间。所以要保证VPS的CPU时间2%,则必须:

#vzctl set 200 –cpuunits 500 –cpulimit 4 –save

3、内存限制
VPS内存大小是在配置文件中指定的,在/etc/sysconfig/vz-scripts目录下,在创建虚拟机时,默认的配置文件是ve-vps.basic.conf-sample,在该文件中PRIVVMPAGES=”65536:69632″指定内存的大小,这里65536*4kb=262144kb,262144kb/1024=256mb,69632*4kb=272mb,即使用默认配置文件创建的vps内存默认大小为256MB,硬限制为272MB。在创建VPS后,在该目录下vpsid.conf文件中也可以修改该参数。

管理OpenVZ资源-Disk Quotas篇
2010-04-05 19:31

通过对OpenVZ上VE进行配置,可以对VPS进行必要的允许和限制功能。在《OpenVZ-Users-Guide》文档中有关于如何管理系统资源的描述。主要分:Disk Quota、CPU、System参数三大部分内容。以下内容参考自该文档,并适当增加一些注解。

一、配置文件
所有的参数均由配置文件决定,可使用命令修改,或用vi直接编辑。
1、全局配置文件
引用
# ll /etc/sysconfig/vz
lrwxrwxrwx 1 root root 13 Sep 27 15:39 /etc/sysconfig/vz -> ../vz/vz.conf

该文件中的内容为VPS的全局配置。
2、单独VE配置文件
引用
# ll /etc/sysconfig/vz-scripts/
total 20
-rw-r--r-- 1 root root 228 Jul 6 15:47 0.conf <-HW节点配置
-rw-r--r-- 1 root root 1717 Oct 11 11:54 112.conf <-VE节点配置
-rw-r--r-- 1 root root 1539 Jul 6 15:47 ve-light.conf-sample <-样版配置
-rw-r--r-- 1 root root 1558 Jul 6 15:47 ve-vps.basic.conf-sample <-样版配置

vzctl使用--save后,即保存到上述VE配置文件中,也可使用vi直接编译。
样本配置文件可供在创建VE的时候直接使用。

二、管理Disk Quotas(磁盘配额)
磁盘配额可用于控制每个VE对HW的/vz分区(目录)其可以使用的磁盘空间和inodes数量。应该把/vz单独分区,否则,若挂在根分区下,将很难控制。
1、磁盘配额分两个级别
引用
1)first-level:per-VPS quotas
对每个独立的VE可以使用的磁盘进行控制;
2)second-level:per-user and per-group quotas
使用Linux自带的Quota套件,对VE中的用户、组可用磁盘进行控制。

2、配额状态
所有的磁盘配额状态都记录在下面的文件中:
引用
/var/vzquota/quota.vpsid

vpsid为VE对应的标识。
该文件会根据实际情况,标识VE中的文件是否为dirty状态。这些状态并不会即时与运行中的VE同步,而只有在停止VE,或者关闭HW时才会发生同步。当同步后,文件的dirty标识就会取消。
也就是讲,万一HW不正常关闭,当重启VE时,需要重新计算quota,这将显著增加VE节点启动的时间。所以,应正常关闭HW,避免不必要的麻烦。
另外,如果你希望在全局文件中禁用所有VE的磁盘配额限制,根据上述原理,你应先关闭所有VE,然后再进行修改。否则,将会严重影响真实quota的统计值,并影响HW的操作。基于同样的理由,在单独修改某VE的磁盘配额设置时,也应先关闭它再进行。请紧记这点!
3、块大小
在OpenVZ中,disk quota的块大小总是1024 bytes,而不一定等于所在HW的/vz分区文件系统块的大小。

三、配置first-level quotas
1、可用参数
引用
disk_quota:是否打开first-level quotas
diskspace:VE可用的空间,单位是1Kb blocks
diskinodes:VE可分配的inodes数量(包括文件、目录、软硬链接)
quotatime:当diskspace和diskinodes的软、硬设置不同时,设置允许VE暂时超过软设置的时间,单位是秒;但硬设置是一定不能超出的。
quotaugidlimit:second-level quotas的关键参数,0为关闭,非0的含义见后面介绍。

※注意,参数在配置文件中为大写,命令中为小写,见后面示例。

2、全局配置
per-VPS在全局配置文件中默认是打开的。
引用
# grep 'DISK_QUOTA' /etc/vz/vz.conf
DISK_QUOTA=yes

而每个VE的配置文件,可使用相同的参数覆盖全局文件中的定义。
※建议:在全局配置文件中打开磁盘配额支持,而单独禁用不需要使用磁盘配额限制的VE中的设置。

3、禁用VE的磁盘配额
原来的状态为:
引用
# vzctl exec 115 df -h
Filesystem Size Used Avail Use% Mounted on
simfs 1.0G 395M 630M 39% /

修改配置文件,加入:
引用
# vi /etc/vz/conf/115.conf
# grep 'DISK_QUOTA' /etc/vz/conf/115.conf
DISK_QUOTA=no

结果:
引用
# vzctl stop 115;vzctl start 115
# vzctl exec 115 df -h
Filesystem Size Used Avail Use% Mounted on
simfs 9.9G 8.5G 882M 91% /

禁用磁盘配额后,VE就可使用HW的整个/VE分区的大小了。

4、启用VE的磁盘配额
VE的配置文件内容为:
引用
#DISK_QUOTA=no #注释掉后,就使用全局配置,即打开
DISKSPACE="1048576:1153434"
DISKINODES="200000:220000"
QUOTATIME="600" #0表示关闭

下面的命令实现相同的设置:

# vzctl set 115 --diskspace 1048576:1153434 --save
# vzctl set 115 --diskinodes 200000:220000 --save
# vzctl set 115 --quotatime 600 --save

(--save为保存到配置文件,不应实时修改磁盘配额)
结果:
引用
# vzctl stop 115;vzctl start 115
# vzctl exec 115 df -h
Filesystem Size Used Avail Use% Mounted on
simfs 1.0G 395M 630M 39% /
[root@asptest ~]# vzctl exec 115 stat -f /
File: "/"
ID: 0 Namelen: 255 Type: ext2/ext3
Blocks: Total: 262144 Free: 161250 Available: 161250 Size: 4096
Inodes: Total: 200000 Free: 178286

四、配置second-level quotas
默认情况下,second-level quotas是关闭的。而且,若不打开该VE的first-level quotas,将不能使用second-level quotas设置。
1、打开second-level quotas支持
只要为VE的配置文件,设置一个非0的合适值就可以:

# vzctl set 115 --quotaugidlimit 100 --save

或者:
引用

# vi /etc/vz/conf/115.conf
QUOTAUGIDLIMIT="100"

100 - means that 100 users inside VE can be limited by disk quota.
设置后,需要重启VE。

2、参数值的含义
该参数的值有两个含义:
引用
1)非0,表示打开该设置;
2)该值会限制VE中可用second-level quotas的文件属主和组的数量;

以一个基于Red Hat的VE为例,其/etc/passwd和/etc/group就会包含约80个entries(条目),所以,该值必须大于80,常设置为100。若在VE中需要继续增加用户,同样的,就需要加大该参数的值。也就是说,如果entries数已经达到限制该值的限制,那新增加的用户就不能拥有其文件了。
需要注意的是,该值并不是越大越好的,过大的设置会消耗VPS的内存资源,够用就可以了。

3、设置second-level quotas
实际上,只要激活VE的second-level支持,后面的设置就会交由VE内Linux核心的quota模块和套件处理了。
进入VE中:
引用
# vzctl enter 115
entered into VE 115

查询quota 套件:
引用
# rpm -qa|grep quota
quota-3.12-5

磁盘支持:
引用
# cat /etc/mtab
/dev/simfs / reiserfs rw,usrquota,grpquota 0 0
proc /proc proc rw,nodiratime 0 0
devpts /dev/pts devpts rw 0 0

设置:
(单位是1Kb bytes)
引用
# edquota root
Disk quotas for user root (uid 0):
Filesystem blocks soft hard inodes soft hard
/dev/simfs 404036 512000 512000 23213 50000 50000

查看:
引用
# repquota -a
*** Report for user quotas on device /dev/simfs
Block grace time: 00:00; Inode grace time: 00:00
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 404036 512000 512000 23212 50000 50000
named -- 44 0 0 11 0 0
rpm -- 9912 0 0 67 0 0
smmsp -- 4 0 0 1 0 0
apache -- 8 0 0 2 0 0
mysql -- 21040 0 0 53 0 0

测试:
引用
# dd if=/dev/zero of=test
dd: writing to `test': Disk quota exceeded
1225865+0 records in
1225864+0 records out

结果:
引用
# repquota -a
*** Report for user quotas on device /dev/simfs
Block grace time: 00:00; Inode grace time: 00:00
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 512000 512000 512000 23213 50000 50000
named -- 44 0 0 11 0 0
rpm -- 9912 0 0 67 0 0
smmsp -- 4 0 0 1 0 0
apache -- 8 0 0 2 0 0
mysql -- 21040 0 0 53 0 0

五、从HW检查Quota状态
使用vzquota可检查/var/vzquota/quota.vpsid的信息:
引用
# vzquota stat 115 -t
resource usage softlimit hardlimit grace
1k-blocks 543008 1048576 1153434
inodes 23347 200000 220000
User/group quota: on,active
Ugids: loaded 21, total 21, limit 100
Ugid limit was exceeded: no

User/group grace times and quotafile flags:
type block_exp_time inode_exp_time dqi_flags
user 0h
group 0h

User/group objects:
ID type resource usage softlimit hardlimit grace status
0 user 1k-blocks 512000 512000 512000 loaded
0 user inodes 23213 50000 50000 loaded
0 group 1k-blocks 510640 0 0 loaded
0 group inodes 22644 0 0 loaded
5 group 1k-blocks 20 0 0 loaded
5 group inodes 514 0 0 loaded
6 group 1k-blocks 0 0 0 loaded
6 group inodes 1 0 0 loaded
[the rest of output is skipped]

六、已知的Bug
1、设置second-level quotas Bug
当你完全按照上面的步骤设置second-level quotas,但在VE中运行发现问题:
引用
# edquota root
edquota: Cannot get info for user quota file from kernel on /dev/simfs: No such process
edquota: Can't initialize quota on /dev/simfs: No such process
No filesystems with quota detected.

可能你和我一样,刚好碰到一个已知的Bug,在下面有描述:
http://bugzilla.openvz.org/show_bug.cgi?id=632
首先,看看你HW使用的核心版本:
引用
# rpm -qa|grep ovzkernel
ovzkernel-smp-2.6.9-023stab044.4

如果刚好和我一样,那恭喜你了!unhappy,升级核心吧:

# yum update ovzkernel-smp

用2.6.9-023stab046.2-smp版本的核心即可避免该问题.

No comments:

Post a Comment