PostgreSQL 连接数限制错误
目录
问题描述根本原因故障排查解决方案路径一 - 增加 PostgreSQL 容量路径二 - 调整 Harbor 的数据库连接池第一步 - 使用新值更新 CR第二步 - 验证配置生效第三步 - 确认 Harbor 运行正常问题描述
Harbor 组件日志(例如 core、jobservice)中出现如下数据库错误:
根本原因
Harbor 打开的并发 PostgreSQL 连接数超过了数据库允许的最大连接数(超过了 PostgreSQL 的 max_connections 配置)。
故障排查
检查 Harbor Core Deployment 的日志,确认是否存在 pq: sorry, too many clients already 错误信息。
解决方案
您有两条修改路径——根据诊断结果选择其中一条或两条同时执行。
判断是 PostgreSQL 的最大连接数设置过低,还是 Harbor 单 Pod 的连接池设置对于您的副本数来说过高,然后调整相应的值。 调整后,Harbor 的峰值连接数应保持在 PostgreSQL 限制之下。
路径一 - 增加 PostgreSQL 容量
如果 PostgreSQL 的 max_connections 对于您的 Harbor 规模来说过低,请在 PostgreSQL 端增加该值。具体操作步骤取决于您如何管理 PostgreSQL,本文不做详细说明。
您可以使用以下命令检查 PostgreSQL 的容量和当前使用情况:
路径二 - 调整 Harbor 的数据库连接池
如果 Harbor 打开的连接数过多,请减少 Harbor 的连接池配置。请注意:
database.maxOpenConns是针对每个 Pod(即每个 Harbor 组件实例)生效的;副本数增加会导致总连接数增加。- 修改
maxOpenConns时,请同时检查maxIdleConns,确保其设置合理(通常不超过maxOpenConns)。
第一步 - 使用新值更新 CR
将 <NAME> 替换为您的 Harbor CR 名称,<NAMESPACE> 替换为 Harbor CR 所在命名空间。
将 <MAX_OPEN_CONNS> 和 <MAX_IDLE_CONNS> 替换为您期望的数值。
第二步 - 验证配置生效
检查渲染后的配置是否反映了新的值。
输出应类似如下,且值应与您在 patch 命令中指定的相同:
第三步 - 确认 Harbor 运行正常
调整后,Harbor 的峰值连接数应保持在 PostgreSQL 限制之下。