Condividi tramite


Distribuire gruppi di disponibilità in Kubernetes con DH2i DxOperator in servizio Azure Kubernetes

Si applica a: SQL Server - Linux

Questa esercitazione illustra come configurare un gruppo di disponibilità Always On (AGs) di SQL Server per contenitori di SQL Server basati su Linux distribuiti in un cluster Kubernetes con il servizio Azure Kubernetes (AKS) usando DH2i DxOperator. Queste procedure sono applicabili anche ai cluster Azure Red Hat OpenShift; la distinzione principale è la distribuzione di un cluster Azure Red Hat OpenShift, seguito da comandi sostitutivi kubectl con oc nei passaggi seguenti.

Nota

Microsoft offre supporto per lo spostamento dati, il gruppo di disponibilità e i componenti di SQL Server. DH2i è responsabile del supporto del prodotto DxEnterprise, che include la gestione del cluster e del quorum. DxOperator è un'estensione software per Kubernetes che usa definizioni di risorse personalizzate per automatizzare la distribuzione dei cluster DxEnterprise. DxEnterprise fornisce quindi tutta la strumentazione per creare, configurare, gestire e fornire il failover automatico per i carichi di lavoro del gruppo di disponibilità di SQL Server in Kubernetes.

È possibile registrarsi per ottenere una licenza gratuita del software DxEnterprise. Per ulteriori informazioni, vedere la Guida introduttiva all'uso di DxOperator.

Usando i passaggi descritti in questo articolo, informazioni su come distribuire un oggetto StatefulSet e usare DH2i DxOperator per creare e configurare un gruppo di disponibilità con tre repliche ospitate nel servizio Azure Kubernetes.

L'esercitazione è costituita dai passaggi seguenti:

  • Creare un configmap oggetto nel cluster del servizio Azure Kubernetes con impostazioni mssql-conf
  • Installare DxOperator
  • Creare un oggetto segreto
  • Distribuire un gruppo di disponibilità SQL di replica 3 usando il file YAML
  • Connessione a SQL Server

Prerequisiti

  • Un cluster del servizio Azure Kubernetes o Kubernetes.

  • Una licenza DxEnterprise valida con funzionalità e tunnel del gruppo di disponibilità abilitati. Per altre informazioni, vedere l'edizione per sviluppatori per l'utilizzo non di produzione o il software DxEnterprise per i carichi di lavoro di produzione.

Creare l'oggetto configmap

  1. Nel servizio Azure Kubernetes creare l'oggetto configmap con impostazioni mssql-conf in base alle esigenze. In questo esempio viene creato configMap, usando un file denominato mssqlconfig.yaml con i parametri seguenti.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Creare l’oggetto eseguendo i comandi seguenti.

    kubectl apply -f ./mssqlconfig.yaml
    

Creare oggetti segreti

Creare un segreto per archiviare la sa password per SQL Server.

kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="Password123"

Creare un segreto per archiviare il codice di licenza per DH2i. Visitare il sito Web di DH2i per ottenere una licenza per sviluppatori. Sostituire XXXX-XXXX-XXXX-XXXX nell'esempio seguente con il codice di licenza.

kubectl create secret generic dxe --from-literal=DX_PASSKEY="Password123" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX

Installare DxOperator

Per installare DxOperator, è necessario scaricare il file YAML DxOperator usando l'esempio seguente e quindi applicare il file YAML.

  1. Distribuire YAML che descrive come configurare un gruppo di disponibilità usando il comando seguente. Salvare il file con un nome personalizzato, come DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. Dopo aver installato l'operatore è possibile distribuire i contenitori di SQL Server, configurare il gruppo di disponibilità, definire le repliche, distribuire e configurare il cluster DxEnterprise. Ecco un file YAML di distribuzione di esempio denominato DxEnterpriseSqlAg.yaml, che è possibile modificare in base alle esigenze.

    apiVersion: dh2i.com/v1
    kind: DxEnterpriseSqlAg
    metadata:
      name: contoso-sql
    spec:
      synchronousReplicas: 3
      asynchronousReplicas: 0
      # ConfigurationOnlyReplicas are only allowed with availabilityGroupClusterType set to EXTERNAL
      configurationOnlyReplicas: 0
      availabilityGroupName: AG1
      # Listener port for the availability group (uncomment to apply)
      availabilityGroupListenerPort: 51433
      # For a contained availability group, add the option CONTAINED
      availabilityGroupOptions: null
      # Valid options are EXTERNAL (automatic failover) and NONE (no automatic failover)
      availabilityGroupClusterType: EXTERNAL
      createLoadBalancers: true
      template:
        metadata:
          labels:
            label: example
          annotations:
            annotation: example
        spec:
          dxEnterpriseContainer:
            image: "docker.io/dh2i/dxe:latest"
            imagePullPolicy: Always
            acceptEula: true
            clusterSecret: dxe
            vhostName: VHOST1
            joinExistingCluster: false
            # QoS – guaranteed (uncomment to apply)
            #resources:
              #limits:
                #memory: 1Gi
                #cpu: '1'
            # Configuration options for the required persistent volume claim for DxEnterprise
            volumeClaimConfiguration:
              storageClassName: null
              resources:
                requests:
                  storage: 1Gi
          mssqlServerContainer:
            image: "mcr.microsoft.com/mssql/server:latest"
            imagePullPolicy: Always
            mssqlSecret: mssql
            acceptEula: true
            mssqlPID: Developer
            mssqlConfigMap: mssql-config
            # QoS – guaranteed (uncomment to apply)
            #resources:
              #limits:
                #memory: 2Gi
                #cpu: '2'
            # Configuration options for the required persistent volume claim for SQL Server
            volumeClaimConfiguration:
              storageClassName: null
              resources:
                requests:
                  storage: 2Gi
          # Additional side-car containers, such as mssql-tools (uncomment to apply)
          #containers:
          #- name: mssql-tools
              #image: "mcr.microsoft.com/mssql-tools"
              #command: [ "/bin/sh" ]
              #args: [ "-c", "tail -f /dev/null" ]
    
  3. Distribuire il file DxEnterpriseSqlAg.yaml.

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Creare un listener del gruppo di disponibilità

Applicare il codice YAML seguente per aggiungere un servizio di bilanciamento del carico impostando il selettore sul valore di metadata.name nel passaggio precedente. In questo esempio è contoso-sql.

apiVersion: v1
kind: Service
metadata:
  name: contoso-cluster-lb
spec:
  type: LoadBalancer
  selector:
    dh2i.com/entity: contoso-sql
  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

Verificare le assegnazioni di distribuzione e bilanciamento del carico.

kubectl get pods
kubectl get services

L'output dovrebbe essere simile all'esempio seguente.

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

PS /home/aravind> 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