适用于:Linux 上的 SQL Server
本教程介绍如何使用 DH2i DxOperator,为部署到 Azure Kubernetes 服务(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 服务 (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 默认密码策略。 默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 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