Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server en Linux
Este tutorial explica cómo configurar los grupos de disponibilidad (AGs) de SQL Server Always On con contenedores basados en Linux en DH2i DxEnterprise para SQL Server desplegados en un clúster Kubernetes de Azure Kubernetes Service, AKS). Puede elegir entre una configuración de Sidecar (preferida) o crear su propia imagen de contenedor personalizada.
Note
Microsoft admite el movimiento de datos, el Grupo de Disponibilidad (AG) y los componentes de SQL Server. DH2i es compatible con el producto DxEnterprise, que incluye gestión de clústeres y quórum.
Aprende a desplegar un StatefulSet y usa DH2i DxEnterprise para crear y configurar un AG. Este tutorial se compone de los siguientes pasos.
- Cree una configuración de un servicio sin encabezado
- Creación de una configuración StatefulSet con SQL Server y DxEnterprise en el mismo pod que un contenedor sidecar
- Creación y configuración de un grupo de disponibilidad de SQL Server, agregando las réplicas secundarias
- Creación de una base de datos en el grupo de disponibilidad y prueba de la conmutación por error
Prerequisites
En este tutorial, se muestra un ejemplo de un grupo de disponibilidad con tres réplicas. Necesitas:
- Un Azure Kubernetes Service (AKS) o clúster de Kubernetes.
- Una licencia de DxEnterprise válida que incluya características de AG y túneles habilitados. Para obtener más información, consulte la edición de desarrollador para uso no productivo o el software DxEnterprise para cargas de trabajo de producción.
Crear el servicio sin periféricos
En un clúster de Kubernetes, los servicios sin encabezado permiten que los pods se conecten entre sí mediante nombres de host.
Para crear el servicio sin interfaz de usuario, crea un archivo YAML llamado
headless_services.yamlcon el siguiente contenido de ejemplo.#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: 14033Ejecute el comando siguiente para aplicar la configuración.
kubectl apply -f headless_services.yaml
Creación del elemento StatefulSet
Cree un archivo YAML de StatefulSet con el siguiente contenido de ejemplo y el nombre
dxemssql.yaml.Esta configuración StatefulSet crea tres réplicas DxEMSSQL que utilizan reclamaciones de volumen persistentes para almacenar sus datos. Cada pod de este elemento StatefulSet consta de dos contenedores: un contenedor de SQL Server y un contenedor de DxEnterprise. Estos contenedores comienzan por separado en una configuración sidecar, pero DxEnterprise gestiona la réplica AG en el contenedor de 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: 1GiCree una credencial para la instancia de SQL Server.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"La contraseña debe seguir la directiva de contraseña predeterminada de SQL Server. De forma predeterminada, la contraseña debe tener al menos ocho caracteres y contener caracteres de tres de los siguientes cuatro conjuntos: mayúsculas, minúsculas, dígitos en base 10 y símbolos. Las contraseñas pueden tener hasta 128 caracteres. Use contraseñas lo más largas y complejas posible.
Aplique la configuración StatefulSet.
kubectl apply -f dxemssql.yamlCompruebe el estado de los pods y continúe con el paso siguiente cuando el estado del pod cambie a
running.kubectl get pods kubectl describe pods
Crear un grupo de disponibilidad y probar la conmutación por error
Para detalles sobre la creación y configuración de AG, añadir réplicas y probar el failover, véase SQL Server Availability Groups en Kubernetes.
Pasos para configurar un escucha de grupo de disponibilidad (opcional)
También puede configurar un escucha de AG con los pasos siguientes.
Asegúrate de haber creado el oyente AG con DxEnterprise siguiendo el paso opcional cerca del final de la documentación de DH2i.
En Kubernetes, si quiere, puede crear direcciones IP estáticas. Una dirección IP estática garantiza que si eliminas y recreas el servicio de escucha, la dirección IP externa asignada a tu servicio de escucha no cambie. Siga los pasos para crear una dirección IP estática en Azure Kubernetes Service (AKS).
Después de crear una dirección IP, asignala y crea el servicio de balanceador de carga con la siguiente muestra 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
Pasos para configurar el redireccionamiento de conexiones de lectura y escritura (opcional)
Después de crear el AG, activa la redirección de la conexión de lectura/escritura del secundario al principal. Para obtener más información, consulte Redireccionamiento de la conexión de lectura/escritura de réplicas de secundaria a principal (grupos de disponibilidad AlwaysOn).
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
Contenido relacionado
- Implementación de grupos de disponibilidad en Kubernetes con DH2i DxOperator en Azure Kubernetes Service
- Inicio rápido: Implementación de un clúster de contenedores de SQL Server en Azure o Red Hat OpenShift
- Implementación de contenedores de SQL Server Linux en Kubernetes con StatefulSets
- Tutorial: Configuración de la autenticación de Active Directory con SQL Server en contenedores de Linux