ulimit设置未生效,导致的GBase 8a 安装程序报错
一、服务器环境
OS: redhat 7.4
CPU: AMD x86
DB: GBase8a_MPP_Cluster-9.5.2.44.10_patch.5-redhat7-x86_64
二、现象说明
root 用户执行 SetSysEnv.py 程序无报错信息后,gbase 用户执行 gcinstall.py 的安装程序报错
报错信息如下图 (SetSysEnv.py must be execute befor cluster is installed)

三、排查步骤
1.检查安装程序的日志文件gcinstall.log

检查日志文件,发现报错是因为安装程序在待安装节点检测 ulimit -n 的时候,返回值为1024的默认值,并不是应该出现的655360,所以安装程序判定环境配置没有完成
2.检查ulimit配置文件 limit.conf

发现配置文件已经正确的配置了gbase用户的资源限制
3.验证ulimit是否正确生效
su登录gbase用户,验证 ulimit -n

ssh 连接 gbase 用户,验证 ulimit -n

发现两种验证方式的结果不一致,su登录后可以看到ulimit -n已经按照 limit.conf 中的配置生效了,而ssh的方式,ulimit的结果还是默认值 1024,也就是安装程序报错的原因所在
4.使用系统命令 strace 进一步分析
使用系统命令 strace 分析 su - gbase方式是如何正确的读取到 limit.conf 配置文件并生效
以下通过 strace -o 将su - gbase 登录时的系统调用重定向到文本中进行分析


可以看到 su - gbase 的方式调用了pam_limits组件,并读取了limits.conf文件
5.排查 ssh 方式导致配置无法正确生效的原因
上面通过系统调用的分析,关注到了其中的关键信息 pam_limits,通过查阅资料以及会议探讨,了解到在 ssh 服务端的配置文件 sshd_config 中专门有管理 pam 插件是否启用的配置参数
vim /etc/ssh/sshd_config

以下是网络资源对该参数的解释说明

排查到这里,原因就比较明了了,/etc/security/limits.conf 文件实际是 Linux PAM 中 pam_limits.so 的配置文件,而没有使用 PAM 模块场景下,自然也就读取不到 /etc/security/limits.conf 的内容
为了启用pam_limits组件,我们需要将 UsePam 参数设为 yes,之后再重启sshd服务生效
vim /etc/ssh/sshd_config

systemctl restart sshd

6.检查sshd服务是否正常
检查服务器中的 ssh (客户端程序,对应安装包为 ssh-server )和 sshd 服务是否均已安装并正常启动,启动信息中无报错或警告

7.通过日志文件 /var/log/secure 确认pam插件是否被正确调用
su - gbase

tail -f /var/log/secure

ssh gbase@ip

tail -f /var/log/secure

8.重新执行安装程序,完成集群安装
tips:关于ulimit -n不生效的问题,还有很多的原因,以下列出几种常见的原因
① 排查/etc/profile等高优先级配置文件中,是否存在写死 ulimit -n 1024 的情况,如存在,需要注释掉或者删除,因为它会覆盖掉 limit.conf 中的参数配置
② linux在升级某些openssh版本的时候,会导致ulimit 文件打开数量上限被重置为1024,这个需要按照具体情况进行处理
③ 检查 /etc/pam.d/ 目录下的配置文件是否配置正确,重点关注 /etc/pam.d/system-auth 中是否存在 session required pam_limits.so 这一行配置
热门帖子
- 12025-12-01浏览数:182764
- 22023-05-09浏览数:25062
- 42023-09-25浏览数:18526
- 52020-05-11浏览数:17529