Azure Kubernetes Service의 DH2i DxOperator를 사용하여 Kubernetes에 가용성 그룹 배포
적용 대상: SQL Server - Linux
이 자습서에서는 DH2i DxOperator를 사용하여 Azure Kubernetes Service(AKS) Kubernetes 클러스터에 배포된 SQL Server Linux 기반 컨테이너에 대해 SQL Server Always On 가용성 그룹(AG)을 구성하는 방법을 설명합니다. 이러한 절차는 Azure Red Hat OpenShift 클러스터에도 적용되며, 가장 큰 차이점은 Azure Red Hat OpenShift 클러스터를 배포한 후 다음 단계에서 kubectl
명령을 oc
로 대체한다는 것입니다.
참고 항목
Microsoft는 데이터 이동, AG 및 SQL Server 구성 요소를 지원합니다. DH2i는 DxEnterprise 제품 지원을 담당하며, 여기에는 클러스터 및 쿼럼 관리가 포함됩니다. DxOperator는 사용자 지정 리소스 정의를 사용하여 DxEnterprise 클러스터의 배포를 자동화하는 Kubernetes의 소프트웨어 확장입니다. 그런 다음 DxEnterprise는 Kubernetes에서 SQL Server AG 워크로드를 생성, 구성, 관리하고 자동 장애 조치(failover)를 수행하기 위한 모든 계측 기능을 제공합니다.
무료 DxEnterprise 소프트웨어 라이선스에 등록할 수 있습니다. 자세한 내용은 DxOperator 빠른 시작 가이드를 참조하세요.
이 문서에서 설명되는 단계를 사용하여 StatefulSet을 배포하고 DH2i DxOperator를 사용하여 AKS에서 호스팅되는 3개의 복제본(replica)으로 AG를 생성 및 구성하는 방법을 알아봅니다.
이 자습서는 다음 단계로 구성됩니다.
- mssql-conf 설정으로 AKS 클러스터에서
configmap
개체 만들기 - DxOperator 설치
- 비밀 개체 만들기
- YAML 파일을 사용하여 3개의 복제본(replica) SQL AG 배포
- SQL Server에 연결
필수 조건
Azure Kubernetes Service(AKS) 또는 Kubernetes 클러스터.
AG 기능 및 터널이 활성화된 유효한 DxEnterprise 라이선스입니다. 자세한 내용은 비프로덕션 용도의 경우 개발자 버전을 참조하고 프로덕션 워크로드의 경우 DxEnterprise 소프트웨어를 참조하세요.
configmap
개체 만들기
AKS에서 요구 사항에 따라 mssql-conf 설정이 있는
configmap
개체를 만듭니다. 이 예제에서는 다음 매개 변수와 함께configMap
(이)라는 파일을 사용하여mssqlconfig.yaml
을(를) 만듭니다.apiVersion: v1 kind: ConfigMap metadata: name: mssql-config data: mssql.conf: | [EULA] accepteula = Y [sqlagent] enabled = true
다음 명령을 실행하여 개체를 만듭니다.
kubectl apply -f ./mssqlconfig.yaml
비밀 개체 만들기
SQL Server의 sa
비밀번호를 저장할 비밀을 만듭니다.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
주의
암호는 SQL Server 기본 암호 정책을 따라야 합니다. 기본적으로 암호는 8자 이상이어야 하며 대문자, 소문자, 0~9까지의 숫자 및 기호 네 가지 집합 중 세 집합의 문자를 포함해야 합니다. 암호 길이는 128자까지 가능하며 되도록 길고 복잡한 암호를 사용합니다.
DH2i의 라이선스 키를 저장할 비밀을 만듭니다. 개발자 라이선스는 DH2i의 웹 사이트에서 구할 수 있습니다. 다음 예제에서 XXXX-XXXX-XXXX-XXXX
을(를) 라이선스 키로 바꿉니다.
kubectl create secret generic dxe --from-literal=DX_PASSKEY="<password>" --from-literal=DX_LICENSE=XXXX-XXXX-XXXX-XXXX
DxOperator 설치
DxOperator를 설치하려면 다음 예제를 사용하여 DxOperator YAML 파일을 다운로드한 다음 YAML 파일을 적용해야 합니다.
다음 명령을 사용하여 AG를 설정하는 방법을 설명하는 YAML을 배포합니다.
DxOperator.yaml
등 사용자 지정 이름으로 파일을 저장합니다.curl -L https://dxoperator.dh2i.com/dxesqlag/files/v1.yaml -o DxOperator.yaml kubectl apply –f DxOperator.yaml
운영자를 설치한 후에는 SQL Server 컨테이너를 배포하고, 가용성 그룹을 구성하고, 복제본(replica)을 정의하고, DxEnterprise 클러스터를 배포 및 구성할 수 있습니다. 다음은 요구 사항에 맞게 변경할 수 있는
DxEnterpriseSqlAg.yaml
(이)라는 샘플 배포 YAML 파일입니다.apiVersion: dh2i.com/v1 kind: DxEnterpriseSqlAg metadata: name: contoso-sql spec: synchronousReplicas: 3 asynchronousReplicas: 0 # ConfigurationOnlyReplicas are only allowed with availabilityGroupClusterType set to EXTERNAL configurationOnlyReplicas: 0 availabilityGroupName: AG1 # Listener port for the availability group (uncomment to apply) availabilityGroupListenerPort: 51433 # For a contained availability group, add the option CONTAINED availabilityGroupOptions: null # Valid options are EXTERNAL (automatic failover) and NONE (no automatic failover) availabilityGroupClusterType: EXTERNAL createLoadBalancers: true template: metadata: labels: label: example annotations: annotation: example spec: dxEnterpriseContainer: image: "docker.io/dh2i/dxe:latest" imagePullPolicy: Always acceptEula: true clusterSecret: dxe vhostName: VHOST1 joinExistingCluster: false # QoS – guaranteed (uncomment to apply) #resources: #limits: #memory: 1Gi #cpu: '1' # Configuration options for the required persistent volume claim for DxEnterprise volumeClaimConfiguration: storageClassName: null resources: requests: storage: 1Gi mssqlServerContainer: image: "mcr.microsoft.com/mssql/server:latest" imagePullPolicy: Always mssqlSecret: mssql acceptEula: true mssqlPID: Developer mssqlConfigMap: mssql-config # QoS – guaranteed (uncomment to apply) #resources: #limits: #memory: 2Gi #cpu: '2' # Configuration options for the required persistent volume claim for SQL Server volumeClaimConfiguration: storageClassName: null resources: requests: storage: 2Gi # Additional side-car containers, such as mssql-tools (uncomment to apply) #containers: #- name: mssql-tools #image: "mcr.microsoft.com/mssql-tools" #command: [ "/bin/sh" ] #args: [ "-c", "tail -f /dev/null" ]
DxEnterpriseSqlAg.yaml
파일을 배포합니다.kubectl apply -f DxEnterpriseSqlAg.yaml
가용성 그룹 수신기 만들기
이전 단계에서 선택기를 값 metadata.name
(으)로 설정하여 다음 YAML을 적용하여 부하 분산 장치를 추가합니다. 이 예에서는 contoso-sql
입니다.
apiVersion: v1
kind: Service
metadata:
name: contoso-cluster-lb
spec:
type: LoadBalancer
selector:
dh2i.com/entity: contoso-sql
ports:
- name: sql
protocol: TCP
port: 1433
targetPort: 51444
- name: listener
protocol: TCP
port: 51433
targetPort: 51433
- name: dxe
protocol: TCP
port: 7979
targetPort: 7979
배포 및 부하 분산 장치 할당을 확인합니다.
kubectl get pods
kubectl get services
다음 예제와 비슷한 내용이 출력됩니다.
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
contoso-cluster-lb LoadBalancer 10.1.0.21 172.212.20.29 1433:30484/TCP,14033:30694/TCP,7979:30385/TCP 3m18s
contoso-sql-0 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m
contoso-sql-0-lb LoadBalancer 10.1.0.210 4.255.19.171 7979:32374/TCP,1433:32444/TCP 79m
contoso-sql-1 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m
contoso-sql-1-lb LoadBalancer 10.1.0.158 4.255.19.201 7979:30152/TCP,1433:30868/TCP 79m
contoso-sql-2 ClusterIP None <none> 7979/TCP,7980/TCP,7981/UDP,5022/TCP,1433/TCP 79m
contoso-sql-2-lb LoadBalancer 10.1.0.159 4.255.19.218 7979:30566/TCP,1433:31463/TCP 79m
kubernetes ClusterIP 10.1.0.1 <none> 443/TCP 87m
PS /home/aravind> kubectl get pods
NAME READY STATUS RESTARTS AGE
contoso-sql-0 2/2 Running 0 74m
contoso-sql-1 2/2 Running 0 74m
contoso-sql-2 2/2 Running 0 74m