Linux 和 macOS 上的高可用性和灾难恢复

下载 ODBC 驱动程序

适用于 Linux 和 macOS 的 ODBC 驱动程序支持 AlwaysOn 可用性组。 有关 AlwaysOn 可用性组的详细信息,请参阅:

你可以在连接字符串中指定特定可用性组的可用性组侦听程序。 如果 Linux 和 macOS 上的 ODBC 应用程序连接到出现故障转移的可用性组中的某个数据库,原始连接将断开。 该应用程序必须打开一个新连接才能在故障转移之后继续工作。

如果你没有连接到可用性组侦听程序,则 Linux 和 macOS 上的 ODBC 驱动程序将按顺序循环访问与 DNS 主机名关联的所有 IP 地址。 如果 DNS 服务器返回的第一个 IP 地址不可连接,那么这些迭代可能会很耗时。

当你连接到可用性组侦听程序时,驱动程序将尝试建立与所有 IP 地址的并行连接。 如果连接尝试成功,驱动程序将丢弃所有挂起的连接尝试。

备注

由于连接可能因可用性组故障转移而失败,因此请实现连接重试逻辑。 重试失败的连接,直到它重新连接。 增加连接超时时间和实现连接重试逻辑会提高连接到可用性组的几率。

使用 MultiSubnetFailover 进行连接

连接到 SQL Server 2012 (11.x) 可用性组侦听程序或 SQL Server 2012 (11.x) 故障转移群集实例时,请始终指定 MultiSubnetFailover=YesMultiSubnetFailover 会为 SQL Server 2012 (11.x) 中的所有可用性组和故障转移群集实例启用更快速的故障转移。

此连接属性还可以显著缩短单子网和多子网 AlwaysOn 拓扑的故障转移时间。 在多子网故障转移过程中,客户端将尝试并行连接。 在子网故障转移期间,驱动程序会主动重试 TCP 连接。

MultiSubnetFailover 连接属性指示将在可用性组或故障转移群集实例中部署应用程序。 驱动程序会通过尝试连接到所有的 IP 地址,从而连接到主 SQL Server 实例上的数据库。

当你使用 MultiSubnetFailover=Yes 进行连接后,客户端将在比操作系统的默认 TCP 重传间隔更短的时间内重试 TCP 连接。 MultiSubnetFailover=Yes 会在 AlwaysOn 可用性组或 AlwaysOn 故障转移群集实例的故障转移之后进行更快速的重新连接。 MultiSubnetFailover=Yes 同时适用于单子网和多子网可用性组和故障转移群集实例。

连接到可用性组侦听程序或故障转移群集实例后,请使用 MultiSubnetFailover=Yes。 否则,应用程序性能可能会受到负面影响。

建议

连接到可用性组或故障转移群集实例中的服务器时:

  • 指定 MultiSubnetFailover=Yes以在连接到单子网或多子网可用性组时提高性能。

  • 在连接字符串中将可用性组的可用性组侦听程序指定为服务器。

  • 不能连接到配置了超过 64 个 IP 地址的 SQL Server 实例。

  • SQL Server 身份验证或 Kerberos 身份验证都可以用于 MultiSubnetFailover=Yes,并且不会影响应用程序的行为。

  • 你可以增加 loginTimeout 的值,以便满足故障转移时间并减少应用程序连接重试次数。

  • 不支持分布式事务。

如果只读路由不起作用,那么在以下情况下将无法连接到可用性组中的次要副本位置:

  • 如果未将辅助副本位置配置为接受连接。

  • 如果应用程序使用 ApplicationIntent=ReadWrite 且将次要副本位置配置为只读访问。

如果将主要副本配置为拒绝只读工作负荷且连接字符串包含 ApplicationIntent=ReadOnly,连接将失败。

指定应用程序意图

你可以在连接字符串中指定 ApplicationIntent 关键字。 可分配的值为 ReadWrite(默认值)或 ReadOnly

当你设置 ApplicationIntent=ReadOnly 时,客户端将在连接时请求读取工作负荷。 服务器在连接时和在执行 USE 数据库语句期间强制执行此意图。

ApplicationIntent 关键字不适用于旧版只读数据库。

ReadOnly 的目标

如果连接选择 ReadOnly,连接就会分配到数据库可能存在的下列任何特殊配置:

  • AlwaysOn。 数据库可允许或禁止目标可用性组数据库上的读取工作负载。 此选项通过使用 PRIMARY_ROLESECONDARY_ROLE Transact-SQL 语句的 ALLOW_CONNECTIONS 子句进行控制。

  • 异地复制

  • 读取横向扩展

如果这些特殊目标都不可用,则从常规数据库读取。

关键字 ApplicationIntent 启用只读路由。

只读路由

只读路由是一项功能,可用于确保数据库的只读副本的可用性。 若要启用只读路由,必须遵守以下所有要求:

  • 必须连接到 AlwaysOn 可用性组侦听程序。

  • ApplicationIntent 连接字符串关键字必须设置为 ReadOnly

  • 数据库管理员必须配置可用性组才能启用只读路由。

使用只读路由的多个连接可能不会全部连接到相同的只读副本。 对数据库同步进行更改或对服务器的路由配置进行更改可能导致客户端连接到不同的只读副本。

你可以确保所有只读请求都连接到相同的只读副本,方法是不将可用性组侦听程序传递到 Server 连接字符串关键字。 而是指定只读实例的名称。

只读路由可能比连接到主要副本需要更长的时间。 等待时间较长是因为只读路由首先会连接到主要副本,然后查找最合适的可读次要副本。 由于需要执行多个步骤,所以应将 login 超时时间增加到至少 30 秒。

ODBC 语法

有两个 ODBC 连接字符串关键字支持 AlwaysOn 可用性组:

  • ApplicationIntent

  • MultiSubnetFailover

有关 ODBC 连接字符串关键字的详细信息,请参阅将连接字符串关键字用于 SQL Server Native Client

等效的连接属性为:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

有关 ODBC 连接属性的详细信息,请参阅 SQLSetConnectAttr

使用 AlwaysOn 可用性组的 ODBC 应用程序可以使用以下两个函数之一来建立连接:

函数 说明
SQLConnect 函数 SQLConnect 通过数据源名称 (DSN) 或连接属性支持 ApplicationIntentMultiSubnetFailover
SQLDriverConnect 函数 SQLDriverConnect 通过 DSN、连接字符串关键字或连接属性支持 ApplicationIntentMultiSubnetFailover

另请参阅

连接字符串关键字和数据源名称 (DSN)

编程指南

发行说明