Partilhar via


Implantar grupos de disponibilidade no Kubernetes com DH2i DxOperator no Serviço Kubernetes do Azure

Aplica-se a:SQL Server em Linux

Este tutorial explica como configurar grupos de disponibilidade Always On (AGs) do SQL Server para contêineres baseados no SQL Server Linux implantados em um cluster do Serviço Kubernetes do Azure (AKS), usando o DH2i DxOperator. Esses procedimentos também são aplicáveis aos clusters do Azure Red Hat OpenShift; a principal distinção é a implantação de um cluster do Azure Red Hat OpenShift, seguida pela substituição de kubectl comandos pelas oc etapas a seguir.

  • A Microsoft oferece suporte a movimentação de dados, Grupos de Disponibilidade e componentes do SQL Server. A DH2i é responsável pelo suporte ao produto DxEnterprise, que inclui gerenciamento de cluster e quórum.

  • O DxOperator é uma extensão de software para o Kubernetes que usa definições de recursos personalizadas para automatizar a implantação de clusters DxEnterprise. Em seguida, o DxEnterprise fornece toda a instrumentação para criar, configurar, gerenciar e fornecer failover automático para cargas de trabalho do SQL Server AG no Kubernetes. Você pode se registrar para obter uma licença de software DxEnterprise gratuita. Para obter mais informações, consulte o Guia de início rápido do DxOperator.

Usando as etapas mencionadas neste artigo, saiba como implantar um StatefulSet e usar o DH2i DxOperator para criar e configurar um AG com três réplicas, hospedado no AKS.

Este tutorial consiste nas seguintes etapas:

  • Criar um objeto configmap no cluster AKS com configurações mssql-conf
  • Instalar o DxOperator
  • Criar objetos secretos
  • Implantar 3 réplicas SQL AG usando o arquivo YAML
  • Conectar-se ao SQL Server

Pré-requisitos

  • Um Serviço Azure Kubernetes (AKS) ou Kubernetes cluster.

  • Uma licença DxEnterprise válida com recursos AG e túneis ativados. Para obter mais informações, consulte a edição para programadores para uso não produtivo ou o software DxEnterprise para cargas de trabalho de produção.

Criar o configmap objeto

  1. No AKS, crie o configmap objeto, que tem configurações mssql-conf com base em suas necessidades. Neste exemplo, você cria o configMap, usando um arquivo chamado mssqlconfig.yaml com os seguintes parâmetros.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Crie o objeto executando o seguinte comando.

    kubectl apply -f ./mssqlconfig.yaml
    

Criar objetos secretos

Crie um segredo para armazenar a senha do sa SQL Server.

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

Atenção

A sua palavra-passe deve seguir a política de palavra-passe padrão do SQL Server . Por padrão, a senha deve ter pelo menos oito caracteres e conter caracteres de três dos quatro conjuntos a seguir: letras maiúsculas, letras minúsculas, dígitos de base 10 e símbolos. As palavras-passe podem ter até 128 caracteres. Use senhas tão longas e complexas quanto possível.

Crie um segredo para armazenar a chave de licença para DH2i. Visite o site da DH2i para obter uma licença de desenvolvedor. Substitua XXXX-XXXX-XXXX-XXXX no exemplo a seguir por sua chave de licença.

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

Instalar o DxOperator

Para instalar o DxOperator, você deve baixar o arquivo DxOperator YAML usando o exemplo a seguir e, em seguida, aplicar o arquivo YAML.

  1. Implante o YAML descrevendo como configurar um AG, usando o comando a seguir. Salve o arquivo com um nome personalizado, como DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. Depois de instalar o operador, você pode implantar contêineres do SQL Server, configurar o grupo de disponibilidade, definir réplicas, implantar e configurar o cluster DxEnterprise. Aqui está um exemplo de arquivo YAML de implantação chamado DxEnterpriseSqlAg.yaml, que você pode alterar para atender às suas necessidades.

    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. Implante o DxEnterpriseSqlAg.yaml arquivo.

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Criar um ouvinte para o grupo de disponibilidade

Aplique o seguinte YAML para adicionar um balanceador de carga, definindo o seletor como valor de metadata.name na etapa anterior. Neste exemplo, é 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

Verifique a implantação e as atribuições do balanceador de carga.

kubectl get pods
kubectl get services

Você deve ver uma saída semelhante ao exemplo a seguir.

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