排查 Azure Cosmos DB for PostgreSQL 的连接问题
适用对象:PostgreSQL 的 Azure Cosmos DB (由 PostgreSQL 的 Citus 数据库扩展提供支持)
连接问题可能由多种因素造成,例如:
- 防火墙设置
- 连接超时
- 登录信息不正确
- 已达到群集的连接限制
- 服务的基础结构出现问题
- 服务维护
- 协调器节点故障转移到新硬件
通常,Azure Cosmos DB for PostgreSQL 的连接问题可按如下方式分类:
- 暂时性错误(短暂或间歇性)
- 持久或非暂时性错误(定期重复发生的错误)
对暂时性错误进行故障排除
出现暂时性错误的原因有多种。 最常见的原因包括系统维护、硬件或软件错误以及协调器节点 vCore 升级。
为群集节点启用高可用性可以自动缓解这些类型的问题。 但应用程序仍应为暂时性失去连接作好准备。 并且其他事件可能需要更长的时间才能缓解,例如,某个大型事务导致需要长时间才能恢复运行。
解决暂时性连接问题的步骤
- 查看 Azure 服务仪表板,了解应用程序报错期间出现的任何已知中断。
- 连接到云服务的应用程序,例如 Azure Cosmos DB for PostgreSQL,应会出现暂时性错误并应作出正确反应。 例如,应用程序应实现重试逻辑来处理这些错误,而不是向用户显示应用程序错误。
- 当群集即将达到其资源限制时,错误可能会看起来像是暂时性连接问题。 增加节点 RAM 或添加辅助节点和重新均衡数据可能会有所帮助。
- 如果连接问题仍然存在,或持续时间超过 60 秒,或每天发生一次以上,请提交 Azure 支持请求,方法是在 Azure 支持网站上选择“获取支持”。
排查一再出现的错误
如果应用程序持久未能连接 Azure Cosmos DB for PostgreSQL,最常见的原因是防火墙配置错误或用户错误。
- 协调器节点防火墙配置:请确保服务器防火墙配置为允许来自你的客户端(包括代理服务器和网关)的连接。
- 客户端防火墙配置:客户端的防火墙必须允许连接到数据库服务器。 某些防火墙要求不仅要允许应用程序(按名称),同时要允许服务器的 IP 地址和端口。
- 用户错误:仔细检查连接字符串。 可能输入了错误的参数值,如服务器名称。 可以在 Azure 门户中找到各种语言框架和 psql 的连接字符串。 转到群集中的“连接字符串”页面。 另外请记住,群集只具有一个数据库,其预定义的名称为“Citus”。
解决永久性连接问题的步骤
- 设置防火墙规则以允许客户端 IP 地址。 (仅出于临时测试目的)使用 0.0.0.0 作为起始 IP 地址,使用 255.255.255.255 作为结束 IP 地址,来设置一个防火墙规则。 该规则会向所有 IP 地址打开服务器。 如果该规则可以解决连接性问题,请将其删除,再针对有相应限制的 IP 地址或地址范围创建防火墙规则。
- 在客户端与 Internet 之间的所有防火墙上,确保为出站连接打开端口 5432(如果使用连接池,则还要打开 6432)。
- 验证连接字符串和其他连接设置。
- 在仪表板中检查服务运行状况。