Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server в Linux
В этом руководстве объясняется, как настроить группы доступности Always On для контейнеров SQL Server Linux, развернутых в кластере Kubernetes в службе Azure Kubernetes (AKS), с помощью DH2i DxEnterprise. Можно выбрать конфигурацию sidecar (предпочтительную) или создать собственный пользовательский образ контейнера.
Примечание.
Корпорация Майкрософт поддерживает компоненты перемещения данных, группы доступности и SQL Server. DH2i отвечает за поддержку продукта DxEnterprise, который включает в себя управление кластером и кворумом.
Выполнив действия, описанные в этой статье, узнайте, как развернуть StatefulSet и использовать решение DH2i DxEnterprise для создания и настройки группы доступности. Это руководство состоит из следующих шагов.
- Создайте конфигурацию headless-сервиса
- Создание конфигурации StatefulSet с SQL Server и DxEnterprise в том же pod, что и контейнер-сайдкар.
- Создайте и настройте группу доступности (AG) SQL Server, добавив вторичные реплики.
- Создайте базу данных в группе доступности и протестируйте отказоустойчивость
Предварительные условия
В этом руководстве показан пример группы доступности (AG) с тремя репликами. Вам нужно:
- Служба Azure Kubernetes (AKS) или кластер Kubernetes.
- Действительная лицензия DxEnterprise с включенными функциями AG и туннелями. Дополнительные сведения см. в версии разработчика для непроизводственного использования или программного обеспечения DxEnterprise для рабочих нагрузок.
Создание службы без головы
В кластере Kubernetes службы без головы позволяют модулям pod подключаться друг к другу с помощью имен узлов.
Чтобы создать службу без интерфейса, создайте YAML-файл под названием
headless_services.yamlсо следующим примером содержимого.#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Выполните следующую команду, чтобы применить конфигурацию.
kubectl apply -f headless_services.yaml
Создайте StatefulSet
Создайте YAML-файл StatefulSet со следующим примером содержимого и присвойте ему
dxemssql.yamlимя.Эта конфигурация StatefulSet создает три реплики DxEMSSQL, которые используют запросы на постоянный том для хранения своих данных. Каждый модуль в этом StatefulSet включает два контейнера: контейнер SQL Server и контейнер DxEnterprise. Эти контейнеры запускаются отдельно друг от друга в конфигурации "побочного контейнера", но DxEnterprise управляет репликой группы доступности (AG) в контейнере 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Создайте учетные данные для экземпляра SQL Server.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Примените конфигурацию StatefulSet.
kubectl apply -f dxemssql.yamlПроверьте состояние модулей и перейдите к следующему шагу, когда их состояние станет
running.kubectl get pods kubectl describe pods
Создание группы доступности и тестирование отказоустойчивости
Дополнительные сведения о создании и настройке группы доступности, добавлении реплик и тестировании отработки отказа см. в разделе Доступность групп SQL Server в Kubernetes.
Действия по настройке прослушивателя группы доступности (необязательно)
Вы также можете настроить прослушиватель группы доступности, выполнив следующие действия.
Убедитесь, что вы создали прослушиватель AG с помощью DxEnterprise, как описано в необязательном шаге ближе к концу документации DH2i.
В Kubernetes можно при необходимости создавать статические IP-адреса. При создании статического IP-адреса убедитесь, что при удалении и повторном создании службы прослушивателя внешний IP-адрес, назначенный службе прослушивателя, не изменяется. Выполните действия, чтобы создать статический IP-адрес в Службе Azure Kubernetes (AKS).
После создания IP-адреса назначьте этот IP-адрес и создадите службу подсистемы балансировки нагрузки, как показано в следующем примере 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
Действия по настройке перенаправления подключений для чтения и записи (необязательно)
После создания группы доступности вы можете включить перенаправление подключения для чтения и записи с вторичного сервера на основной, выполнив следующие действия. Дополнительные сведения см. в статье Перенаправление подключения записи/чтения с вторичной реплики на первичную (группы доступности Always On).
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
Связанный контент
- Развертывание групп доступности в Kubernetes с помощью DH2i DxOperator в Azure Kubernetes Service
- Развертывание контейнеров SQL Server в Службе Azure Kubernetes
- Развертывание контейнеров SQL Server Linux в Kubernetes с помощью StatefulSets
- Руководство по настройке проверки подлинности Active Directory с помощью контейнеров SQL Server на Linux