Mengonfigurasi grup ketersediaan AlwaysOn SQL Server di Windows dan Linux (lintas platform)
Berlaku untuk: SQL Server 2017 (14.x) dan yang lebih baru
Artikel ini menjelaskan langkah-langkah untuk membuat grup ketersediaan AlwaysOn (AG) dengan satu replika di server Windows dan replika lainnya di server Linux.
Penting
Grup ketersediaan lintas platform SQL Server, yang mencakup replika heterogen dengan ketersediaan tinggi lengkap dan dukungan pemulihan bencana, tersedia dengan DH2i DxEnterprise. Untuk informasi selengkapnya, lihat Grup Ketersediaan SQL Server dengan Sistem Operasi Campuran.
Lihat video berikut untuk mengetahui tentang grup ketersediaan lintas platform dengan DH2i.
Konfigurasi ini lintas platform karena replika berada pada sistem operasi yang berbeda. Gunakan konfigurasi ini untuk migrasi dari satu platform ke platform lainnya atau pemulihan bencana (DR). Konfigurasi ini tidak mendukung ketersediaan tinggi.
Sebelum melanjutkan, Anda harus terbiasa dengan penginstalan dan konfigurasi untuk instans SQL Server di Windows dan Linux.
Skenario
Dalam skenario ini, dua server berada di sistem operasi yang berbeda. Windows Server 2022 bernama WinSQLInstance
menghosting replika utama. Server Linux bernama LinuxSQLInstance
host replika sekunder.
Mengonfigurasi AG
Langkah-langkah untuk membuat AG sama dengan langkah-langkah untuk membuat AG untuk beban kerja skala baca. Jenis kluster AG adalah NONE, karena tidak ada manajer kluster.
Untuk skrip dalam artikel ini, kurung <
sudut dan >
identifikasi nilai yang harus Anda ganti untuk lingkungan Anda. Kurung sudut itu sendiri tidak diperlukan untuk skrip.
Instal SQL Server 2022 (16.x) di Windows Server 2022, aktifkan Grup Ketersediaan AlwaysOn dari Pengelola Konfigurasi SQL Server, dan atur autentikasi mode campuran.
Tip
Jika Anda memvalidasi solusi ini di Azure, tempatkan kedua server dalam set ketersediaan yang sama untuk memastikan mereka dipisahkan di pusat data.
Aktifkan Grup Ketersediaan
Untuk petunjuknya, lihat Mengaktifkan atau menonaktifkan fitur grup ketersediaan AlwaysOn.
Pengelola Konfigurasi SQL Server mencatat bahwa komputer bukan node dalam kluster failover.
Setelah Anda mengaktifkan Grup Ketersediaan, mulai ulang SQL Server.
Mengatur autentikasi mode campuran
Untuk petunjuknya, lihat Mengubah mode autentikasi server.
Instal SQL Server 2022 (16.x) di Linux. Untuk petunjuknya, lihat Panduan penginstalan untuk SQL Server di Linux. Aktifkan
hadr
dengan mssql-conf.Untuk mengaktifkan
hadr
melalui mssql-conf dari perintah shell, terbitkan perintah berikut:sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
Setelah Anda mengaktifkan
hadr
, hidupkan ulang instans SQL Server:sudo systemctl restart mssql-server.service
Konfigurasikan
hosts
file di kedua server, atau daftarkan nama server dengan DNS.Buka port firewall untuk TCP 1433 dan 5022 di Windows dan Linux.
Pada replika utama, buat login database dan kata sandi.
CREATE LOGIN dbm_login WITH PASSWORD = '<C0m9L3xP@55w0rd!>'; CREATE USER dbm_user FOR LOGIN dbm_login; GO
Pada replika utama, buat kunci master dan sertifikat, lalu cadangkan sertifikat dengan kunci privat.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<C0m9L3xP@55w0rd!>'; CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm'; BACKUP CERTIFICATE dbm_certificate TO FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.cer' WITH PRIVATE KEY ( FILE = 'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\dbm_certificate.pvk', ENCRYPTION BY PASSWORD = '<C0m9L3xP@55w0rd!>' ); GO
Salin sertifikat dan kunci privat ke server Linux (replika sekunder) di
/var/opt/mssql/data
. Anda dapat menggunakanpscp
untuk menyalin file ke server Linux.Atur grup dan kepemilikan kunci privat dan sertifikat ke
mssql:mssql
.Skrip berikut mengatur grup dan kepemilikan file.
sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.pvk sudo chown mssql:mssql /var/opt/mssql/data/dbm_certificate.cer
Dalam diagram berikut, kepemilikan dan grup diatur dengan benar untuk sertifikat dan kunci.
Pada replika sekunder, buat login database dan kata sandi dan buat kunci master.
CREATE LOGIN dbm_login WITH PASSWORD = '<C0m9L3xP@55w0rd!>'; CREATE USER dbm_user FOR LOGIN dbm_login; GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<M@st3rKeyP@55w0rD!>' GO
Pada replika sekunder, pulihkan sertifikat yang Anda salin ke
/var/opt/mssql/data
.CREATE CERTIFICATE dbm_certificate AUTHORIZATION dbm_user FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '<C0m9L3xP@55w0rd!>' ) GO
Pada replika utama, buat titik akhir.
CREATE ENDPOINT [Hadr_endpoint] AS TCP (LISTENER_IP = (0.0.0.0), LISTENER_PORT = 5022) FOR DATA_MIRRORING ( ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_certificate, ENCRYPTION = REQUIRED ALGORITHM AES ); ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED; GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login]; GO
Penting
Firewall harus terbuka untuk port TCP pendengar. Dalam skrip sebelumnya, port adalah 5022. Gunakan port TCP yang tersedia.
Pada replika sekunder, buat titik akhir. Ulangi skrip sebelumnya pada replika sekunder untuk membuat titik akhir.
Pada replika utama, buat AG dengan
CLUSTER_TYPE = NONE
. Contoh skrip menggunakanSEEDING_MODE = AUTOMATIC
untuk membuat AG.Catatan
Ketika instans Windows SQL Server menggunakan jalur yang berbeda untuk file data dan log, penyemaian otomatis gagal ke instans Linux SQL Server, karena jalur ini tidak ada di replika sekunder. Untuk menggunakan skrip berikut untuk AG lintas platform, database memerlukan jalur yang sama untuk data dan file log di server Windows. Atau Anda dapat memperbarui skrip untuk diatur
SEEDING_MODE = MANUAL
lalu mencadangkan dan memulihkan database denganNORECOVERY
untuk menyemai database.Perilaku ini berlaku untuk gambar Marketplace Azure.
Untuk informasi selengkapnya tentang penyemaian otomatis, lihat Seeding Otomatis - Tata Letak Disk.
Sebelum Anda menjalankan skrip, perbarui nilai untuk AG Anda.
Ganti
<WinSQLInstance>
dengan nama server instans SQL Server replika utama.Ganti
<LinuxSQLInstance>
dengan nama server instans SQL Server replika sekunder.
Untuk membuat AG, perbarui nilai dan jalankan skrip pada replika utama.
CREATE AVAILABILITY GROUP [ag1] WITH (CLUSTER_TYPE = NONE) FOR REPLICA ON N'<WinSQLInstance>' WITH ( ENDPOINT_URL = N'tcp://<WinSQLInstance>:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, FAILOVER_MODE = MANUAL, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL) ), N'<LinuxSQLInstance>' WITH ( ENDPOINT_URL = N'tcp://<LinuxSQLInstance>:5022', AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, SEEDING_MODE = AUTOMATIC, FAILOVER_MODE = MANUAL, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL); ) GO
Untuk informasi selengkapnya, lihat MEMBUAT GRUP KETERSEDIAAN.
Pada replika sekunder, bergabunglah dengan AG.
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE); ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; GO
Buat database untuk AG. Contoh langkah-langkah menggunakan database bernama
TestDB
. Jika Anda menggunakan seeding otomatis, atur jalur yang sama untuk data dan file log.Sebelum Anda menjalankan skrip, perbarui nilai untuk database Anda.
Mengganti
TestDB
dengan nama database Anda.Ganti
<F:\Path>
dengan jalur untuk database dan file log Anda. Gunakan jalur yang sama untuk database dan file log.
Anda juga dapat menggunakan jalur default.
Untuk membuat database Anda, jalankan skrip.
CREATE DATABASE [TestDB] CONTAINMENT = NONE ON PRIMARY ( NAME = N'TestDB', FILENAME = N'<F:\Path>\TestDB.mdf') LOG ON ( NAME = N'TestDB_log', FILENAME = N'<F:\Path>\TestDB_log.ldf'); GO
Ambil cadangan lengkap database.
Jika Anda tidak menggunakan seeding otomatis, pulihkan database di server replika sekunder (Linux). Migrasikan database SQL Server dari Windows ke Linux menggunakan pencadangan dan pemulihan. Pulihkan database
WITH NORECOVERY
pada replika sekunder.Tambahkan database ke AG. Perbarui contoh skrip. Mengganti
TestDB
dengan nama database Anda. Pada replika utama, jalankan kueri T-SQL untuk menambahkan database ke AG.ALTER AG [ag1] ADD DATABASE TestDB; GO
Verifikasi bahwa database diisi pada replika sekunder.
Failover replika utama
Setiap grup ketersediaan hanya memiliki satu replika utama. Replika utama memungkinkan baca dan tulis. Untuk mengubah replika mana yang utama, Anda dapat melakukan failover. Dalam grup ketersediaan umum, manajer kluster mengotomatiskan proses failover. Dalam grup ketersediaan dengan jenis kluster NONE, proses failover manual.
Ada dua cara untuk melakukan failover pada replika utama dalam grup ketersediaan dengan jenis kluster NONE:
- Failover manual tanpa kehilangan data
- Failover manual paksa dengan kehilangan data
Failover manual tanpa kehilangan data
Gunakan metode ini saat replika utama tersedia, tetapi Anda perlu mengubah sementara atau secara permanen instans mana yang menghosting replika utama. Untuk menghindari potensi kehilangan data, sebelum Anda mengeluarkan failover manual, pastikan bahwa replika sekunder target sudah diperbarui.
Untuk melakukan failover secara manual tanpa kehilangan data:
Buat replika
SYNCHRONOUS_COMMIT
sekunder primer dan target saat ini .ALTER AVAILABILITY GROUP [AGRScale] MODIFY REPLICA ON N'<node2>' WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
Untuk mengidentifikasi bahwa transaksi aktif diterapkan ke replika utama dan setidaknya satu replika sekunder sinkron, jalankan kueri berikut:
SELECT ag.name, drs.database_id, drs.group_id, drs.replica_id, drs.synchronization_state_desc, ag.sequence_number FROM sys.dm_hadr_database_replica_states drs, sys.availability_groups ag WHERE drs.group_id = ag.group_id;
Replika sekunder disinkronkan ketika
synchronization_state_desc
adalahSYNCHRONIZED
.Perbarui
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
ke 1.Skrip berikut diatur
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
ke 1 pada grup ketersediaan bernamaag1
. Sebelum Anda menjalankan skrip berikut, gantiag1
dengan nama grup ketersediaan Anda:ALTER AVAILABILITY GROUP [AGRScale] SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 1);
Pengaturan ini memastikan bahwa setiap transaksi aktif diterapkan ke replika utama dan setidaknya satu replika sekunder sinkron.
Catatan
Pengaturan ini tidak spesifik untuk failover dan harus ditetapkan berdasarkan persyaratan lingkungan.
Atur replika utama dan replika sekunder yang tidak berpartisipasi dalam failover offline untuk mempersiapkan perubahan peran:
ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
Promosikan replika sekunder target ke primer.
ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS;
Perbarui peran primer lama dan sekunder lainnya ke
SECONDARY
, jalankan perintah berikut pada instans SQL Server yang menghosting replika utama lama:ALTER AVAILABILITY GROUP [AGRScale] SET (ROLE = SECONDARY);
Catatan
Untuk menghapus grup ketersediaan, gunakan DROP AVAILABILITY GROUP. Untuk grup ketersediaan yang dibuat dengan jenis kluster NONE atau EXTERNAL, jalankan perintah pada semua replika yang merupakan bagian dari grup ketersediaan.
Lanjutkan pergerakan data, jalankan perintah berikut untuk setiap database dalam grup ketersediaan pada instans SQL Server yang menghosting replika utama:
ALTER DATABASE [db1] SET HADR RESUME
Buat ulang listener apa pun yang Anda buat untuk tujuan skala baca dan yang tidak dikelola oleh manajer kluster. Jika pendengar asli menunjuk ke primer lama, letakkan dan buat ulang untuk menunjuk ke primer baru.
Failover manual paksa dengan kehilangan data
Jika replika utama tidak tersedia dan tidak dapat segera dipulihkan, maka Anda perlu memaksa failover ke replika sekunder dengan kehilangan data. Namun, jika replika utama asli pulih setelah failover, replika tersebut akan mengasumsikan peran utama. Untuk menghindari setiap replika berada dalam status yang berbeda, hapus primer asli dari grup ketersediaan setelah failover paksa dengan kehilangan data. Setelah primer asli kembali online, hapus grup ketersediaan darinya sepenuhnya.
Untuk memaksa failover manual dengan kehilangan data dari replika utama N1 ke replika sekunder N2, ikuti langkah-langkah berikut:
Pada replika sekunder (N2), mulai failover paksa:
ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;
Pada replika utama baru (N2), hapus primer asli (N1):
ALTER AVAILABILITY GROUP [AGRScale] REMOVE REPLICA ON N'N1';
Validasi bahwa semua lalu lintas aplikasi diarahkan ke pendengar dan/atau replika utama baru.
Jika primer asli (N1) online, segera ambil grup ketersediaan AGRScale offline pada primer asli (N1):
ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
Jika ada data atau perubahan yang tidak disinkronkan, pertahankan data ini melalui cadangan atau opsi replikasi data lain yang sesuai dengan kebutuhan bisnis Anda.
Selanjutnya, hapus grup ketersediaan dari primer asli (N1):
DROP AVAILABILITY GROUP [AGRScale];
Hilangkan database grup ketersediaan pada replika utama asli (N1):
USE [master] GO DROP DATABASE [AGDBRScale] GO
(Opsional) Jika diinginkan, Anda sekarang dapat menambahkan N1 kembali sebagai replika sekunder baru ke grup ketersediaan AGRScale.
Artikel ini meninjau langkah-langkah untuk membuat AG lintas platform untuk mendukung migrasi atau beban kerja skala baca. Ini dapat digunakan untuk pemulihan bencana manual. Ini juga menjelaskan cara melakukan failover pada AG. AG lintas platform menggunakan jenis NONE
kluster dan tidak mendukung ketersediaan tinggi.