一、背景
PG的例行切换演练。
二、现象
最终的新主172.21.13.38,切主切了2次。修改两个参数文件后,第二次切回来的时候解决问题。
第一次遇到core问题,报错信息如下:
说明:
连接 su - postgres
的时候出现 resource temporarily unavailable
错误。
第二次PG日志报错
三、分析
四、处理
修改两个参数文件
1、/etc/security/limits.conf
修改部分
* soft nofile 1048576
* hard nofile 1048576
* soft nproc 60000
* hard nproc 60000
2、/etc/security/limits.d/20-nproc.conf
3、加载配置
sysctl -p
4、需要重启PG服务。(通过切库出去,再切回来,实现重启)
五、总结
主备库之间的postgres用户环境变量不一致导致。
六、补充
1、/etc/security/limits.d/20-nproc.conf 文件解释
/etc/security/limits.d/20-nproc.conf
文件是 Linux 系统中用于配置用户进程数限制的文件之一。它是 /etc/security/limits.conf
文件的扩展,通常用于覆盖或补充 /etc/security/limits.conf
中的设置。
当用户登录系统时,/etc/security/limits.d/20-nproc.conf 文件中的设置会被 pam_limits 模块读取并应用。
pam_limits 是一个 PAM(Pluggable Authentication Modules)模块,用于在用户登录时设置资源限制。
说明:
- postgres用户最终生效的进程数软限制是45000,
20-nproc.conf
中的参数顺序执行 20-nproc.conf
优先级高于/etc/security/limits.conf
2、/etc/security/limits.conf 文件解释
用户级别,最大打开文件数
# 禁止所有用户生成核心转储文件。核心转储文件通常用于调试程序崩溃的原因,
# 但有时可能不需要,或者出于安全考虑禁止生成。
* hard core 0
# 设置所有用户的软限制为 65535 个进程。用户可以请求增加到硬限制值(65535)。
* soft nproc 65535
# 设置所有用户的硬限制为 65535 个进程。用户不能超过这个值。
* hard nproc 65535
# 设置所有用户的软限制为 1048576 个文件。用户可以请求增加到硬限制值(1048576)。
* soft nofile 1048576
# 设置所有用户的硬限制为 1048576 个文件。用户不能超过这个值。
* hard nofile 1048576
# 说明: soft nofile 表示软限制
# hard nofile 表示硬限制
# 修改完成后生效方式 source /etc/security/limits.conf
在 /etc/security/limits.conf 文件中,你可以设置用户或组的资源限制。这些限制可以应用于单个用户或所有用户(使用 * 表示所有用户)。
3、/etc/sysctl.conf 文件解释
# 调整TCP参数 vi /etc/sysctl.conf
#YumChina Default Config
fs.file-max=4194304
fs.nr_open=5242880
vm.swappiness=0
net.ipv4.ip_forward=0
#YumChina Security
net.ipv4.conf.all.log_martians=1
net.ipv4.conf.default.log_martians=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.core.somaxconn=65535
vm.overcommit_memory=1
文件描述符限制
# 永久调整文件描述符限制
vi /etc/sysctl.conf
fs.file-max = 1000000
重载生效
sysctl -p