分享方式:


部署具有高可用性的 SQL Server 巨量數據叢集

適用於:SQL Server 2019 (15.x)

這很重要

Microsoft SQL Server 2019 巨量資料叢集附加元件將會淘汰。 SQL Server 2019 巨量資料叢集的支援將於 2025 年 2 月 28 日結束。 平台上將完全支援含軟體保證 SQL Server 2019 的所有現有使用者,而且軟體將會持續透過 SQL Server 累積更新來維護,直到該時間為止。 如需詳細資訊,請參閱公告部落格文章Microsoft SQL Server 平台上的巨量資料選項

因為 SQL Server 巨量數據叢集是以容器化應用程式的形式在 Kubernetes 上,並且使用具狀態集和永續性記憶體等功能,因此此基礎結構具有叢集元件用來維護服務健康情況的內建健康情況監視、失敗偵測和故障轉移機制。 為了提高可靠性,您也可以設定 SQL Server 主要實例和/或 HDFS 名稱節點和 Spark 共用服務,以在高可用性設定中搭配其他複本進行部署。 監視、失敗偵測和自動故障轉移是由巨量數據叢集管理服務所管理,即控制服務。 此服務是在使用者不介入的情況下提供 –所有從可用性群組設定、設定資料庫鏡像端點,將資料庫新增至可用性群組或故障轉移和升級協調。

下圖代表如何在 SQL Server 巨量數據叢集中部署可用性群組:

high-availability-ag-bdc

以下是可用性群組啟用的一些功能:

  • 如果在部署組態檔中指定高可用性設定,則會建立名為 containedag 的單一可用性群組。 根據預設, containedag 有三個複本,包括主要複本。 可用性群組的所有 CRUD 作業都是在內部進行管理,包括建立可用性群組,或將複本聯結至所建立的可用性群組。 無法在巨量數據叢集中的 SQL Server 主要實例中建立其他可用性群組。

  • 所有資料庫都會自動新增至可用性群組,包括所有使用者和系統資料庫 (例如 mastermsdb)。 此功能提供跨可用性群組複本的單一系統檢視。 其他模型資料庫 - model_replicatedmastermodel_msdb - 用來初始化系統資料庫的複製部分。 除了這些資料庫之外,如果您直接連線到 實例,您將會看到 containedag_mastercontainedag_msdb 資料庫。 containedag 資料庫代表可用性群組內的 mastermsdb

    這很重要

    在實例上建立的資料庫,例如附加資料庫,不會自動新增至可用性群組。 SQL Server 巨量數據叢集系統管理員必須手動執行此動作。 若要瞭解如何啟用 SQL Server 實例主要資料庫的暫存端點,請參閱 連線到 SQL Server 實例。 在 SQL Server 2019 CU2 版本之前,因為還原語句而建立的資料庫的行為相同,而且資料庫必須手動新增至包含的可用性群組。

  • PolyBase 組態資料庫不會包含在可用性群組中,因為它們包含每個複本專屬的實例層級元數據。

  • 系統會自動佈建外部端點來連接到可用性群組中的資料庫。 master-svc-external 這個端點扮演可用性群組接聽程式的角色。

  • 第二個外部端點會布建給次級複本的唯讀連線,以擴展讀取負載。

部署

若要在可用性群組中部署 SQL Server 主機:

  1. 啟用hadr功能
  2. 指定 AG 的複本數目(最小值為 3)
  3. 配置配接至唯讀次要複本的第二個外部端點的詳細資訊。

您可以使用 aks-dev-test-hakubeadm-prod 內建組態設定檔來開始自訂巨量數據叢集。 這些配置檔包含設置資源所需的設定,您可以進一步配置以提升高可用性。 例如,以下是組態檔中的 bdc.json 區段,與啟用 SQL Server 主要實例的可用性群組有關。

{
  ...
    "spec": {
      "type": "Master",
      "replicas": 3,
      "endpoints": [
        {
          "name": "Master",
          "serviceType": "LoadBalancer",
          "port": 31433
        },
        {
          "name": "MasterSecondary",
          "serviceType": "LoadBalancer",
          "port": 31436
        }
      ],
      "settings": {
        "sql": {
          "hadr.enabled": "true"
        }
      }
    }
  ...
}

下列步驟逐步解說如何從 aks-dev-test-ha 配置檔開始並自定義巨量數據叢集部署設定的範例。 針對叢集上的kubeadm部署,會套用類似的步驟,但請確定您在 區NodePort段中使用 serviceTypeendpoints

  1. 複製目標個人資料檔案

    azdata bdc config init --source aks-dev-test-ha --target custom-aks-ha
    
  2. 視需要選擇性地對自訂配置檔進行任何編輯。

  3. 使用上面建立的叢集組態配置檔啟動叢集部署

    azdata bdc create --config-profile custom-aks-ha --accept-eula yes
    

連接到高可用性群組中的 SQL Server 資料庫

視您想要針對 SQL Server master 執行的工作負載類型而定,您可以連線到主要複本以進行讀寫工作負載,或連線到次要複本中的資料庫,以取得唯讀工作負載類型。 以下是每種連線類型的大綱:

連接到主要副本上的資料庫

若要連線到主要複本,請使用 sql-server-master 端點。 此端點也是 AG 的監聽器。 使用此端點時,所有連線都會位於可用性群組內的資料庫內容中。 例如,使用此端點的預設聯機會導致連線到 master 可用性群組內的資料庫,而不是 SQL Server 實例 master 資料庫。 執行此指令以尋找端點:

azdata bdc endpoint list -e sql-server-master -o table
Description                           Endpoint             Name               Protocol
------------------------------------  -------------------  -----------------  ----------
SQL Server Master Instance Front-End  11.11.111.111,11111  sql-server-master  tds

備註

故障轉移事件可能發生在分散式查詢執行期間,從 HDFS 或數據集區等遠端數據來源取數據。 最佳做法是,應用程式應該設計成在因故障轉移導致連線中斷時,具有重新嘗試的邏輯。

將資料庫連接到次要複本

如需次要複本中資料庫的唯讀連線,請使用 sql-server-master-readonly 端點。 此端點的作用就像是所有次要復本的負載平衡器。 使用此端點時,所有連線都會位於可用性群組內的資料庫內容中。 例如,使用此端點的預設聯機會導致連線到 master 可用性群組內的資料庫,而不是 SQL Server 實例 master 資料庫。

azdata bdc endpoint list -e sql-server-master-readonly -o table
Description                                    Endpoint            Name                        Protocol
---------------------------------------------  ------------------  --------------------------  ----------
SQL Server Master Readable Secondary Replicas  11.11.111.11,11111  sql-server-master-readonly  tds

連接到 SQL Server 實例

針對某些作業,例如設定伺服器層級組態或手動將資料庫新增至可用性群組,您必須連線到 SQL Server 實例。 在 SQL Server 2019 CU2 之前,執行諸如 sp_configureRESTORE DATABASE 或任何可用性群組 DDL 的操作,都需要這種類型的連線。 根據預設,巨量數據叢集不包含可啟用實例連線的端點,而且您必須手動公開此端點。

這很重要

針對 SQL Server 實例連線公開的端點僅支援 SQL 驗證,即使在啟用 Active Directory 的叢集中也是如此。 根據預設,在進行巨量資料叢集部署期間,會停用sa登入,並根據在部署時提供的sysadminAZDATA_USERNAME環境變數的值布建新的AZDATA_PASSWORD登入。

這很重要

自主可用性群組 DDL 在 BDC 中完全自我管理。 不支援任何(外部使用者)嘗試卸除隔離可用性或資料庫鏡像端點,這可能會導致無法復原的 BDC 狀態。

以下範例示範如何公開此端點,然後將使用還原工作流程建立的資料庫新增至可用性群組。 當您想要使用 sp_configure變更伺服器組態時,也適用設定 SQL Server 主要實例連線的類似指示。

備註

從 SQL Server 2019 CU2 開始,還原工作流程所建立的資料庫會自動新增至自主可用性群組。

  • 連線到 sql-server-master 端點並執行以下命令,以判斷裝載主要複本的 Pod:

    SELECT @@SERVERNAME
    
  • 藉由建立新的 Kubernetes 服務來公開外部端點

    kubeadm針對叢集,請執行下列命令。 將podName替換為上一個步驟中返回的伺服器名稱,將serviceName替換為已建立的 Kubernetes 服務的慣用名稱,將namespaceName替換為您的巨量資料叢集名稱。

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=NodePort
    

    針對 aks 叢集執行,請執行相同的命令,不同之處在於所建立的服務類型將會是 LoadBalancer。 例如:

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=LoadBalancer
    

    以下是針對 aks 執行的此指令範例,其中裝載主應用程式的 Pod 為 master-0

    kubectl -n mssql-cluster expose pod master-0 --port=1533  --name=master-sql-0 --type=LoadBalancer
    

    取得所建立 Kubernetes 服務的 IP:

    kubectl get services -n <namespaceName>
    

這很重要

最佳做法是您應該執行此命令,藉此清理先前建立的 Kubernetes 服務:

kubectl delete svc master-sql-0 -n mssql-cluster
  • 將資料庫新增至可用性群組。

    若要將資料庫新增至 AG,它必須在完整恢復模式下執行,而且必須進行記錄備份。 使用上述 Kubernetes 服務的 IP,並連線到 SQL Server 實例,然後執行 T-SQL 語句,如下所示。

    ALTER DATABASE <databaseName> SET RECOVERY FULL;
    BACKUP DATABASE <databaseName> TO DISK='<filePath>'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE <databaseName>
    

    下列範例會新增已在執行個體上還原的資料庫 sales

    ALTER DATABASE sales SET RECOVERY FULL;
    BACKUP DATABASE sales TO DISK='/var/opt/mssql/data/sales.bak'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE sales
    

已知的限制

以下是大型資料叢集中 SQL Server 主控節點的封裝可用性群組的已知問題和限制:

  • 部署巨量數據叢集時,必須建立高可用性組態。 您無法在部署後啟用高可用性設定與可用性群組。 目前,只啟用了同步提交複本的組態設定。

警告

將同步處理模式更新為仲裁認可中任何復本的異步認可,會導致高可用性的組態無效。 在此組態中執行牽涉到數據遺失風險,因為在影響主要複本的失敗事件時,不會觸發自動故障轉移,而且使用者在發出手動故障轉移時必須接受數據遺失的風險。

  • 若要從另一部伺服器上建立的備份成功還原已啟用 TDE 的資料庫,您必須確定必須在 SQL Server 實例主機和自主 AG 主機上還原 必要的憑證 。 如需如何備份和還原憑證的範例,請參閱 這裡
  • 某些作業,例如執行伺服器組態設定,需要 sp_configure 連線到 SQL Server 實例 master 資料庫,而不是可用性群組 master。 您無法使用對應的主要端點。 請遵循 指示 來公開端點,並連線到 SQL Server 實體並執行 sp_configure。 您只能在手動公開端點以連線到 SQL Server 實例 master 資料庫時使用 SQL 驗證。
  • 雖然 msdb 資料庫會被納入可用性群組中,而且 SQL Agent 作業會在整個群組中被複製,但這些作業只會按照排程在主要複本上執行。
  • 封裝可用性群組不支持複寫功能。 屬於內含 AG 的 SQL Server 實例無法在實例層級或內含 AG 層級中擔任分發者或出版者進行運作。
  • 不支援在建立資料庫時新增檔案群組。 因應措施是,您可以先建立資料庫,然後發出 ALTER DATABASE 語句來新增任何檔案群組。
  • 在 SQL Server 2019 CU2 之前,由CREATE DATABASERESTORE DATABASECREATE DATABASE FROM SNAPSHOT等工作流程以外的流程所建立的資料庫不會自動新增至可用性群組。 連接到 實例, 並手動將資料庫新增至可用性群組。
  • 在部署高可用性的巨量數據叢集上,目前不支援 Service Broker 和 Database Mail。

後續步驟