人大金仓数据库KingbaseES cgroup资源组安装及配置

129 阅读2分钟

关键字:

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;

\-另起三个会话,分别使用resgroup_user1resgroup_user2resgroup_user3,resgroup_user4登录并执行以下语句callaa();另开一个会话,执行topc命令,使用tasksetpc0pid绑定4ksql进程到一个cpu,再次使用topc命令观察各个进程的cpu占比,是否为2:1:1:2停止其它三个用户的调用,只使用一个用户调用callaa();观察总CPU占比是否满足限制比例。 \--另起三个会话,分别使用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占比是否满足限制比例。