问题现象
在操作系统内核版本为 3.10 的操作系统,使用 cgroup 方式部署 OBServer,存在着系统宕机的风险。
问题原因
旧版本操作系统内核的 BUG,在操作系统内核版本为 3.10 时使用 cgroup 可能会导致系统宕机。
关键信息
需满足操作系统内核版本 kernel version==3.10.0 且 OBServer 开启了cgroup。
检查操作系统内核版本。
使用
uname -r命令,示例如下。[admin@xxx /home/admin] $uname -r 3.10.0-327.xxx.xxx.x86_64结果开头的 3.10.0 为操作系统内核版本。
检查 OBServer 是否开启了cgroup。
对于 OceanBase 数据库 V3.2.3 及以下的版本,OBServer 通过检查 OBServer 工作目录下是否存在
cgroup软链接来开启或关闭cgroup。对于 OceanBase 数据库 V3.2.4 及以上的版本,OBServer 需要保证
enable_cgroup配置项为 True 且 OBServer 工作目录下存在cgroup软链接来开启cgroup。a. 检查 OBServer 工作目录下是否存在
cgroup软链接,示例如下。$ll /home/admin/observer total 84 drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 16:27 admin drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 31 15:47 audit drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 16:27 bin lrwxrwxrwx 1 zhangjuecheng.zjc users 29 Jul 31 15:47 cgroup -> /sys/fs/cgroup/cpu/oceanbase/ drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 18:12 etc drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 18:12 etc2 drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 18:12 etc3 drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 16:27 lib drwxr-xr-x 3 zhangjuecheng.zjc users 32768 Jul 31 15:46 log drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 16:27 plugin_dir drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 31 15:47 run drwxr-xr-x 5 zhangjuecheng.zjc users 4096 Jul 29 16:27 store drwxr-xr-x 2 zhangjuecheng.zjc users 4096 Jul 29 16:27 tools drwxr-xr-x 3 zhangjuecheng.zjc users 4096 Jul 29 16:27 wallet存在软链接
cgroup -> /sys/fs/cgroup/cpu/oceanbase/。b. 检查
enable_cgroup配置项。obclient> show parameters like 'enable_cgroup'; +-------+----------+-----------+----------+---------------+-----------+-------+---------------------------------------------------------------------------------------------------------+----------+---------+---------+------------------+---------------+-----------+ | zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level | default_value | isdefault | +-------+----------+-----------+----------+---------------+-----------+-------+---------------------------------------------------------------------------------------------------------+----------+---------+---------+------------------+---------------+-----------+ | zone1 | observer | 127.0.0.1 | 49101 | enable_cgroup | NULL | True | when set to false, cgroup will not init; when set to true but cgroup root dir is not ready, print ERROR | OBSERVER | CLUSTER | DEFAULT | STATIC_EFFECTIVE | True | 1 | +-------+----------+-----------+----------+---------------+-----------+-------+---------------------------------------------------------------------------------------------------------+----------+---------+---------+------------------+---------------+-----------+ 1 row in set (0.03 sec)此 OBServer 的
enable_cgroup配置项值为 True。
问题的风险及影响
OBServer 卡住或者挂掉,集群不可用。
适用版本
OceanBase 数据库 V3.x、V4.x 版本。
解决方法
将操作系统内核版本升级为 OBServer 支持的更新版本,例如 5.10 版本,4.19 版本等,同时 OBServer 也需要使用对应内核版本的镜像来部署。 推荐 OceanBase 数据库 V4.x 版本的 OBServer 升级操作系统内核版本为 5.10,在 4.19 内核上 OBServer 可能存在一定的性能回退问题,而 OceanBase 数据库 V3.x 版本的 OBServer 由于没有适配过操作系统内核版本 5.10,只可使用内核 4.19。
各云厂商推荐 OS 版本如下:
阿里云: alinux 3 (5.10)。
华为云: Huawei Cloud EulerOS 2.0 标准版,对应 Linux kernel 版本 5.10。
腾讯云: TencentOS Server 内核(简称 tkernel)当前主力内核版本 5.4。
百度云: BaiduLinux 3.0 (5.10)。
AWS: redRed Hat Enterprise Linux 9 (HVM) ,对应 Linux kernel 版本 5.10。
GCP: debian-11(5.10)。
规避方式
通过关闭 cgroup 功能临时规避,需要注意的是,不重启 OBServer 是无法彻底关闭 cgroup 的。
a)对于 OceanBase 数据库 V3.2.4 及更新版本设置 enable_cgroup 配置项为 False。
obclient> alter system set enable_cgroup=False;
Query OK, 0 rows affected (1.06 sec)
b)删除 OBServer 工作目录下的 cgroup 软链接并重启 OBServer。
rm -rf ./cgroup