Kubernetes에서 DH2i DxEnterprise를 사용하여 가용성 그룹 배포
적용 대상: SQL Server - Linux
이 자습서에서는 DH2i DxEnterprise를 사용하여 Azure Kubernetes Service(AKS) Kubernetes 클러스터에 배포된 SQL Server Linux 기반 컨테이너의 SQL Server Always On 가용성 그룹(AG)을 구성하는 방법을 설명합니다. 사이드카 구성(기본 설정) 중에서 선택하거나 자체 사용자 지정 컨테이너 이미지를 만들 수 있습니다.
참고 항목
Microsoft는 데이터 이동, AG 및 SQL Server 구성 요소를 지원합니다. DH2i는 DxEnterprise 제품 지원을 담당하며, 여기에는 클러스터 및 쿼럼 관리가 포함됩니다.
이 문서에서 설명되는 단계를 사용하여 StatefulSet을 배포하고 DH2i DxEnterprise 솔루션을 사용하여 AG를 생성 및 구성하는 방법을 알아봅니다. 이 자습서는 다음 단계로 구성됩니다.
- 헤드리스 서비스 구성 만들기
- 사이드카 컨테이너와 동일한 Pod에서 SQL Server 및 DxEnterprise를 사용하여 StatefulSet 구성 만들기
- SQL Server AG 만들기 및 구성, 보조 복제본(replica) 추가
- AG에서 데이터베이스 만들기 및 장애 조치(failover) 테스트
필수 조건
이 자습서에서는 3개의 복제본(replica)이 있는 AG의 예를 보여줍니다. 필요 항목:
- Azure Kubernetes Service(AKS) 또는 Kubernetes 클러스터.
- AG 기능 및 터널이 활성화된 유효한 DxEnterprise 라이선스입니다. 자세한 내용은 비프로덕션 용도의 경우 개발자 버전을 참조하고 프로덕션 워크로드의 경우 DxEnterprise 소프트웨어를 참조하세요.
헤드리스 서비스 만들기
Kubernetes 클러스터에서 헤드리스 서비스를 사용하면 Pod가 호스트 이름을 사용하여 서로 연결할 수 있습니다.
헤드리스 서비스를 만들려면 다음 샘플 콘텐츠가 포함된
headless_services.yaml
이라는 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 만들기
다음 샘플 콘텐츠로 StatefulSet YAML 파일을 생성하고 이름을
dxemssql.yaml
로 지정합니다.이 StatefulSet 구성은 영구 볼륨 클레임을 활용하여 데이터를 저장하는 3개의 DxEMSSQL 복제본(replica)을 생성합니다. 이 StatefulSet의 각 Pod는 2개의 컨테이너, 즉 SQL Server 컨테이너와 DxEnterprise 컨테이너로 구성됩니다. 이러한 컨테이너는 "사이드카" 구성에서 서로 별도로 시작되지만, DxEnterprise는 SQL Server 컨테이너에서 AG 복제본(replica)을 관리합니다.
#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 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.
StatefulSet 구성을 적용합니다.
kubectl apply -f dxemssql.yaml
Pod의 상태를 확인하고 Pod의 상태가
running
이 되면 다음 단계로 진행합니다.kubectl get pods kubectl describe pods
가용성 그룹 만들기 및 장애 조치(failover) 테스트
AG 만들기 및 구성, 복제본 추가, 장애 조치(failover) 테스트에 대한 세부 정보는 Kubernetes의 SQL Server 가용성 그룹을 참조하세요.
가용성 그룹 수신기 구성 단계(선택 사항)
다음 단계를 사용하여 AG 수신기를 구성할 수도 있습니다.
DH2i 설명서의 마지막에 있는 선택 사항 단계에 설명된 대로 DxEnterprise를 사용하여 AG 수신기를 생성해야 합니다.
Kubernetes에서 선택적으로 고정 IP 주소를 만들 수 있습니다. 고정 IP 주소를 만들 때 수신기 서비스를 삭제한 후 다시 만드는 경우에도 수신기 서비스에 할당된 외부 IP 주소가 변경되지 않도록 해야 합니다. 다음 단계에 따라 Azure Kubernetes Service(AKS)에서 고정 IP 주소를 만듭니다.
IP 주소를 생성한 후 다음 YAML 샘플과 같이 해당 IP 주소를 할당하고 부하 분산 장치 서비스를 생성합니다.
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
읽기/쓰기 연결 리디렉션 구성 단계(선택 사항)
AG를 생성한 후 다음 단계에 따라 읽기/쓰기 연결 리디렉션을 보조에서 기본으로 활성화할 수 있습니다. 자세한 내용은 보조-주 복제본 읽기/쓰기 연결 리디렉션(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