GCP 服务器因"cloudsql.enable_instance_password_validation"而崩溃



在过去的一天里,我经常遇到这个错误,这导致需要重置云实例才能继续连接:

ERROR:  unrecognized configuration parameter "cloudsql.enable_instance_password_validation"

这是在PostgreSQL 14 GCP Cloud SQL社区共享的1 vCPU,0.614 GB实例上运行的,但也在问题持续存在的标准1 vCPU 3.7 GB实例上进行了测试。

自此事件发生以来,唯一更改的代码是使用Golang PGX池接口的侦听/通知调用,该调用已被还原,问题仍然存在。

任何数据库调用(在重置后30分钟内(都会定期出现问题,并且我没有设置任何涉及";enable_instance_password_validation"-我也找不到任何涉及此名称的参数。

这是一个有趣的问题,@enocom正确地指出Postgresql中出现的错误是转移注意力。在整个过程中,由于Go服务器实例和Postgresql服务器之间的问题,出现了一些问题。

崩溃的真正原因是用于与Postgres数据库交互的Golang PGX池接口默认情况下的最大"DBMaxPools"上限为14个连接。当我们连接到这个数量时,服务器挂起,没有任何错误日志,所有进一步的连接都会被永久拒绝。

要解决这个问题,只需要在调用时在dbURI中添加一个"pool_max_conns">

dbPool, err := pgxpool.Connect(context.Background(), dbURI)

这可以通过以下方式完成:

dbURI = fmt.Sprintf(`postgresql://%s:%s@%s:%s/%s?pool_max_conns=%s`, config.DBUser, config.DBPassword, config.DBAddress, config.DBPort, config.DBName, config.DBMaxPools)

详细说明可以在这里找到:pgxpool包信息

设置PGX最大连接时,请确保将此数字设置为与服务器实例的最大并发连接相同或相似,以避免再次发生这种情况。对于GCP云运行实例,这可以在部署修订中的"每个容器的最大请求数"下进行设置

相关内容

  • 没有找到相关文章

最新更新