【问题标题】:Using ApplicationIntent=ReadOnly with Azure SQL Database Failover group and Primary Connection String将 ApplicationIntent=ReadOnly 与 Azure SQL 数据库故障转移组和主连接字符串一起使用
【发布时间】:2018-09-18 22:34:13
【问题描述】:

我已经开始使用 ApplicationIntent=ReadOnly;适用于运行良好的高级数据库。

但是,如果我使用故障转移组连接,则连接始终为 READ_WRITE。您能否在主 FOG 连接字符串中不使用 ApplicationIntent=ReadOnly: Server=tcp:xxxx-fog.database.windows.net,1433;Persist Security Info=False;Connection Timeout=300;TrustServerCertificate=True;Database=xxx;ApplicationIntent=ReadOnly;

我可以使用 geo-secondary 罚款 - 但我们已经在 geo-secondary 上有很多负载,所以我也想使用一些主要副本来读取。

【问题讨论】:

  • 请确保您已在 db 上启用 readscale 设置:docs.microsoft.com/en-us/powershell/module/azurerm.sql/…
  • 是的,它已启用 - 如果我使用服务器连接字符串,而不是故障转移组连接字符串,它可以完美运行。但这并不理想,因为这意味着如果故障转移,查询将失败。

标签: azure-sql-database


【解决方案1】:

ApplicationIntent 允许路由到高级或关键业务数据库的本地 HA 副本。使用故障转移组时,要对只读流量进行负载平衡,您应该使用 Server=tcp:.secondary.database.windows.net。这将适用于 FOG 中的任何数据库(高级或非高级),并将确保查询在故障转移时不会失败。我们也建议使用 ApplicationIntent。如果您将数据库升级到高级或关键业务,这将允许只读客户端利用本地 HA 副本而不更改连接字符串。

【讨论】:

  • 感谢您提供的信息 - 但我的理解是 tcp:.secondary.database.windows.net 将始终使用辅助(地理定位)数据库。我们已经将它用于我们所有的 ETL 工作,但正如我上面提到的,我们想利用主数据库的只读副本,这不正确吗?
  • 如果您的主要是高级或关键业务,您应该使用 ApplicationIntent=ReadOnly;服务器=tcp:fog_name.database.windows.net。故障转移后,它将开始将会话路由到新主数据库的本地 HA 副本。
  • 如上所述,我们尝试过 - 但连接始终是 READ_WRITE,这让我相信它忽略了 ApplicationIntent=ReadOnly;。如果我们使用直接连接字符串,而不是 FOG 连接字符串,那么它返回 READ_ONLY 就可以了
【解决方案2】:

只是为了更新 - Azure 已确认这是一个错误,他们将在接下来的几周内修复它。如果我们在将数据库添加到故障转移组后打开数据库的读取横向扩展功能,则通过故障转移组端点的连接不支持读取横向扩展重定向。 解决问题之前的当前解决方法是在将数据库添加到故障转移组之前打开数据库的读取规模功能。

【讨论】:

  • 这对你有用吗,假设它已经修复了吗?目前它对我们不起作用。
  • 是的,对我们来说工作正常 - 确保您没有使用 PRS 数据库,因为它不支持。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 1970-01-01
  • 2018-10-20
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
相关资源
最近更新 更多