首批通过分布式安全可靠测评,为关键业务系统打造
配置 cgroup
更新时间:2026-03-14 10:23:48
本文主要介绍如何为 OceanBase 数据库配置 cgroup。
背景信息
OceanBase 数据库的当前版本中,由于租户工作线程和大部分后台线程均根据租户来区分,网络线程为共享线程,用户可以通过配置 cgroup 来控制租户 CPU 或 IOPS 等资源的占用。在开始配置 cgroup 前,建议您先了解 cgroup 的概念,有关 cgroup 的介绍信息请参见 资源隔离概述。
使用限制或注意事项
由于设置资源隔离对性能影响比较大,以下场景下不建议使用 cgroup 功能进行租户的资源隔离:
单租户场景,即集群中只有一个租户
租户之间有业务关联的场景,例如,不同的微服务放在不同的租户,从而租户相互间呈上下游关系
小规格租户场景,即 CPU 为 2C 或 4C 的租户
要使用 cgroup 功能,要求 Linux 内核版本必须为 Linux Kernel 4.19 及以上版本。
OceanBase 数据库升级后,需要重新配置 cgroup。
如果 OBServer 服务器重启,创建好的 cgroup 子目录(例如,本文档中
/sys/fs/cgroup/目录下的所有子目录)会被清除,需要重新配置 cgroup。
操作步骤
步骤一:配置 cgroup 系统目录
注意
- cgroup 系统目录的配置操作可以在 OceanBase 数据库软件安装前进行,也可以在 OceanBase 数据库软件安装后进行。本文档以 OceanBase 数据库软件已安装的前提下为例,提供 cgroup 系统目录的配置操作指导。
- 配置 cgroup 系统目录时需要
root用户权限。
本节以在一个 OBServer 节点上配置 cgroup 系统目录为例,如果有多个 OBServer 节点,则每个 OBServer 节点上都需要配置。
使用
admin用户登录到 OBServer 服务器。执行以下命令,挂载
/sys/fs/cgroup目录。说明
如果已经存在
/sys/fs/cgroup目录,则可忽略该步骤。[admin@xxx /]$ sudo mount -t tmpfs cgroups /sys/fs/cgroup其中,
cgroups为自定义名称,用于在查看 Mount 信息时进行标识。挂载结果如下所示。
$df Filesystem 1K-blocks Used Available Use% Mounted on / 293601280 28055472 265545808 10% / /dev/v01d 2348810240 2113955876 234854364 91% /data/1 /dev/v02d 1300234240 1170211208 130023032 91% /data/log1 shm 33554432 0 33554432 0% /dev/shm /dev/v04d 293601280 28055472 265545808 10% /home/admin/logs cgroups 395752136 0 395752136 0% /sys/fs/cgroup创建
/sys/fs/cgroup/cpu目录并修改 Owner 后,挂载 cpu 子系统。说明
如果已经存在
/sys/fs/cgroup/cpu目录且目录为空,则可忽略该步骤。[admin@xxx /]$ sudo mkdir /sys/fs/cgroup/cpu [admin@xxx /]$ sudo chown admin:admin -R /sys/fs/cgroup/cpu创建一个名为
cpu的层级,在该层级上附加cpu子系统,并且将层级挂载到/sys/fs/cgroup/cpu目录。[admin@xxx /]$ sudo mount -t cgroup -o cpu cpu /sys/fs/cgroup/cpu创建名为
oceanbase的子目录,并修改其 Owner 为admin。[admin@xxx /]$ sudo mkdir /sys/fs/cgroup/cpu/oceanbase [admin@xxx /]$ sudo chown admin:admin -R /sys/fs/cgroup/cpu/oceanbase为
oceanbase目录分配 CPU 和 Memory 资源。执行以下命令,查看机器上 cpu、cpuacct、cpuset 三个子系统的挂载情况。
[admin@xxx /]$ ll /sys/fs/cgroup根据子系统的挂载情况,选择合适的操作:
cpuset 子系统与 cpu、cpuacct 等子系统一起挂载
该场景下,通常是三个子系统挂载在同一目录下,例如,挂载结果如下所示。
drwxr-xr-x 3 root root 0 Jul 24 2020 blkio lrwxrwxrwx 1 root root 33 Jul 24 2020 cpu -> /sys/fs/cgroup/cpuset,cpu,cpuacct lrwxrwxrwx 1 root root 33 Jul 24 2020 cpuacct -> /sys/fs/cgroup/cpuset,cpu,cpuacct lrwxrwxrwx 1 root root 33 Jul 24 2020 cpuset -> /sys/fs/cgroup/cpuset,cpu,cpuacct drwxr-xr-x 4 root root 0 Jul 24 2020 cpuset,cpu,cpuacct对于该场景,需要执行以下命令来为
oceanbase目录分配 CPU 和 Memory 资源。[admin@xxx /]$ sudo sh -c "echo `cat /sys/fs/cgroup/cpu/cpuset.cpus` > /sys/fs/cgroup/cpu/oceanbase/cpuset.cpus" [admin@xxx /]$ sudo sh -c "echo `cat /sys/fs/cgroup/cpu/cpuset.mems` > /sys/fs/cgroup/cpu/oceanbase/cpuset.mems"cpuset 子系统与 cpu、cpuacct 等子系统分开挂载
该场景下,cpuset 子系统与 cpu、cpuacct 等子系统为分开挂载(通常 ECS 机型较多),其挂载结果如下所示。
drwxr-xr-x 2 root root 40 2月 27 15:27 blkio lrwxrwxrwx 1 root root 11 2月 27 15:27 cpu -> cpu,cpuacct lrwxrwxrwx 1 root root 11 2月 27 15:27 cpuacct -> cpu,cpuacct drwxr-xr-x 2 root root 40 2月 27 15:27 cpu,cpuacct drwxr-xr-x 2 root root 40 2月 27 15:27 cpuset对于该场景,不需要执行额外操作,直接进行下一步即可。
行以下命令,为
oceanbase目录设置子目录的继承属性。[admin@xxx /]$ sudo sh -c "echo 1 > /sys/fs/cgroup/cpu/oceanbase/cgroup.clone_children"命令执行成功后,在
oceanbase目录下创建的 cgroup 子目录,其属性均会继承父目录。
步骤二:与 OceanBase 数据库建立软链接
配置 cgroup 系统目录后,需要建立 OceanBase 数据库软件的安装目录与 cgroup 系统目录的软链接。
使用
admin用户登录到 OBServer 节点。手动建立 OceanBase 数据库软件的安装目录与 cgroup 系统目录的软链接。
[admin@xxx /home/admin]$ cd /home/admin/oceanbase/ [admin@xxx /home/admin] $ ln -sf /sys/fs/cgroup/cpu/oceanbase/ cgroup其中:
/home/admin/oceanbase/为 OceanBase 数据库软件的安装路径。执行成功后,结果如下所示。
[admin@xxx /home/admin/oceanbase] $ll cgroup lrwxrwxrwx 1 admin admin 29 Dec 8 11:09 cgroup -> /sys/fs/cgroup/cpu/oceanbase/ lrwxrwxrwx 1 admin admin 29 Dec 8 11:09 cgroup -> /sys/fs/cgroup/blkio/oceanbase/
步骤三:开启 cgroup 功能
OceanBase 数据库通过集群级配置项 enable_cgroup 来控制 OBServer 是否开启 cgroup 功能,其默认值为 True,表示开启 cgroup 功能。建立软链接并开启 cgroup 功能后,不需要重启 OBServer 节点,cgroup 功能就会自动生效。
如果未开启 cgroup 功能,您可以参考以下操作,开启 cgroup 功能。
使用
root用户登录集群的sys租户。执行以下命令,开启 cgroup 功能。
obclient> ALTER SYSTEM SET enable_cgroup = true;或者
obclient> ALTER SYSTEM SET enable_cgroup = 1;
后续操作
成功配置 cgroup 系统目录并开启 cgroup 功能后,在应急情况下,您可以通过各租户所在目录下的 cpu.cfs_period_us、cpu.cfs_quota_us、cpu.shares 等文件来控制租户内 CPU 资源的占用。一般不建议使用该方式进行资源隔离。
建议使用 cgroup 中的目录文件调用 DBMS_RESOURCE_MANAGER 系统包中的子程序 CREATE_CONSUMER_GROUP 创建的资源组,来进行用户级或 SQL 级的资源隔离。配置资源隔离的详细操作,参见 配置租户内资源隔离。