Beschikbaarheidsgroepen implementeren met DH2i DxEnterprise in Kubernetes
van toepassing op:SQL Server- - Linux
In deze zelfstudie wordt uitgelegd hoe u SQL Server AlwaysOn-beschikbaarheidsgroepen (AG's) configureert voor sql Server Linux-containers die zijn geïmplementeerd in een Kubernetes-cluster (Azure Kubernetes Service) met behulp van DH2i DxEnterprise. U kunt kiezen tussen een sidecar configuration (voorkeur), of uw eigen aangepaste containerafbeelding maken.
Notitie
Microsoft biedt ondersteuning voor gegevensverplaatsing, AG en SQL Server-onderdelen. DH2i is verantwoordelijk voor ondersteuning van het DxEnterprise-product, dat cluster- en quorumbeheer omvat.
Met behulp van de stappen in dit artikel leert u hoe u een StatefulSet implementeert en de DH2i DxEnterprise-oplossing gebruikt om een AG te maken en configureren. Deze zelfstudie bestaat uit de volgende stappen.
- Een headless serviceconfiguratie maken
- Een StatefulSet-configuratie maken met SQL Server en DxEnterprise in dezelfde pod als een sidecar-container
- Een beschikbaarheidsgroep van SQL Server maken en configureren en secundaire replica's toevoegen
- Een database maken in de beschikbaarheidsgroep en failover testen
Voorwaarden
In deze zelfstudie ziet u een voorbeeld van een AG met drie replica's. U hebt het volgende nodig:
- Een Azure Kubernetes Service (AKS) of Kubernetes-cluster.
- Een geldige DxEnterprise-licentie waarvoor AG-functies en tunnels zijn ingeschakeld. Zie de developer edition voor niet-productiegebruik of DxEnterprise-software voor productieworkloads voor meer informatie.
De headless service maken
In een Kubernetes-cluster kunnen headless services uw pods met elkaar verbinden met behulp van hostnamen.
Als u de headless service wilt maken, maakt u een YAML-bestand met de naam
headless_services.yaml
, met de volgende voorbeeldinhoud.#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
Voer de volgende opdracht uit om de configuratie toe te passen.
kubectl apply -f headless_services.yaml
Maak de StatefulSet aan
Maak een StatefulSet YAML-bestand met de volgende voorbeeldinhoud en geef het
dxemssql.yaml
een naam.Met deze StatefulSet-configuratie worden drie DxEMSSQL-replica's gemaakt die gebruikmaken van permanente volumeclaims om hun gegevens op te slaan. Elke pod in deze StatefulSet bestaat uit twee containers: een SQL Server-container en een DxEnterprise-container. Deze containers worden afzonderlijk van elkaar gestart in een sidecar-configuratie, maar DxEnterprise beheert de AG-replica in de SQL Server-container.
#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
Maak een referentie voor het SQL Server-exemplaar.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Uw wachtwoord moet voldoen aan het standaardbeleid voor SQL Server wachtwoordbeleid. Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
Pas de configuratie van de StatefulSet toe.
kubectl apply -f dxemssql.yaml
Controleer de status van de pods en ga verder met de volgende stap wanneer de status van de pod
running
wordt.kubectl get pods kubectl describe pods
Beschikbaarheidsgroep maken en failover testen
Raadpleeg SQL Server-beschikbaarheidsgroepen in Kubernetesvoor meer informatie over het maken en configureren van ag's, het toevoegen van replica's en het testen van failovers.
Stappen voor het configureren van listener voor beschikbaarheidsgroepen (optioneel)
U kunt ook een AG-listener configureren met de volgende stappen.
Zorg ervoor dat u de AG-listener hebt gemaakt met DxEnterprise, zoals beschreven in de optionele stap aan het einde van de DH2i-documentatie.
In Kubernetes kunt u desgewenst statische IP-adressen maken. Wanneer u een statisch IP-adres maakt, zorgt u ervoor dat als de listenerservice wordt verwijderd en opnieuw wordt gemaakt, het externe IP-adres dat aan uw listenerservice is toegewezen, niet verandert. Volg de stappen om een statisch IP-adres te maken in Azure Kubernetes Service (AKS).
Nadat u een IP-adres hebt gemaakt, wijst u dat IP-adres toe en maakt u de load balancer-service, zoals wordt weergegeven in het volgende YAML-voorbeeld.
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
Stappen voor het configureren van omleiding van lees-/schrijfverbindingen (optioneel)
Nadat u de beschikbaarheidsgroep hebt gemaakt, kunt u de lezen/schrijven omleiding van de verbinding van de secundaire naar de primaire server inschakelen door de volgende stappen te volgen. Zie secundaire naar primaire replica omleiding van lees-/schrijfverbindingen (AlwaysOn-beschikbaarheidsgroepen)voor meer informatie.
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
Verwante inhoud
- Beschikbaarheidsgroepen implementeren in Kubernetes met DH2i DxOperator in Azure Kubernetes Service
- SQL Server-containers implementeren in Azure Kubernetes Service
- SQL Server Linux-containers implementeren in Kubernetes met StatefulSets
- Zelfstudie: Active Directory-verificatie configureren met SQL Server op Linux-containers