/etc/security/limits.d 及 /etc/sysctl.d/ 目录中的资源限制与内核行为均无法被 tiup 工具读取

Bug 反馈

/etc/security/limits.d/ 目录中,为 tidb 专门指定资源限制。无法被tiup工具读取。

/etc/sysctl.d/ 目录中,为 tidb 专门指定内核行为。无法被tiup工具读取。

【 TiDB 版本】TiDB v7.1.1
【 Bug 的影响】

【可能的问题复现步骤】

[root@h200 ~]# more /etc/security/limits.d/tidb.conf 
tidb  soft nofile  1000000
tidb  hard nofile  1000000
tidb  soft stack   32768
tidb  hard stack   32768

[root@h200 ~]# cat /etc/sysctl.d/tidb.conf 
vm.swappiness = 0
fs.file-max = 1000000
net.core.somaxconn = 32768
net.ipv4.tcp_syncookies = 0
vm.overcommit_memory = 1

【看到的非预期行为】

192.168.3.201  limits        Fail    soft limit of 'stack' for user 'tidb' is not set or too low
192.168.3.201  limits        Fail    soft limit of 'nofile' for user 'tidb' is not set or too low
192.168.3.201  limits        Fail    hard limit of 'nofile' for user 'tidb' is not set or too low

192.168.3.200  sysctl        Fail    net.ipv4.tcp_syncookies = 1, should be 0

【其他背景信息或者截图】

这个应该是不能读取的吧

可以设置全局的试试

操作系统是什么 ulimit -a tidb 看看结果

你用tidb用户执行ulimit -a,显示什么?

写到 limits.conf 中试试

手工改系统配置文件 /etc/security/limits.conf

解决这个问题需要确保 TiUP 工具能够正确读取这些配置文件,并将配置应用到 TiDB 实例。以下是一些可能的解决方案:

确保 TiUP 工具有足够的权限读取 /etc/security/limits.d/ 和 /etc/sysctl.d/ 目录下的文件。可以使用 ls -l 命令检查文件的权限和所有者。确保 TiUP 工具运行时具有足够的权限。

确保 TiUP 工具能够访问 /etc/security/limits.d/ 和 /etc/sysctl.d/ 目录。有时,TiUP 工具运行在一个受限制的环境中,可能无法访问某些目录。可以尝试在 TiUP 工具运行的上下文中手动访问这些目录,看是否会出现权限问题。

确保配置文件的格式正确,特别是文件名和内容。TiUP 工具可能只能读取特定格式的配置文件。可以检查文件的语法和格式是否正确。

确保配置文件中的配置项适用于 TiDB 进程。有时,配置文件中的配置项可能会被其他进程忽略或覆盖。确保配置项对 TiDB 进程生效。

可以尝试将这些资源限制和内核行为配置写入 TiDB 启动脚本中,确保 TiDB 进程在启动时能够正确应用这些配置。

将资源限制设置到 /etc/security/limits.d/tidb.conf 中,对 tidb 用户是生效的。但是,无法被 tiup 部署工具读取。必须要全局设置(/etc/security/limits.conf),才可被 tiup 读取。但是,在部署oracle时,无论全局设置,还是 /etc/security/limits.d/ 目录中设置,均可被 oracle 安装程序读取到。

[tidb@h200 ~]$ id
uid=1001(tidb) gid=1001(tidb) groups=1001(tidb),10(wheel)
[tidb@h200 ~]$ cat /etc/security/limits.d/tidb.conf 
tidb  soft nofile  1000000
tidb  hard nofile  1000000
tidb  soft stack   32768
tidb  hard stack   32768
[tidb@h200 ~]$ ulimit -a
real-time non-blocking time  (microseconds, -R) unlimited
core file size              (blocks, -c) unlimited
data seg size               (kbytes, -d) unlimited
scheduling priority                 (-e) 0
file size                   (blocks, -f) unlimited
pending signals                     (-i) 13499
max locked memory           (kbytes, -l) 65536
max memory size             (kbytes, -m) unlimited
open files                          (-n) 1000000
pipe size                (512 bytes, -p) 8
POSIX message queues         (bytes, -q) 819200
real-time priority                  (-r) 0
stack size                  (kbytes, -s) 32768
cpu time                   (seconds, -t) unlimited
max user processes                  (-u) 13499
virtual memory              (kbytes, -v) unlimited
file locks                          (-x) unlimited

1 个赞

设置了那个用户的限制,按正常肯定是肯定通过该用户登陆可以读到登陆用户的limits,没有跨用户读取这么一说。tiup 你是用tidb用户使用应该是正常的。你是怎么操作的,是否可以贴出来,我这边复现一下。

从源码中查看,修复集群潜在分享块,是在 /etc/security/limits.conf 中配置的。

1 个赞

是说配置不符合要求。

+1

TiDB 环境与系统配置检查 | PingCAP 文档中心

但是,在部署oracle时,无论全局设置,还是 /etc/security/limits.d/ 目录中设置,均可被 oracle 安装程序读取到。

  • --> 我觉得, 得参考 tidb 官网指导吧, Oracle 能识别到不代表 tidb 就要能识别到(个人意见)
    

不过, 应该算是 Feature : Suggestion: adding function which multi-files can be aware of soft/hard limit · Issue #2245 · pingcap/tiup (github.com)
都是我的个人意见, 提到 Github 里了, 但是研发认不认为产品应该这样设计就不知道了, 可以 follow 这个 issue.

这个 topic 我先以 ffeennThatBoy 老师的回复做答案结束了哈

1 个赞

这种在/etc/security/limits.d/ 目录中独立设置用户资源限制,是 linux 系统中的标准。/etc/security/limits.conf 中描述如下:

[root@idc1-sjcredit-tiup ~]# cat /etc/security/limits.conf

# /etc/security/limits.conf

#

#This file sets the resource limits for the users logged in via PAM.

#It does not affect resource limits of the system services.

#

#Also note that configuration files in /etc/security/limits.d directory,

#which are read in alphabetical order, override the settings in this

#file in case the domain is the same or more specific.

#That means, for example, that setting a limit for wildcard domain here

#can be overridden with a wildcard setting in a config file in the

#subdirectory, but a user specific setting here can be overridden only

#with a user specific setting in the subdirectory.

#

#Each line describes a limit for a user in the form:

固定写死的硬编码啊?只读取 /etc/security/limits.conf

目前看官方的建议是这的,后面看是否会采取 jansu-dev 老师提上去的建议。

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。