Nasazení skupin dostupnosti s využitím DH2i DxEnterprise v Kubernetes

Platí pro:SQL Server na Linuxu

Tento návod vysvětluje, jak konfigurovat skupiny dostupnosti (AGs) pro SQL Server Always On s DH2i DxEnterprise for SQL Server linuxovými kontejnery nasazenými na Azure Kubernetes Service (AKS) Kubernetes cluster. Můžete si vybrat mezi konfigurací sidecar (upřednostňovanou) nebo vytvořit vlastní image kontejneru.

Note

Microsoft podporuje přesun dat, skupiny dostupnosti (AG) a komponenty SQL Serveru. DH2i podporuje produkt DxEnterprise, který zahrnuje správu clusteru a kvóra.

Naučte se, jak nasadit StatefulSet a použít DH2i DxEnterprise k vytvoření a konfiguraci AG. Tento kurz se skládá z následujících kroků.

  • Vytvoření bezobslužné konfigurace služby
  • Vytvořte konfiguraci StatefulSet s SQL Serverem a DxEnterprise ve stejném podu jako sidecar kontejner.
  • Vytvořte a nakonfigurujte skupinu dostupnosti SQL Serveru a přidejte sekundární repliky.
  • Vytvořte databázi ve skupině dostupnosti a otestujte převzetí služeb při selhání

Předpoklady

Tento tutoriál ukazuje příklad AG s třemi replikami. Potřebujete:

  • 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řte bezobslužnou službu

  1. V clusteru Kubernetes umožňují bezobslužné služby, aby se vaše pody připojily k sobě pomocí názvů hostitelů.

    Pro vytvoření headless služby vytvořte YAML soubor s headless_services.yaml následujícím ukázkovým obsahem.

    #Headless services for local connections/resolution
    apiVersion: v1
    kind: Service
    metadata:
      name: dxemssql-0
    spec:
      clusterIP: None
      selector:
        statefulset.kubernetes.io/pod-name: dxemssql-0
      ports:
        - name: dxl
          protocol: TCP
          port: 7979
        - name: dxc-tcp
          protocol: TCP
          port: 7980
        - name: dxc-udp
          protocol: UDP
          port: 7981
        - name: sql
          protocol: TCP
          port: 1433
        - name: listener
          protocol: TCP
          port: 14033
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: dxemssql-1
    spec:
      clusterIP: None
      selector:
        statefulset.kubernetes.io/pod-name: dxemssql-1
      ports:
        - name: dxl
          protocol: TCP
          port: 7979
        - name: dxc-tcp
          protocol: TCP
          port: 7980
        - name: dxc-udp
          protocol: UDP
          port: 7981
        - name: sql
          protocol: TCP
          port: 1433
        - name: listener
          protocol: TCP
          port: 14033
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: dxemssql-2
    spec:
      clusterIP: None
      selector:
        statefulset.kubernetes.io/pod-name: dxemssql-2
      ports:
        - name: dxl
          protocol: TCP
          port: 7979
        - name: dxc-tcp
          protocol: TCP
          port: 7980
        - name: dxc-udp
          protocol: UDP
          port: 7981
        - name: sql
          protocol: TCP
          port: 1433
        - name: listener
          protocol: TCP
          port: 14033
    
  2. Pomocí následujícího příkazu aplikujte konfiguraci.

    kubectl apply -f headless_services.yaml
    

Vytvoření stavové sady

  1. Vytvořte soubor YAML StatefulSet s následujícím ukázkovým obsahem a pojmenujte ho dxemssql.yaml.

    Tato konfigurace StatefulSet vytváří tři repliky DxEMSSQL, které používají nároky na trvalé svazky k ukládání svých dat. Každý pod v této statefulSet obsahuje dva kontejnery: kontejner SQL Serveru a kontejner DxEnterprise. Tyto kontejnery začínají samostatně v konfiguraci sidecar, ale DxEnterprise spravuje AG repliku v kontejneru SQL Server.

    #DxEnterprise + MSSQL StatefulSet
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: dxemssql
    spec:
      serviceName: "dxemssql"
      replicas: 3
      selector:
        matchLabels:
          app: dxemssql
      template:
        metadata:
          labels:
            app: dxemssql
        spec:
          securityContext:
            fsGroup: 10001
          containers:
            - name: sql
              image: mcr.microsoft.com/mssql/server:2022-latest
              env:
                - name: ACCEPT_EULA
                  value: "Y"
                - name: MSSQL_ENABLE_HADR
                  value: "1"
                - name: MSSQL_SA_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mssql
                      key: MSSQL_SA_PASSWORD
              volumeMounts:
                - name: mssql
                  mountPath: "/var/opt/mssql"
            - name: dxe
              image: docker.io/dh2i/dxe
              env:
                - name: MSSQL_SA_PASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: mssql
                      key: MSSQL_SA_PASSWORD
              volumeMounts:
                - name: dxe
                  mountPath: "/etc/dh2i"
      volumeClaimTemplates:
        - metadata:
            name: dxe
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 1Gi
        - metadata:
            name: mssql
          spec:
            accessModes:
              - ReadWriteOnce
            resources:
              requests:
                storage: 1Gi
    
  2. Vytvořte přihlašovací údaje pro instanci SQL Serveru.

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

    Vaše heslo by mělo splňovat výchozí zásady hesla pro SQL Server. 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á.

  3. Použijte konfiguraci StatefulSet.

    kubectl apply -f dxemssql.yaml
    
  4. Ověřte stav podů a přejděte k dalšímu kroku, jakmile se stav podu stane running.

    kubectl get pods
    kubectl describe pods
    

Vytvoření skupiny dostupnosti a test selhání a přepnutí služby

Podrobnosti o vytváření a konfiguraci AG, přidávání replik a testování failoveru najdete v sekci SQL Server Availability Groups v Kubernetes.

Postup konfigurace posluchače skupiny dostupnosti (volitelné)

Pomocí následujícího postupu můžete také nakonfigurovat naslouchací proces AG (skupiny dostupnosti).

  1. Ujistěte se, že jste vytvořili AG posluchač pomocí DxEnterprise podle volitelného kroku na konci dokumentace DH2i.

  2. V Kubernetes můžete volitelně vytvořit statické IP adresy. Statická IP adresa zajišťuje, že pokud smažete a znovu vytvoříte službu posluchače, externí IP adresa přiřazená vaší službě se nezmění. Postupujte podle pokynů k vytvoření statické IP adresy ve službě Azure Kubernetes Service (AKS).

  3. Po vytvoření IP adresy ji přiřaďte a vytvořte službu load balancer s následujícím vzorkem YAML.

    apiVersion: v1
    kind: Service
    metadata:
      name: agslistener
    spec:
      type: LoadBalancer
      loadBalancerIP: <static-IP-address>
      selector:
        app: mssql
      ports:
      - protocol: TCP
        port: 44444
        targetPort: 44444
    

Postup konfigurace přesměrování připojení pro čtení a zápis (volitelné)

Po vytvoření AG povolte přesměrování spojení pro čtení/zápis ze sekundárního na primární. Další informace najdete v tématu Přesměrování připojení pro čtení a zápis ze sekundární na primární repliku (skupiny dostupnosti Always On).

USE master;
GO

ALTER AVAILABILITY GROUP [AGS1]
MODIFY REPLICA ON N'<name of the primary replica>'
WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL));
GO

ALTER AVAILABILITY GROUP [AGS1]
MODIFY REPLICA ON N'<name of the secondary-0 replica>'
WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL));
GO

ALTER AVAILABILITY GROUP [AGS1]
MODIFY REPLICA ON N'<name of the secondary-1 replica>'
WITH (SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL));
GO

ALTER AVAILABILITY GROUP [AGS1]
MODIFY REPLICA ON N'<name of the primary replica>'
WITH (PRIMARY_ROLE(
    READ_WRITE_ROUTING_URL = 'TCP://<External IP address of primary -0>:1433'
));
GO

ALTER AVAILABILITY GROUP [AGS1]
MODIFY REPLICA ON N'<name of the secondary-0 replica>'
WITH (PRIMARY_ROLE(
    READ_WRITE_ROUTING_URL = 'TCP://<External IP address of secondary -0>:1433'
));
GO

ALTER AVAILABILITY GROUP [AGS1]
MODIFY REPLICA ON N'<name of the secondary-1 replica>'
WITH (PRIMARY_ROLE(
    READ_WRITE_ROUTING_URL = 'TCP://<External IP address of secondary -1>:1433'
));
GO