Sdílet prostřednictvím


Nasazení skupin dostupnosti v Kubernetes pomocí DH2i DxOperatoru ve službě Azure Kubernetes Service

platí pro:SQL Server – Linux

Tento kurz vysvětluje, jak nakonfigurovat skupiny dostupnosti AlwaysOn (AG) SQL Serveru pro kontejnery založené na SQL Serveru nasazené do clusteru Azure Kubernetes Service (AKS) pomocí DH2i DxOperatoru. Tyto postupy platí také pro clustery Azure Red Hat OpenShift; Primárním rozdílem je nasazení clusteru Azure Red Hat OpenShift následované nahrazením kubectloc příkazů v následujících krocích.

  • Microsoft podporuje přesun dat, skupiny dostupnosti (AG) a komponenty SQL Serveru. DH2i zodpovídá za podporu produktu DxEnterprise, který zahrnuje správu clusteru a kvoru.

  • DxOperator je softwarové rozšíření Kubernetes, které používá vlastní definice prostředků k automatizaci nasazení clusterů DxEnterprise. DxEnterprise pak poskytuje veškerou instrumentaci pro vytváření, konfiguraci, správu a zajištění automatického převzetí služeb při selhání pro úlohy dostupnostních skupin SQL Serveru v Kubernetes. Můžete si zaregistrovat bezplatnou softwarovou licenci DxEnterprise. Další informace najdete v úvodní příručce k DxOperatoru.

Pomocí kroků uvedených v tomto článku se dozvíte, jak nasadit StatefulSet a pomocí DH2i DxOperatoru vytvořit a nakonfigurovat Availability Group se třemi replikami hostovaný na AKS.

Tento kurz se skládá z následujících kroků:

  • Vytvoření objektu configmap v clusteru AKS s nastavením mssql-conf
  • Instalace DxOperatoru
  • Vytvoření tajných objektů
  • Nasazení 3 replika SQL AG pomocí souboru YAML
  • Připojení k SQL Serveru

Požadavky

  • Cluster Azure Kubernetes Service (AKS) nebo Kubernetes.

  • Platná licence DxEnterprise s povolenými funkcemi AG a tunnelovými funkcemi. Další informace najdete v edici developer pro neprodukční využití nebo software DxEnterprise pro produkční úlohy.

Vytvoření objektu configmap

  1. V AKS vytvořte configmap objekt, který má nastavení mssql-conf na základě vašich požadavků. V tomto příkladu vytvoříte soubor configMaps názvem mssqlconfig.yaml s následujícími parametry.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: mssql-config
    data:
      mssql.conf: |
        [EULA]
        accepteula = Y
    
        [sqlagent]
        enabled = true
    
  2. Vytvořte objekt spuštěním následujícího příkazu.

    kubectl apply -f ./mssqlconfig.yaml
    

Vytváření tajných objektů

Vytvořte tajný kód pro uložení sa hesla pro SQL Server.

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

Upozornění

Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

Vytvořte tajný kód pro uložení licenčního klíče pro DH2i. Navštivte web DH2i a získejte vývojářskou licenci. Nahraďte XXXX-XXXX-XXXX-XXXX v následujícím příkladu vaším licenčním klíčem.

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

Instalace DxOperatoru

Pokud chcete nainstalovat DxOperator, musíte stáhnout soubor DXOperator YAML pomocí následujícího příkladu a pak použít soubor YAML.

  1. Pomocí následujícího příkazu nasaďte YAML popisující, jak nastavit AG. Uložte soubor s vlastním názvem, například DxOperator.yaml.

    curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml
    kubectl apply –f DxOperator.yaml
    
  2. Po instalaci operátora můžete nasadit kontejnery SQL Serveru, nakonfigurovat skupinu dostupnosti, definovat repliky, nasadit a nakonfigurovat cluster DxEnterprise. Tady je ukázkový soubor YAML nasazení, který se nazývá DxEnterpriseSqlAg.yaml, který můžete změnit tak, aby vyhovoval vašim požadavkům.

    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. DxEnterpriseSqlAg.yaml Nasaďte soubor.

    kubectl apply -f DxEnterpriseSqlAg.yaml
    

Vytvořte posluchače skupiny dostupnosti

Pomocí následujícího YAML přidejte nástroj pro vyrovnávání zatížení nastavením selektoru na hodnotu metadata.name v předchozím kroku. V tomto příkladu je to 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

Ověřte přiřazení produkčního nasazení a vyrovnávače zatížení.

kubectl get pods
kubectl get services

Měl by se zobrazit výstup podobný následujícímu příkladu.

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