Sdílet prostřednictvím


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

platí pro:SQL Server – Linux

Tento kurz vysvětluje, jak nakonfigurovat skupiny dostupnosti AlwaysOn (AG) SQL Serveru pro kontejnery založené na SQL Serveru s Linuxem nasazené do clusteru Kubernetes Service (AKS) Azure Kubernetes pomocí DH2i DxEnterprise. Můžete si vybrat mezi konfigurací sidecar (upřednostňovanou) nebo vytvořit vlastní image kontejneru.

Poznámka:

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.

Pomocí kroků uvedených v tomto článku se dozvíte, jak nasadit StatefulSet a použít řešení 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í

Požadavky

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ů.

    Pokud chcete vytvořit bezobslužnou službu, vytvořte soubor YAML s názvem headless_services.yamls 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 vytvoří tři repliky DxEMSSQL, které k ukládání dat využívají trvalé požadavky na svazek. Každý pod v této statefulSet obsahuje dva kontejnery: kontejner SQL Serveru a kontejner DxEnterprise. Tyto kontejnery se spouští odděleně v konfiguraci sidecar, ale DxEnterprise spravuje AG repliku v kontejneru SQL Serveru.

    #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 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á.

  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 skupiny dostupnosti, přidávání replik a testování převzetí služeb při selhání najdete v části Skupiny dostupnosti SQL Serveru 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 poslech pomocí DxEnterprise, jak je popsáno v optionalním kroku poblíž konce dokumentace DH2i.

  2. V Kubernetes můžete volitelně vytvořit statické IP adresy. Při vytváření statické IP adresy se ujistěte, že pokud je služba naslouchacího procesu odstraněná a znovu vytvořena, externí IP adresa přiřazená vaší službě naslouchacího procesu 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 přiřadíte tuto IP adresu a vytvoříte službu nástroje pro vyrovnávání zatížení, jak je znázorněno v následující ukázce YAML.

    apiVersion: v1
    kind: Service
    metadata:
      name: agslistener
    spec:
      type: LoadBalancer
      loadBalancerIP: 52.140.117.62
      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í skupiny dostupnosti (AG) můžete povolit přesměrování připojení pro čtení/zápis ze sekundárního na primární server podle následujících kroků. Další informace najdete v tématu Sekundární na přesměrování připojení ke čtení a zápisu primární repliky (skupiny dostupnosti AlwaysOn).

USE [master];
GO

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

USE [master];
GO

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

USE [master];
GO

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

USE [master];
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

USE [master];
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

USE [master];
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