排查 Azure Cosmos DB for PostgreSQL 的连接问题

适用对象:PostgreSQL 的 Azure Cosmos DB (由 PostgreSQL 的 Citus 数据库扩展提供支持)

连接问题可能由多种因素造成,例如:

  • 防火墙设置
  • 连接超时
  • 登录信息不正确
  • 已达到群集的连接限制
  • 服务的基础结构出现问题
  • 服务维护
  • 协调器节点故障转移到新硬件

通常,Azure Cosmos DB for PostgreSQL 的连接问题可按如下方式分类:

  • 暂时性错误(短暂或间歇性)
  • 持久或非暂时性错误(定期重复发生的错误)

对暂时性错误进行故障排除

出现暂时性错误的原因有多种。 最常见的原因包括系统维护、硬件或软件错误以及协调器节点 vCore 升级。

为群集节点启用高可用性可以自动缓解这些类型的问题。 但应用程序仍应为暂时性失去连接作好准备。 并且其他事件可能需要更长的时间才能缓解,例如,某个大型事务导致需要长时间才能恢复运行。

解决暂时性连接问题的步骤

  1. 查看 Azure 服务仪表板,了解应用程序报错期间出现的任何已知中断。
  2. 连接到云服务的应用程序,例如 Azure Cosmos DB for PostgreSQL,应会出现暂时性错误并应作出正确反应。 例如,应用程序应实现重试逻辑来处理这些错误,而不是向用户显示应用程序错误。
  3. 当群集即将达到其资源限制时,错误可能会看起来像是暂时性连接问题。 增加节点 RAM 或添加辅助节点和重新均衡数据可能会有所帮助。
  4. 如果连接问题仍然存在,或持续时间超过 60 秒,或每天发生一次以上,请提交 Azure 支持请求,方法是在 Azure 支持网站上选择“获取支持”。

排查一再出现的错误

如果应用程序持久未能连接 Azure Cosmos DB for PostgreSQL,最常见的原因是防火墙配置错误或用户错误。

  • 协调器节点防火墙配置:请确保服务器防火墙配置为允许来自你的客户端(包括代理服务器和网关)的连接。
  • 客户端防火墙配置:客户端的防火墙必须允许连接到数据库服务器。 某些防火墙要求不仅要允许应用程序(按名称),同时要允许服务器的 IP 地址和端口。
  • 用户错误:仔细检查连接字符串。 可能输入了错误的参数值,如服务器名称。 可以在 Azure 门户中找到各种语言框架和 psql 的连接字符串。 转到群集中的“连接字符串”页面。 另外请记住,群集只具有一个数据库,其预定义的名称为“Citus”。

解决永久性连接问题的步骤

  1. 设置防火墙规则以允许客户端 IP 地址。 (仅出于临时测试目的)使用 0.0.0.0 作为起始 IP 地址,使用 255.255.255.255 作为结束 IP 地址,来设置一个防火墙规则。 该规则会向所有 IP 地址打开服务器。 如果该规则可以解决连接性问题,请将其删除,再针对有相应限制的 IP 地址或地址范围创建防火墙规则。
  2. 在客户端与 Internet 之间的所有防火墙上,确保为出站连接打开端口 5432(如果使用连接池,则还要打开 6432)。
  3. 验证连接字符串和其他连接设置。
  4. 在仪表板中检查服务运行状况。

后续步骤