適用対象:Linux 上の SQL Server
このチュートリアルでは、SQL Server Azure Kubernetes Service (AKS) Kubernetesクラスターに展開したSQL Server Linuxベースのコンテナに対して、DH2i DxEnterpriseでAlways On可用性グループ(AG)を設定する方法を解説しています。 サイドカー構成 (推奨) を選ぶか、独自のカスタム コンテナー イメージを構築できます。
Note
Microsoft では、データ移動、AG、SQL Server の各コンポーネントをサポートしています。 DH2iはDxEnterprise製品をサポートしており、クラスタ管理およびクオーラム管理が含まれます。
StatefulSetの展開方法を学び、DH2i DxEnterpriseを使ってAGを作成・設定する方法を学びましょう。 このチュートリアルは、以下の手順で構成されています。
- ヘッドレス サービス構成を作成する
- 同じポッド内の SQL Server と DxEnterprise をサイドカー コンテナーとして使って StatefulSet 構成を作成する
- セカンダリ レプリカを追加して SQL Server AG を作成して構成する
- AG にデータベースを作成し、フェールオーバーをテストする
前提条件
このチュートリアルでは、3 つのレプリカを含む AG の例を示します。 必要なもの:
- Azure Kubernetes Service (AKS) または Kubernetes クラスター。
- AG 機能とトンネルが有効な DxEnterprise ライセンス。 詳細については、非運用環境での使用に関する 開発者向けエディション 、または運用ワークロード用 の DxEnterprise ソフトウェア を参照してください。
ヘッドレス サービスを作成する
Kubernetes クラスターでは、ヘッドレス サービスによって、ホスト名を使って各ポッドを相互に接続できます。
ヘッドレスサービスを作成するには、以下のサンプルコンテンツを含む
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レプリカが作成されます。 この StatefulSet の各ポッドは、SQL Server コンテナーと DxEnterprise コンテナーという 2 つのコンテナーで構成されます。 これらのコンテナはサイドカー構成で別々に始まりますが、DxEnterpriseはSQL Serverコンテナ内でAGレプリカを管理します。
#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: 1GiSQL Server インスタンスの認証情報を作成します。
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"パスワードは SQL Server の既定のパスワード ポリシーに従う必要があります。 既定では、パスワードの長さは少なくとも 8 文字で、大文字、小文字、10 進数の数字、記号の 4 種類のうち 3 種類を含んでいる必要があります。 パスワードには最大 128 文字まで使用できます。 可能な限り長く複雑なパスワードを使用してください。
StatefulSet 構成を適用します。
kubectl apply -f dxemssql.yamlポッドの状態を確認し、ポッドの状態が
runningになったら次の手順に進みます。kubectl get pods kubectl describe pods
可用性グループの作成とフェールオーバーのテスト
AGの作成・構成、レプリカの追加、フェイルオーバーのテストの詳細については、KubernetesのSQL Server可用性グループをご覧ください。
可用性グループ リスナーを構成する手順 (省略可能)
また、以下の手順で、AG リスナーを構成することもできます。
DH2iドキュメントの最後の方にある任意のステップに従って、DxEnterpriseでAGリスナーを作成していることを確認してください。
Kubernetes では、必要に応じて 静的 IP アドレスを作成できます。 静的IPアドレスは、リスナーサービスを削除して再作成しても、リスナーサービスに割り当てられた外部IPアドレスが変わらないことを保証します。 この手順に従って、Azure Kubernetes Service (AKS) で 静的 IP アドレスを作成 します。
IPアドレスを作成したら、それを割り当て、以下の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
読み取り/書き込み接続リダイレクトを構成する手順 (省略可能)
AGを作成した後、セカンダリからプライマリへの読み書き接続リダイレクトを有効にしてください。 詳しくは、「セカンダリからプライマリ レプリカへの読み取り/書き込み接続のリダイレクト (Always On 可用性グループ)」をご覧ください。
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
関連するコンテンツ
- Azure Kubernetes Service 上の DH2i DxOperator を使用して Kubernetes に可用性グループをデプロイする
クイックスタート: Azure または Red Hat OpenShift で SQL Server コンテナー クラスターをデプロイする方法 - StatefulSets を使用して Kubernetes に SQL Server Linux コンテナーをデプロイする
- Tutorial: SQL Server on Linux コンテナーを使用してActive Directory認証を構成します