適用於:Linux 上的 SQL Server
本教學說明如何使用 DH2i DxOperator,為部署至 Azure Kubernetes Service(AKS)叢集的 Linux 型 SQL Server 容器設定 SQL Server Always On 可用性群組(AG)。 這些程序同樣適用於 Azure Red Hat OpenShift 叢集。 主要區別在於部署 Azure Red Hat OpenShift 叢集,接著在以下步驟中將指令替換kubectl為oc
透過本文的步驟,你將學習如何部署 StatefulSet,並使用 DH2i DxOperator 建立與配置一個由三個副本架設於 AKS 上的 AG。
本教學課程包含下列步驟:
- 使用 mssql-conf 設定在 AKS 叢集上建立
ConfigMap物件 - 建立祕密物件
- 安裝 DxOperator
- 使用 YAML 檔案部署三副本的 SQL Server 可用性群組
- 連接到 SQL Server
先決條件
Azure Kubernetes Service (AKS) 或 Kubernetes 叢集。
已啟用 AG 功能和通道的有效 DxEnterprise 授權。 如需詳細資訊,請參閱非生產環境的開發人員版本,或生產工作負載的 DxEnterprise 軟體。
建立 ConfigMap 物件
在 AKS 建立
ConfigMap物件,根據您的需求,它具有 mssql-conf 設定。 在這個範例中,你會使用名為ConfigMap且具有下列參數的檔案來建立mssqlconfig.yaml。apiVersion: v1 kind: ConfigMap metadata: name: mssql-config data: mssql.conf: | [EULA] accepteula = Y [sqlagent] enabled = true請執行以下指令建立物件。
kubectl apply -f ./mssqlconfig.yaml
建立祕密物件
建立祕密以儲存 SQL Server 的 sa 密碼。
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
注意事項
您的密碼應遵循 SQL Server 預設 密碼原則。 根據預設,密碼長度必須至少為8個字元,且包含下列四個集合中的三個字元:大寫字母、小寫字母、基底10位數和符號。 密碼長度最多可達 128 個字元。 盡可能使用長且複雜的密碼。
建立祕密以儲存 DH2i 的授權識別碼。 請造訪 DH2i 的網站以取得開發人員授權。 在下列範例中,將 XXXX-XXXX-XXXX-XXXX 取代為您的授權識別碼。
kubectl create secret generic dxe --from-literal=DX_PASSKEY="<password>" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX
安裝 DxOperator
安裝 DxOperator 時,請依照以下範例下載 DxOperator 的 YAML 檔案,然後套用 YAML 檔案。
請使用以下指令部署描述如何設定 AG 的 YAML 檔案。 使用自訂名稱儲存檔案,例如
DxOperator.yaml。curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml kubectl apply -f DxOperator.yaml安裝操作員後,你可以部署 SQL Server 容器、設定可用性群組、定義副本,並部署與配置 DxEnterprise 叢集。 請修改下列範例部署 YAML 檔案
DxSqlAg.yaml,使其符合您的需求。apiVersion: dh2i.com/v1 kind: DxSqlAg metadata: name: contoso-sql spec: sqlAgConfiguration: synchronousReplicas: 3 asynchronousReplicas: 0 # ConfigurationOnlyReplicas are only allowed with availabilityGroupClusterType set to EXTERNAL configurationOnlyReplicas: 0 availabilityGroupName: AG1 # Adds auto-generated load balancers to serviceTemplates for easy cluster access # For more customization, use the serviceTemplates section below #createLoadBalancers: true # Listener port for the availability group (uncomment to apply) #availabilityGroupListenerPort: 51433 # For a contained availability group, add the option CONTAINED #availabilityGroupOptions: CONTAINED # Disables automatic availability mode switching when scaling down #disableModeSwitching: true statefulSetSpec: podspec: dxEnterpriseContainer: image: "docker.io/dh2i/dxe:latest" imagePullPolicy: Always acceptEula: true clusterSecret: dxe vhostName: VHOST1 # Configuration options for the required persistent volume claim for DxEnterprise #volumeClaimConfiguration: # Set custom storage class for DxE PVC #storageClassName: example-class mssqlServerContainer: image: "mcr.microsoft.com/mssql/server:2025-latest" imagePullPolicy: Always mssqlSecret: mssql acceptEula: true mssqlPID: Developer # Set a non-default SQL Server port. DxOperator will auto-detect # the port from other sources too, such as mssqlConfigMap mssqlTcpPort: 51444 # The MSSQL configMap (mssql.conf file) mssqlConfigMap: mssql-config # Configuration options for the required persistent volume claim for SQL Server #volumeClaimConfiguration: # resources: # requests: # storage: 2Gi # Additional pod containers, such as mssql-tools #containers: #- name: mssql-tools #image: "mcr.microsoft.com/mssql-tools" #command: [ "/bin/sh" ] #args: [ "-c", "tail -f /dev/null" ]部署
DxSqlAg.yaml檔案。kubectl apply -f DxSqlAg.yaml
建立可用性群組接聽程式
更新你的
availabilityGroupListenerPort檔案中的DxSqlAg.yaml值:spec: sqlAgConfiguration: availabilityGroupListenerPort: 51433套用此檔案:
kubectl apply -f DxSqlAg.yaml套用以下 YAML 來為監聽者新增負載平衡器。
apiVersion: v1 kind: Service metadata: name: contoso-cluster-lb spec: type: LoadBalancer selector: dh2i.com/entity-name: contoso-sql # This label points to whichever pod is the active Vhost member dh2i.com/active-vhost-vhost1: "true" ports: - name: sql protocol: TCP port: 1433 targetPort: 51444 - name: listener protocol: TCP port: 51433 targetPort: 51433 - name: dxe protocol: TCP port: 7979 targetPort: 7979確認服務和負載平衡器是否在執行。
kubectl get services輸出看起來類似於以下範例:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE contoso-cluster-lb LoadBalancer 10.1.0.21 172.212.20.29 1433:30484/TCP,51433:30694/TCP,7979:30385/TCP 3m18s contoso-sql-0 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m contoso-sql-0-lb LoadBalancer 10.1.0.210 4.255.19.171 7979:32374/TCP,1433:32444/TCP 79m contoso-sql-1 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m contoso-sql-1-lb LoadBalancer 10.1.0.158 4.255.19.201 7979:30152/TCP,1433:30868/TCP 79m contoso-sql-2 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m contoso-sql-2-lb LoadBalancer 10.1.0.159 4.255.19.218 7979:30566/TCP,1433:31463/TCP 79m kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 87m確認三個 SQL Server Pod 都已經在執行。
kubectl get pods輸出看起來類似於以下範例:
NAME READY STATUS RESTARTS AGE contoso-sql-0 2/2 Running 0 74m contoso-sql-1 2/2 Running 0 74m contoso-sql-2 2/2 Running 0 74m