Distribuera tillgänglighetsgrupper med DH2i DxEnterprise på Kubernetes
gäller för:SQL Server – Linux
I den här självstudien beskrivs hur du konfigurerar SQL Server AlwaysOn-tillgänglighetsgrupper (AG:er) för SQL Server Linux-baserade containrar som distribuerats till ett Azure Kubernetes Service(AKS) Kubernetes-kluster med hjälp av DH2i DxEnterprise. Du kan välja mellan en sidovagnskonfiguration (rekommenderas) eller skapa en egen anpassad containeravbildning.
Not
Microsoft har stöd för dataförflyttning, tillgänglighetsgrupp (AG), och SQL Server-komponenter. DH2i ansvarar för support av DxEnterprise-produkten, som omfattar kluster- och kvorumhantering.
Med hjälp av stegen i den här artikeln lär du dig hur du distribuerar en StatefulSet och använder DH2i DxEnterprise-lösningen för att skapa och konfigurera en Availability Group (AG). Den här självstudien består av följande steg.
- Skapa en huvudlös tjänstkonfiguration
- Skapa en StatefulSet-konfiguration med SQL Server och DxEnterprise i samma pod som en sidecar-container
- Skapa och konfigurera en SQL Server AG och lägg till de sekundära replikerna
- Skapa en databas i tillgänglighetsgruppen och testa redundans
Förutsättningar
Den här handledningen visar ett exempel på en AG med tre repliker. Du behöver:
- Ett Azure Kubernetes Service-kluster (AKS) eller Kubernetes-kluster.
- En giltig DxEnterprise-licens med AG-funktioner och tunnlar aktiverade. Mer information finns i developer edition för användning utan produktion eller DxEnterprise-programvara för produktionsarbetsbelastningar.
Skapa den huvudlösa tjänsten
I ett Kubernetes-kluster tillåter huvudlösa tjänster dina poddar att ansluta till varandra med hjälp av värdnamn.
Skapa den huvudlösa tjänsten genom att skapa en YAML-fil med namnet
headless_services.yaml
med följande exempelinnehåll.#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
Kör följande kommando för att tillämpa konfigurationen.
kubectl apply -f headless_services.yaml
Skapa StatefulSet
Skapa en StatefulSet YAML-fil med följande exempelinnehåll och ge den namnet
dxemssql.yaml
.Den här StatefulSet-konfigurationen skapar tre DxEMSSQL-repliker som använder beständiga volymanspråk för att lagra sina data. Varje podd i den här StatefulSet består av två containrar: en SQL Server-container och en DxEnterprise-container. Dessa containrar startas separat från varandra i en "sidovagnskonfiguration", men DxEnterprise hanterar AG-repliken i SQL Server-containern.
#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
Skapa en autentiseringsuppgift för SQL Server-instansen.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Lösenordet bör följa SQL Server-standardprincipen för lösenord. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
Använd konfigurationen StatefulSet.
kubectl apply -f dxemssql.yaml
Kontrollera statusen för poddarna och fortsätt till nästa steg när poddens status blir
running
.kubectl get pods kubectl describe pods
Skapa tillgänglighetsgrupp och testa redundans
Mer information om hur du skapar och konfigurerar tillgänglighetsgruppen, lägger till repliker och testar redundans finns i SQL Server-tillgänglighetsgrupper i Kubernetes.
Steg för att konfigurera tillgänglighetsgrupplyssnare (valfritt)
Du kan också konfigurera en AG-lyssnare med följande steg.
Se till att du har skapat AG-lyssnaren med DxEnterprise enligt beskrivningen i det valfria steget nära slutet av DH2i-dokumentationen.
I Kubernetes kan du valfritt skapa statiska IP-adresser. När du skapar en statisk IP-adress ser du till att den externa IP-adressen som tilldelats lyssnartjänsten inte ändras om lyssnartjänsten tas bort och återskapas. Följ stegen för att skapa en statisk IP-adress i Azure Kubernetes Service (AKS).
När du har skapat en IP-adress tilldelar du den IP-adressen och skapar lastbalanserarens tjänst, enligt följande YAML-exempel.
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
Steg för att konfigurera omdirigering av läs-/skrivanslutning (valfritt)
För att aktivera omdirigering av läs-/skrivanslutning från den sekundära till den primära AG:n, följ dessa steg när du har skapat den. Mer information finns i omdirigering av läs-/skrivanslutning för sekundär till primär replik (Always On-tillgänglighetsgrupper).
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
Relaterat innehåll
- Distribuera tillgänglighetsgrupper på Kubernetes med DH2i DxOperator på Azure Kubernetes Service
- Distribuera SQL Server-containrar i Azure Kubernetes Service
- Distribuera SQL Server Linux-containrar på Kubernetes med StatefulSets
- Självstudie: Konfigurera Active Directory-autentisering med SQL Server på Linux-containrar