关键字:
KingbaseES、cgroup资源组、安装及配置
资源组基本概念
cgroup是Linux内核提供的一个机制,用于限制、监控和分配进程组的资源(如CPU、内存)等。Kes中cgroup资源组实现cgroup的功能,可以帮助用户将kes进程绑定到一个资源组中,并为不同用户设置不同资源限制。通过资源组功能,用户可以根据自己的需求为不同进程分配资源,并限制它们的使用,以确保系统中进程正常运行。
cgroup安装及配置
(1)、安装libcgroup
上传附件libcgroup-3.0.0.tar.gz,解压后,使用源代码编译安装
./configure
执行该命令如报错cannot compile PAM module without libpam
尝试./configure --disable-pam 命令安装
make
make install
注意: 如服务器配置了yum源,使用yum install libcgroup,yum install libcgroup-tools安装
(2)、运行环境
确认软件包安装后,以root用户创建顶层的cgroup
cgcreate -a username:username -t username:username -g cpu,cpuset,memory,blkio:KingbaseES
其中,username为启动kingbase数据库的用户,不确定使用用户的情况下请使用chmod命令给与所有用户读、写与目录访问权限。
该命令在 cpu,cpuset,memory,blkio 控制器下创建 cgroup "KingbaseES"并给于kingbase用户读写修改权限。
使用该命令后,在/sys/fs/cgroup的 cpu、 memory、 blkio 目录下会看到KingbaseES 目录。
若执行命令时报错,
可使用命令export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH 把安装的库路径加上即可。
请注意:
操作系统重启后顶层cgroup需要重新创建。
因资源限额特性会在cgroup挂载点动态创建和删除目录。创建的目录owner为启动kingbase的系统用户。所以如果有多个用户同时启动开启资源限额特性的kingbase服务时可能会有权限问题。
- 数据库的配置
在kingbase.conf文件中添加依赖库kdb_resource_group,设置resource_group_activated = on,并重启数据库服务。
连接数据库后执行
create extension kdb_resource_group ;
简单测试
create user resgroup_user1 superuser login;
create user resgroup_user2 superuser login;
create user resgroup_user3 superuser login;
create user resgroup_user4 superuser login;
create resource group rgroup1 with (user = 'resgroup_user1');
create resource group rgroup2 with (user = 'resgroup_user2');
create resource group rgroup3 with (user = 'resgroup_user3');
create resource group rgroup4 with (user = 'resgroup_user4');
ALTER RESOURCE GROUP rgroup1 SET (cpu_shares = 10000);
ALTER RESOURCE GROUP rgroup2 SET (cpu_shares = 5000);
ALTER RESOURCE GROUP rgroup3 SET (cpu_shares = 5000);
ALTER RESOURCE GROUP rgroup4 SET (cpu_shares = 10000);
select * from sys_resgroup;
select * from sys_resgroupcapability ;
select * from sys_resauthid;
create function aa() returns void as $$
declare ii integer;
begin
ii:=1;
while true loop
ii = ii + 1;
end loop;
end;
$$ LANGUAGE plpgsql;
--另起三个会话,分别使用resgroup_user1,resgroup_user2,resgroup_user3,resgroup_user4登录并执行以下语句
call aa();
另开一个会话,执行top -c命令,使用taskset -pc 0 pid 绑定4个ksql进程到一个cpu,再次使用top -c命令观察各个进程的cpu占比,是否为2:1:1:2
停止其它三个用户的调用,只使用一个用户调用call aa();观察总CPU占比是否满足限制比例。