PG切换主从失败的一种情况:用户环境变量

26 阅读2分钟

一、背景

PG的例行切换演练。




二、现象

最终的新主172.21.13.38,切主切了2次。修改两个参数文件后,第二次切回来的时候解决问题。

第一次遇到core问题,报错信息如下:

图片.png

说明: 连接 su - postgres 的时候出现 resource temporarily unavailable 错误。


第二次PG日志报错

图片.png




三、分析




四、处理

修改两个参数文件

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

图片.png

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)模块,用于在用户登录时设置资源限制。

图片.png

图片.png

图片.png

图片.png

说明:

  • 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 文件中,你可以设置用户或组的资源限制。这些限制可以应用于单个用户或所有用户(使用 * 表示所有用户)。

图片.png


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