Bagikan melalui


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.

Diagram grup Ketersediaan dengan jenis kluster Tidak Ada.

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.

Catatan

Untuk skrip dalam artikel ini, kurung < sudut dan > identifikasi nilai yang perlu Anda ganti untuk lingkungan Anda. Kurung sudut itu sendiri tidak diperlukan untuk skrip.

  1. 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 dan menonaktifkan Grup Ketersediaan AlwaysOn (SQL Server).

    Cuplikan layar memperlihatkan cara mengaktifkan Grup Ketersediaan.

    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.

  2. Instal SQL Server 2022 (16.x) di Linux. Untuk petunjuknya, lihat Menginstal SQL Server. 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
    
  3. Konfigurasikan hosts file di kedua server, atau daftarkan nama server dengan DNS.

  4. Buka port firewall untuk TCP 1433 dan 5022 di Windows dan Linux.

  5. 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
    
  6. 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
    
  7. Salin sertifikat dan kunci privat ke server Linux (replika sekunder) di /var/opt/mssql/data. Anda dapat menggunakan pscp untuk menyalin file ke server Linux.

  8. 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.

    Cuplikan layar jendela Git Bash memperlihatkan .cer dan .pvk di folder /var/opt/mssql/data.

  9. 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
    
  10. 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
    
  11. 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.

  12. Pada replika sekunder, buat titik akhir. Ulangi skrip sebelumnya pada replika sekunder untuk membuat titik akhir.

  13. Pada replika utama, buat AG dengan CLUSTER_TYPE = NONE. Contoh skrip menggunakan SEEDING_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 dengan NORECOVERY 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 (Transact-SQL).

  14. Pada replika sekunder, bergabunglah dengan AG.

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE);
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  15. 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
    
  16. Ambil cadangan lengkap database.

  17. 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.

  18. 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
    
  19. 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:

  1. Buat replika SYNCHRONOUS_COMMITsekunder primer dan target saat ini .

    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 diatur 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 target ke 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 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:

  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 pendengar dan/atau replika utama baru.

  4. Jika primer asli (N1) online, segera ambil grup ketersediaan AGRScale offline 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.

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.