Lakukan failover manual yang direncanakan dari grup ketersediaan Always On (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 mengalami kegagalan di tingkat replika ketersediaan. Failover manual yang direncanakan, seperti failover grup ketersediaan AlwaysOn, mentransisikan replika sekunder ke peran utama. Seiring dengan itu, failover mengalihkan replika utama sebelumnya ke peran sekunder.

Failover manual yang direncanakan hanya didukung ketika replika utama dan replika sekunder target berjalan dalam mode komit 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 yang baru dapat memenuhi syarat untuk berfungsi sebagai target untuk 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 Alihkan replika utama pada grup ketersediaan dengan skala baca.

Pembatasan dan batasan

Prasyarat dan pembatasan

  • Replika sekunder target dan replika primer harus berjalan dalam mode ketersediaan komit 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).

    Petunjuk

    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 Always On.

  • Tugas ini hanya didukung pada replika sekunder target. Anda harus terhubung ke instans server yang menghosting replika sekunder target.

Keamanan

Hak Akses

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:

  1. Di Object Explorer, sambungkan ke instans server yang menghosting replika sekunder dari grup ketersediaan yang perlu di-failover. Perluas pohon server.

  2. Perluas node Always On High Availability dan node Grup Ketersediaan.

  3. Klik kanan grup ketersediaan yang akan di-failover, dan pilih Failover.

  4. Panduan Grup Ketersediaan Failover telah dimulai. Untuk informasi lebih lanjut, lihat Gunakan wizard Grup Ketersediaan Failover (SQL Server Management Studio).

Menggunakan Transact-SQL

Untuk melakukan failover secara manual pada grup ketersediaan:

  1. Sambungkan ke instans server yang menghosting replika sekunder target.

  2. Gunakan pernyataan ALTER AVAILABILITY GROUP, sebagai berikut:

    UBAH GRUP KETERSEDIAAN group_name FAILOVER

    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:

  1. Ubah direktori (cd) ke instans server yang menghosting replika sekunder target.

  2. 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 dari simpul kluster failover Windows Server untuk mencerminkan konfigurasi grup ketersediaan baru Anda. Untuk informasi selengkapnya, lihat Pengklusteran failover Windows Server (WSFC) dengan SQL Server.

Mengalihkan replika utama pada grup ketersediaan baca-saja

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 TIDAK ADA, proses failover dilakukan secara manual.

Ada dua cara untuk melakukan failover pada replika utama dalam grup ketersediaan dengan tipe kluster NONE:

  • Failover secara manual tanpa kehilangan data
  • Failover manual paksa dengan kehilangan data

Proses 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:

  1. Jadikan replika utama saat ini dan targetkan replikasi sekunder SYNCHRONOUS_COMMIT.

    ALTER AVAILABILITY GROUP [AGRScale] 
         MODIFY REPLICA ON N'<node2>' 
         WITH (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT);
    
  2. 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 adalah SYNCHRONIZED.

  3. Perbarui REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ke 1.

    Skrip berikut mengatur REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT ke 1 pada grup ketersediaan bernama ag1. Sebelum Anda menjalankan skrip berikut, ganti ag1 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.

  4. Atur replika utama dan replika sekunder yang tidak berpartisipasi dalam failover offline untuk mempersiapkan perubahan peran:

    ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
    
  5. Promosikan replika sekunder yang ditargetkan menjadi replika primer.

    ALTER AVAILABILITY GROUP AGRScale FORCE_FAILOVER_ALLOW_DATA_LOSS; 
    
  6. 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.

  7. 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
    
  8. Buat kembali semua listener yang Anda buat untuk tujuan skala baca dan yang tidak dikelola oleh pengelola kluster. Jika pendengar asli menunjuk ke primer lama, letakkan dan buat ulang untuk menunjuk ke primer baru.

Failover manual secara paksa dengan potensi 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 server utama asli kembali online, hapus grup ketersediaan darinya sepenuhnya.

Untuk memaksakan failover manual yang menyebabkan kehilangan data dari replika utama N1 ke replika sekunder N2, ikuti langkah-langkah berikut:

  1. Pada replika sekunder (N2), mulai failover paksa:

    ALTER AVAILABILITY GROUP [AGRScale] FORCE_FAILOVER_ALLOW_DATA_LOSS;
    
  2. Pada replika utama baru (N2), hapus primer asli (N1):

    ALTER AVAILABILITY GROUP [AGRScale]
    REMOVE REPLICA ON N'N1';
    
  3. Validasi bahwa semua lalu lintas aplikasi diarahkan ke listener dan/atau replika utama baru.

  4. Jika primer asli (N1) online, segera matikan grup ketersediaan AGRScale pada primer asli (N1).

    ALTER AVAILABILITY GROUP [AGRScale] OFFLINE
    
  5. Jika ada data atau perubahan yang tidak disinkronkan, pertahankan data ini melalui cadangan atau opsi replikasi data lain yang sesuai dengan kebutuhan bisnis Anda.

  6. Selanjutnya, hapus grup ketersediaan dari primer asli (N1):

    DROP AVAILABILITY GROUP [AGRScale];
    
  7. Hilangkan database grup ketersediaan pada replika utama asli (N1):

    USE [master]
    GO
    DROP DATABASE [AGDBRScale]
    GO
    
  8. (Opsional) Jika diinginkan, Anda sekarang dapat menambahkan N1 kembali sebagai replika sekunder baru ke grup ketersediaan AGRScale.

Lihat juga