Melakukan failover manual yang direncanakan dari grup ketersediaan AlwaysOn (SQL Server)
Berlaku untuk: SQL Server
Topik ini menjelaskan cara melakukan failover manual tanpa kehilangan data (failover manual yang direncanakan) pada grup ketersediaan AlwaysOn dengan menggunakan SQL Server Management Studio, Transact-SQL, atau PowerShell di SQL Server. Grup ketersediaan gagal pada tingkat replika ketersediaan. Failover manual yang direncanakan, seperti failover grup ketersediaan AlwaysOn, mentransisikan replika sekunder ke peran utama. Secara bersamaan, failover mentransisikan replika utama sebelumnya ke peran sekunder.
Failover manual yang direncanakan hanya didukung ketika replika utama dan replika sekunder target berjalan dalam mode penerapan sinkron dan saat ini disinkronkan. Failover manual yang direncanakan mempertahankan semua data dalam database sekunder yang bergabung ke grup ketersediaan pada replika sekunder target. Setelah replika utama sebelumnya beralih ke peran sekunder, databasenya menjadi database sekunder. Kemudian mereka mulai menyinkronkan dengan database utama baru. Setelah mereka semua beralih ke status SYNCHRONIZED, replika sekunder baru menjadi memenuhi syarat untuk berfungsi sebagai target failover manual yang direncanakan di masa mendatang.
Catatan
Jika replika sekunder dan utama dikonfigurasi untuk mode failover otomatis, setelah replika sekunder disinkronkan, replika tersebut juga dapat berfungsi sebagai target untuk failover otomatis. Untuk informasi selengkapnya, lihat Mode ketersediaan (grup ketersediaan AlwaysOn).
Sebelum Anda mulai
Penting
Ada prosedur khusus untuk melakukan failover pada grup ketersediaan skala baca tanpa manajer kluster. Saat grup ketersediaan memiliki CLUSTER_TYPE = NONE, ikuti prosedur di bawah Fail over replika utama pada grup ketersediaan skala baca.
Pembatasan dan batasan
Perintah failover kembali segera setelah replika sekunder target menerima perintah. Namun, pemulihan database terjadi secara asinkron setelah grup ketersediaan selesai gagal.
Konsistensi lintas database di seluruh database dalam grup ketersediaan mungkin tidak dipertahankan pada failover.
Catatan
Dukungan untuk transaksi lintas database dan terdistribusi bervariasi menurut SQL Server dan versi sistem operasi. Untuk informasi selengkapnya, lihat Transaksi lintas database dan transaksi terdistribusi untuk grup ketersediaan AlwaysOn dan pencerminan database (SQL Server).
Prasyarat dan pembatasan
Replika sekunder target dan replika utama harus berjalan dalam mode ketersediaan penerapan sinkron.
Saat ini, replika sekunder target harus disinkronkan dengan replika utama. Semua database sekunder pada replika sekunder ini harus digabungkan ke grup ketersediaan. Mereka juga harus disinkronkan dengan database utama yang sesuai (yaitu, database sekunder lokal harus DISINKRONKAN).
Tip
Untuk menentukan kesiapan failover replika sekunder, kueri kolom is_failover_ready dalam tampilan manajemen dinamis sys.dm_hadr_database_replica_cluster_states . Atau Anda dapat melihat kolom Kesiapan Failover dari dasbor grup AlwaysOn.
Tugas ini hanya didukung pada replika sekunder target. Anda harus terhubung ke instans server yang menghosting replika sekunder target.
Keamanan
Izin
Izin UBAH GRUP KETERSEDIAAN diperlukan pada grup ketersediaan. Izin GRUP KETERSEDIAAN KONTROL, izin UBAH GRUP KETERSEDIAAN APA PUN, atau izin SERVER KONTROL juga diperlukan.
Menggunakan SQL Server Management Studio
Untuk melakukan failover secara manual pada grup ketersediaan:
Di Object Explorer, sambungkan ke instans server yang menghosting replika sekunder dari grup ketersediaan yang perlu di-failover. Perluas pohon server.
Perluas node Ketersediaan Tinggi AlwaysOn dan node Grup Ketersediaan.
Klik kanan grup ketersediaan yang akan di-failover, dan pilih Failover.
Wizard Grup Ketersediaan Failover dimulai. Untuk informasi selengkapnya, lihat Menggunakan wizard Grup Ketersediaan Failover (SQL Server Management Studio).
Menggunakan Transact-SQL
Untuk melakukan failover secara manual pada grup ketersediaan:
Sambungkan ke instans server yang menghosting replika sekunder target.
Gunakan pernyataan ALTER AVAILABILITY GROUP, sebagai berikut:
MENGUBAH FAILOVER group_name GRUP KETERSEDIAAN
Dalam pernyataan, group_name adalah nama grup ketersediaan.
Contoh berikut secara manual gagal melalui grup ketersediaan MyAg ke replika sekunder yang terhubung:
ALTER AVAILABILITY GROUP MyAg FAILOVER;
Menggunakan PowerShell
Untuk melakukan failover secara manual pada grup ketersediaan:
Ubah direktori (cd) ke instans server yang menghosting replika sekunder target.
Gunakan cmdlet Switch-SqlAvailabilityGroup.
Catatan
Untuk melihat sintaks cmdlet, gunakan cmdlet Get-Help di lingkungan PowerShell SQL Server. Untuk informasi selengkapnya, lihat Mendapatkan bantuan untuk SQL Server PowerShell.
Contoh berikut secara manual mengalihkan grup ketersediaan MyAg ke replika sekunder dengan jalur yang ditentukan:
Switch-SqlAvailabilityGroup -Path SQLSERVER:\Sql\SecondaryServer\InstanceName\AvailabilityGroups\MyAg
Untuk menyiapkan dan menggunakan penyedia PowerShell SQL Server:
Tindak lanjut: Setelah Anda melakukan failover secara manual pada grup ketersediaan
Jika Anda melakukan failover di luar kumpulan failover otomatis dari grup ketersediaan, sesuaikan suara kuorum simpul pengklusteran failover Windows Server untuk mencerminkan konfigurasi grup ketersediaan baru Anda. Untuk informasi selengkapnya, lihat Pengklusteran failover Windows Server (WSFC) dengan SQL Server.
Failover replika utama pada grup ketersediaan skala baca
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.