Menyebarkan grup ketersediaan dengan DH2i DxEnterprise di Kubernetes
Berlaku untuk: SQL Server - Linux
Tutorial ini menjelaskan cara mengonfigurasi grup ketersediaan (AG) AlwaysOn SQL Server untuk kontainer berbasis Linux SQL Server yang disebarkan ke kluster Kubernetes Service (AKS) Azure Kubernetes, menggunakan DH2i DxEnterprise. Anda dapat memilih antara konfigurasi sidecar (lebih disukai), atau membangun gambar kontainer kustom Anda sendiri.
Catatan
Microsoft mendukung komponen pergerakan data, AG, dan SQL Server. DH2i bertanggung jawab atas dukungan produk DxEnterprise, yang mencakup manajemen kluster dan kuorum.
Dengan menggunakan langkah-langkah yang disebutkan dalam artikel ini, pelajari cara menyebarkan StatefulSet dan menggunakan solusi DH2i DxEnterprise untuk membuat dan mengonfigurasi AG. Tutorial ini terdiri dari langkah-langkah berikut.
- Membuat konfigurasi layanan headless
- Membuat konfigurasi StatefulSet dengan SQL Server dan DxEnterprise dalam pod yang sama dengan kontainer sidecar
- Membuat dan mengonfigurasi SQL Server AG, menambahkan replika sekunder
- Membuat database di AG, dan menguji failover
Prasyarat
Tutorial ini menunjukkan contoh AG dengan tiga replika. Anda memerlukan:
- Kluster Azure Kubernetes Service (AKS) atau Kubernetes.
- Lisensi DxEnterprise yang valid dengan fitur AG dan terowongan diaktifkan. Untuk informasi selengkapnya, lihat edisi pengembang untuk penggunaan nonproduksi, atau perangkat lunak DxEnterprise untuk beban kerja produksi.
Membuat layanan headless
Dalam kluster Kubernetes, layanan headless memungkinkan pod Anda terhubung satu sama lain menggunakan nama host.
Untuk membuat layanan headless, Buat file YAML yang disebut
headless_services.yaml
, dengan konten sampel berikut.#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
Jalankan perintah berikut untuk menerapkan konfigurasi.
kubectl apply -f headless_services.yaml
Membuat StatefulSet
Buat file YAML StatefulSet dengan konten sampel berikut, dan beri nama
dxemssql.yaml
.Konfigurasi StatefulSet ini membuat tiga replika DxEMSSQL yang menggunakan klaim volume persisten untuk menyimpan data mereka. Setiap pod dalam StatefulSet ini terdiri dari dua kontainer: kontainer SQL Server dan kontainer DxEnterprise. Kontainer ini dimulai secara terpisah satu sama lain dalam konfigurasi "sidecar", tetapi DxEnterprise mengelola replika AG dalam kontainer 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
Buat kredensial untuk instans SQL Server.
kubectl create secret generic mssql --from-literal=MSSQL_SA_PASSWORD="<password>"
Terapkan konfigurasi StatefulSet.
kubectl apply -f dxemssql.yaml
Verifikasi status pod, dan lanjutkan ke langkah berikutnya ketika status pod menjadi
running
.kubectl get pods kubectl describe pods
Membuat grup ketersediaan dan menguji failover
Untuk detail tentang membuat dan mengonfigurasi AG, menambahkan replika, dan menguji failover, lihat Grup Ketersediaan SQL Server di Kubernetes.
Langkah-langkah untuk mengonfigurasi listener grup ketersediaan (opsional)
Anda juga dapat mengonfigurasi pendengar AG, dengan langkah-langkah berikut.
Pastikan Anda membuat pendengar AG menggunakan DxEnterprise seperti yang diuraikan dalam langkah opsional di dekat akhir dokumentasi DH2i.
Di Kubernetes, Anda dapat secara opsional membuat alamat IP statis . Saat Anda membuat alamat IP statis, Anda memastikan bahwa jika layanan pendengar dihapus dan dibuat ulang, alamat IP eksternal yang ditetapkan ke layanan pendengar Anda tidak berubah. Ikuti langkah-langkah untuk membuat alamat IP statis di Azure Kubernetes Service (AKS).
Setelah membuat alamat IP, Anda menetapkan alamat IP tersebut dan membuat layanan load balancer, seperti yang ditunjukkan dalam sampel YAML berikut.
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
Langkah-langkah untuk mengonfigurasi pengalihan koneksi baca/tulis (opsional)
Setelah membuat AG, Anda dapat mengaktifkan pengalihan koneksi baca/tulis dari sekunder ke primer dengan mengikuti langkah-langkah ini. Untuk informasi selengkapnya, lihat Pengalihan koneksi baca/tulis replika sekunder ke primer (Grup Ketersediaan AlwaysOn).
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
Konten terkait
- Menyebarkan grup ketersediaan di Kubernetes dengan DH2i DxOperator di Azure Kubernetes Service
- Menyebarkan kontainer SQL Server di Azure Kubernetes Service
- Menyebarkan kontainer SQL Server Linux di Kubernetes dengan StatefulSets
- Tutorial: Mengonfigurasi autentikasi Direktori Aktif dengan SQL Server pada kontainer Linux