[原]管理OpenVZ资源-Disk Quotas篇

   通过对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版本的核心即可避免该问题。

在Asinuax 3.0 上使用Xen 虚拟化
Asianux 4.0 中KVM 使用桥接
使用HyperVM管理OpenVZ
把物理系统搬入OpenVZ中
配置Squid 2.6实现反向代理

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/112481.html

(0)
上一篇 2021年8月27日 02:28
下一篇 2021年8月27日 02:29

相关推荐

发表回复

登录后才能评论