Linux 和 macOS 上的高可用性和災害復原

下載 ODBC 驅動程式

適用於 Linux 和 macOS 的 ODBC 驅動程式支援 Always On 可用性群組。 如需 Always On 可用性群組的詳細資訊,請參閱:

您可以在連接字串中指定特定可用性群組的可用性群組接聽程式。 如果 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) 中的所有可用性群組和容錯移轉叢集執行個體更快速地容錯移轉。

此連線屬性也會大幅縮短單一和多重子網路 Always On 拓撲的容錯移轉時間。 在多重子網路容錯移轉期間,用戶端會嘗試平行連線。 在子網路容錯移轉期間,驅動程式會積極重試 TCP 連接。

MultiSubnetFailover 連線屬性指出應用程式正在部署於可用性群組或容錯移轉叢集執行個體。 驅動程式會嘗試連線至所有 IP 位址,以嘗試連線至主要 SQL Server 執行個體上的資料庫。

使用 MultiSubnetFailover=Yes 進行連線時,用戶端重試 TCP 連線的速度會比作業系統的預設 TCP 重新傳輸間隔還要快。 MultiSubnetFailover=Yes 可在容錯移轉 Always On 可用性群組或 Always On 容錯移轉叢集執行個體之後更快速地重新連線。 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 時,連線會指派給可能已因為資料庫存在的下列任何特殊設定:

  • Always On。 資料庫可在目標可用性群組資料庫允許或不允許讀取工作負載。 此選擇是透過使用 PRIMARY_ROLESECONDARY_ROLE Transact-SQL 陳述式的 ALLOW_CONNECTIONS 子句來控制的。

  • 異地複寫

  • 讀取縮放

如果沒有任何那些特殊目標可用,則會從一般資料庫讀取。

ApplicationIntentApplicationIntent 關鍵字可啟用「唯讀路由」 。

唯讀路由

唯讀路由功能可確保資料庫之唯讀複本的可用性。 若要啟用唯讀路由,必須符合下列所有條件:

  • 您必須連線到 Always On 可用性群組接聽程式。

  • ApplicationIntent 連接字串關鍵字必須設為 ReadOnly

  • 資料庫管理員必須設定可用性群組,以啟用唯讀路由。

每個都使用唯讀路由的多個連線,可能不會都連線到相同的唯讀複本。 資料庫同步處理的變更或伺服器路由組態的變更,可能會導致用戶端連接至不同的唯讀複本。

您可以「不」將可用性群組接聽程式傳遞給 Server 連接字串關鍵字,藉此確認所有唯讀要求都連線到同一個唯讀複本。 請改為指定唯讀執行個體的名稱。

唯讀路由連線到主要複本的時間可能會比較長。 這是因為唯讀路由會先連線到主要複本,再尋找最適合的可讀取次要複本。 由於有多個步驟,因此您應將 login 逾時增加為至少 30 秒。

ODBC 語法

兩個 ODBC 連接字串關鍵字支援 Always On 可用性群組:

  • ApplicationIntent

  • MultiSubnetFailover

如需 ODBC 連接字串關鍵字的詳細資訊,請參閱搭配 SQL Server Native Client 使用連接字串關鍵字

同等的連接屬性如下:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

如需 ODBC 連線屬性的詳細資訊,請參閱 SQLSetConnectAttr

使用 Always On 可用性群組的 ODBC 應用程式可以使用兩個函數中的其中一個來進行連線:

函式 描述
SQLConnect 函式 SQLConnect 可透過資料來源名稱 (DSN) 或連線屬性來支援 ApplicationIntentMultiSubnetFailover
SQLDriverConnect 函式 SQLDriverConnect 透過 DSN、連接字串關鍵字或連線屬性來支援 ApplicationIntentMultiSubnetFailover

另請參閱

連接字串關鍵字和資料來源名稱 (DSN)

程式設計指導方針

版本資訊