Distribuera tillgänglighetsgrupper på Kubernetes med DH2i DxOperator i Azure Kubernetes Service

Gäller för:SQL Server i Linux

I den här självstudien beskrivs hur du konfigurerar SQL Server AlwaysOn-tillgänglighetsgrupper (AGs) för SQL Server Linux-baserade containrar som distribuerats till ett AKS-kluster (Azure Kubernetes Service) med hjälp av DH2i DxOperator. Dessa procedurer gäller även för Azure Red Hat OpenShift-kluster. Den främsta skillnaden är driftsättningen av ett Azure Red Hat OpenShift-kluster, följt av att kommandon med kubectl ersätts med oc i följande steg.

Genom att använda stegen i denna artikel lär du dig hur man distribuerar en StatefulSet och använder DH2i DxOperator för att skapa och konfigurera en AG med tre repliker, hostade på AKS.

Den här självstudien består av följande steg:

  • Skapa ett configmap objekt i AKS-kluster med mssql-conf-inställningar
  • Installera DxOperator
  • Skapa hemliga objekt
  • Distribuera en SQL Server-tillgänglighetsgrupp med tre repliker med hjälp av en YAML-fil
  • Ansluta till SQL Server

Förutsättningar

  • Ett Azure Kubernetes Service-kluster (AKS) eller Kubernetes-kluster.

  • En giltig DxEnterprise-licens med AG-funktioner och tunnlar aktiverade. Mer information finns i developer edition för användning utan produktion eller DxEnterprise-programvara för produktionsarbetsbelastningar.

Skapa objektet configmap

  1. I AKS skapar du configmap objektet, som har mssql-conf-inställningar baserat på dina krav. I det här exemplet skapar du configmap med hjälp av en fil med namnet mssqlconfig.yaml och följande parametrar.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Skapa objektet genom att köra följande kommando.

    kubectl apply -f ./mssqlconfig.yaml
    

Skapa hemliga objekt

Skapa en hemlighet för att lagra sa lösenordet för SQL Server.

kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"

Caution

Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.

Skapa en hemlighet för att lagra licensnyckeln för DH2i. Besök DH2is webbplats för att få en utvecklarlicens. Ersätt XXXX-XXXX-XXXX-XXXX i följande exempel med din licensnyckel.

kubectl create secret generic dxe --from-literal=DX_PASSKEY="<password>" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX

Installera DxOperator

För att installera DxOperator, ladda ner DxOperator YAML-filen med följande exempel och applicera sedan YAML-filen.

  1. Distribuera YAML-filen som beskriver hur man sätter upp en AG genom att använda följande kommando. Spara filen med ett anpassat namn, till exempel DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxsqlag/files/v2.yaml -o DxOperator.yaml
    kubectl apply -f DxOperator.yaml
    
  2. Efter att du installerat operatören kan du distribuera SQL Server-containrar, konfigurera tillgänglighetsgruppen, definiera repliker och distribuera samt konfigurera DxEnterprise-klustret. Ändra följande exempelfil för distribution (YAML), DxSqlAg.yaml, för att passa dina behov.

    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" ]
    
  3. Distribuera DxSqlAg.yaml filen.

    kubectl apply -f DxSqlAg.yaml
    

Skapa en tillgänglighetsgrupplyssnare

  1. Uppdatera availabilityGroupListenerPort värdet i din DxSqlAg.yaml fil:

    spec:
      sqlAgConfiguration:
        availabilityGroupListenerPort: 51433
    
  2. Använd filen:

    kubectl apply -f DxSqlAg.yaml
    
  3. Använd följande YAML för att lägga till en lastbalanserare för lyssnaren.

    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
    
  4. Kontrollera att tjänsterna och lastbalanserarna är igång.

    kubectl get services
    

    Utdata ser ut ungefär som i följande exempel:

    NAME                     TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)                                         AGE
    contoso-cluster-lb       LoadBalancer   10.1.0.21    172.212.20.29   1433:30484/TCP,14033: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
    
  5. Verifiera att alla tre SQL Server-poddar körs.

    kubectl get pods
    

    Utdata ser ut ungefär som i följande exempel:

    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