Bagikan melalui


Membuat dan mengonfigurasi grup ketersediaan untuk SQL Server di Linux

Berlaku untuk:SQL Server di Linux

Tutorial ini menunjukkan cara membuat dan mengonfigurasi grup ketersediaan (AG) untuk SQL Server di Linux. Tidak seperti SQL Server 2016 (13.x) dan versi yang lebih lama di Windows, Anda dapat mengaktifkan AG dengan atau tanpa membuat kluster Pacemaker yang mendasarinya terlebih dahulu. Integrasi dengan kluster, jika diperlukan, terjadi nanti.

Tutorial ini mencakup tugas-tugas berikut:

  • Aktifkan grup ketersediaan.
  • Buat titik akhir dan sertifikat untuk grup ketersediaan.
  • Gunakan SQL Server Management Studio (SSMS) atau Transact-SQL untuk membuat grup ketersediaan.
  • Buat login dan izin SQL Server untuk Pacemaker.
  • Buat sumber daya grup ketersediaan di kluster Pacemaker (Hanya jenis eksternal).

Prasyarat

Sebarkan kluster ketersediaan tinggi Pacemaker seperti yang dijelaskan dalam Menyebarkan kluster Pacemaker untuk SQL Server di Linux.

Mengaktifkan fitur grup ketersediaan

Tidak seperti di Windows, Anda tidak dapat menggunakan PowerShell atau Pengelola Konfigurasi SQL Server untuk mengaktifkan fitur grup ketersediaan (AG). Di Linux, Anda dapat mengaktifkan fitur grup ketersediaan dengan dua cara: menggunakan utilitas mssql-conf , atau mengedit mssql.conf file secara manual.

Penting

Anda harus mengaktifkan fitur AG untuk replika khusus konfigurasi, bahkan di SQL Server Express.

Menggunakan utilitas mssql-conf

Pada prompt, jalankan perintah berikut:

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1

Mengedit file mssql.conf

Anda juga dapat mengubah file mssql.conf, yang terletak di bawah folder /var/opt/mssql. Tambahkan baris berikut:

[hadr]

hadr.hadrenabled = 1

Mulai ulang SQL Server

Setelah mengaktifkan grup ketersediaan, Anda harus memulai ulang SQL Server. Gunakan perintah berikut:

sudo systemctl restart mssql-server

Membuat titik akhir dan sertifikat grup ketersediaan

Grup ketersediaan menggunakan titik akhir TCP untuk komunikasi. Di bawah Linux, SQL Server mendukung titik akhir untuk AG hanya jika Anda menggunakan sertifikat untuk autentikasi. Anda harus memulihkan sertifikat dari satu instans pada semua instans lain yang berpartisipasi sebagai replika dalam AG yang sama. Anda memerlukan proses sertifikat bahkan untuk replika yang hanya untuk konfigurasi.

Anda hanya dapat membuat titik akhir dan memulihkan sertifikat menggunakan Transact-SQL. Anda juga dapat menggunakan sertifikat yang dihasilkan non-SQL Server. Anda juga memerlukan proses untuk mengelola dan mengganti sertifikat apa pun yang kedaluwarsa.

Penting

Jika Anda berencana menggunakan wizard SQL Server Management Studio untuk membuat AG, Anda masih perlu membuat dan memulihkan sertifikat dengan menggunakan Transact-SQL di Linux.

Untuk sintaks penuh pada opsi yang tersedia untuk berbagai perintah (termasuk keamanan), lihat:

Catatan

Meskipun Anda membuat grup ketersediaan, tipe titik akhir menggunakan FOR DATABASE_MIRRORING, karena beberapa aspek mendasar pernah digunakan dengan fitur yang sekarang sudah usang.

Contoh ini membuat sertifikat untuk konfigurasi tiga simpul. Nama instansnya adalah LinAGN1, LinAGN2, dan LinAGN3.

  1. Jalankan skrip berikut di LinAGN1 untuk membuat kunci master, sertifikat, dan endpoint, serta mencadangkan sertifikat. Untuk contoh ini, port TCP khas 5022 digunakan untuk titik akhir.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    GO
    
    CREATE CERTIFICATE LinAGN1_Cert
    WITH SUBJECT = 'LinAGN1 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN1_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP
    (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING
    (
        AUTHENTICATION = CERTIFICATE LinAGN1_Cert,
        ROLE = ALL
    );
    GO
    
  2. Lakukan hal yang sama pada LinAGN2:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    WITH SUBJECT = 'LinAGN2 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN2_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP
    (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING
    (
        AUTHENTICATION = CERTIFICATE LinAGN2_Cert,
        ROLE = ALL
    );
    GO
    
  3. Terakhir, lakukan urutan yang sama pada LinAGN3:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<master-key-password>';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
    WITH SUBJECT = 'LinAGN3 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN3_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP
    (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING
    (
        AUTHENTICATION = CERTIFICATE LinAGN3_Cert,
        ROLE = ALL
    );
    GO
    
  4. Menggunakan scp atau utilitas lain, salin cadangan sertifikat ke setiap simpul yang ingin Anda jadikan bagian dari AG.

    Untuk contoh ini:

    • Salin LinAGN1_Cert.cer ke LinAGN2 dan LinAGN3.
    • Salin LinAGN2_Cert.cer ke LinAGN1 dan LinAGN3.
    • Salin LinAGN3_Cert.cer ke LinAGN1 dan LinAGN2.
  5. Ubah kepemilikan dan grup yang terkait dengan file sertifikat yang disalin menjadi mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Buat login tingkat instans dan pengguna yang terkait dengan LinAGN2 dan LinAGN3 di LinAGN1.

    CREATE LOGIN LinAGN2_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN2_User
    FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN3_User
    FOR LOGIN LinAGN3_Login;
    GO
    

    Perhatian

    Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

  7. Pulihkan LinAGN2_Cert dan LinAGN3_Cert pada LinAGN1. Memiliki sertifikat replika lainnya adalah aspek penting dari komunikasi dan keamanan AG.

    CREATE CERTIFICATE LinAGN2_Cert
        AUTHORIZATION LinAGN2_User
        FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        AUTHORIZATION LinAGN3_User
        FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  8. Berikan login yang terkait dengan LinAGN2 dan LinAGN3 izin untuk menyambungkan ke titik akhir di LinAGN1.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    
  9. Buat login tingkat instans dan pengguna yang terkait dengan LinAGN1 dan LinAGN3 di LinAGN2.

    CREATE LOGIN LinAGN1_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN3_User
    FOR LOGIN LinAGN3_Login;
    GO
    
  10. Pulihkan LinAGN1_Cert dan LinAGN3_Cert pada LinAGN2.

    CREATE CERTIFICATE LinAGN1_Cert
        AUTHORIZATION LinAGN1_User
        FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        AUTHORIZATION LinAGN3_User
        FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  11. Berikan login yang terkait dengan LinAGN1 dan LinAGN3 izin untuk menyambungkan ke titik akhir di LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Buat login tingkat instans dan pengguna yang terkait dengan LinAGN1 dan LinAGN2 di LinAGN3.

    CREATE LOGIN LinAGN1_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN1_User
    FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login
    WITH PASSWORD = '<password>';
    
    CREATE USER LinAGN2_User
    FOR LOGIN LinAGN2_Login;
    GO
    
  13. Pulihkan LinAGN1_Cert dan LinAGN2_Cert di LinAGN3.

    CREATE CERTIFICATE LinAGN1_Cert
        AUTHORIZATION LinAGN1_User
        FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
        AUTHORIZATION LinAGN2_User
        FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
  14. Berikan login yang terkait dengan LinAG1 dan LinAGN2 izin untuk menyambungkan ke titik akhir di LinAGN3.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

Membuat grup ketersediaan

Bagian ini menunjukkan cara menggunakan SQL Server Management Studio (SSMS) atau Transact-SQL untuk membuat grup ketersediaan untuk SQL Server.

Menggunakan SQL Server Management Studio

Bagian ini memperlihatkan cara membuat AG dengan jenis kluster Eksternal menggunakan SSMS dengan Wizard Grup Ketersediaan Baru.

  1. Di SSMS, perluas Always On High Availability, klik kanan Grup Ketersediaan, dan pilih Wizard Grup Ketersediaan Baru.

  2. Pada dialog Pengenalan, pilih Berikutnya.

  3. Dalam dialog Tentukan Opsi Grup Ketersediaan, masukkan nama untuk AG, dan pilih jenis EXTERNAL kluster atau NONE di daftar drop-down. Gunakan EXTERNAL saat Anda menyebarkan Pacemaker. Gunakan NONE untuk skenario khusus, seperti peluasan skala baca. Memilih opsi untuk deteksi kesehatan tingkat database bersifat opsional. Untuk informasi selengkapnya tentang opsi ini, lihat Opsi failover deteksi kesehatan tingkat database grup ketersediaan. Pilih Selanjutnya.

    Cuplikan layar Buat Grup Ketersediaan memperlihatkan jenis kluster.

  4. Dalam dialog Pilih Database, pilih database yang ingin Anda berpartisipasi dalam AG. Setiap database harus memiliki cadangan penuh sebelum Anda dapat menambahkannya ke AG. Pilih Selanjutnya.

  5. Dalam dialog Tentukan Replika, pilih Tambahkan Replika.

  6. Dalam dialog Sambungkan ke Server, masukkan nama instans Linux SQL Server yang akan menjadi replika sekunder, dan kredensial yang akan disambungkan. Pilih Sambungkan.

  7. Ulangi dua langkah sebelumnya untuk instans yang akan berisi replika khusus konfigurasi atau replika sekunder lainnya.

  8. Semua tiga instans muncul pada dialog Menentukan Replika. Jika Anda menggunakan jenis kluster Eksternal, untuk replika sekunder yang merupakan sekunder sejati, pastikan Mode Ketersediaan cocok dengan replika utama dan mode failover diatur ke Eksternal. Untuk replika konfigurasi saja, pilih Mode Ketersediaan 'Konfigurasi Saja'.

    Contoh berikut menunjukkan AG dengan dua replika, jenis kluster Eksternal, dan replika khusus konfigurasi.

    Cuplikan layar Buat Grup Ketersediaan memperlihatkan opsi sekunder yang dapat dibaca.

    Contoh berikut menunjukkan AG dengan dua replika, jenis kluster Tidak Ada, dan replika khusus konfigurasi.

    Cuplikan layar dari Buat Grup Ketersediaan yang menunjukkan halaman Replika.

  9. Jika Anda ingin mengubah preferensi cadangan, pilih tab Preferensi Cadangan. Untuk informasi selengkapnya tentang preferensi pencadangan dengan AG, lihat Mengonfigurasi cadangan pada replika sekunder grup ketersediaan AlwaysOn.

  10. Jika Anda menggunakan sekunder yang dapat dibaca atau membuat AG dengan jenis kluster None untuk skala baca, Anda dapat membuat pendengar dengan memilih tab Listener: Anda juga dapat menambahkan pendengar nanti. Untuk membuat pendengar, pilih opsi Buat pendengar grup ketersediaan dan masukkan nama, port TCP/IP, dan apakah akan menggunakan alamat IP DHCP statis atau yang ditetapkan secara otomatis. Untuk AG dengan tipe kluster 'None', IP seharusnya statis dan harus diatur ke alamat IP primer.

    Cuplikan layar Buat Grup Ketersediaan memperlihatkan opsi pendengar.

  11. Jika Anda membuat pendengar untuk skenario yang dapat dibaca, SSMS memungkinkan pembuatan perutean baca-saja dalam wizard. Anda juga dapat menambahkannya nanti melalui SSMS atau Transact-SQL. Untuk menambahkan perutean baca-saja sekarang:

    1. Pilih tab Perutean Baca-Saja.

    2. Masukkan URL untuk replika baca-saja. URL ini mirip dengan titik akhir, kecuali url tersebut menggunakan port instans, bukan titik akhir.

      1. Pilih setiap URL dan dari bawah, pilih replika yang dapat dibaca. Untuk memilih beberapa, tahan Shift atau pilih-seret.
  12. Pilih Selanjutnya.

  13. Pilih cara menginisialisasi replika sekunder. Defaultnya adalah menggunakan seeding otomatis, yang memerlukan jalur yang sama di semua server yang berpartisipasi dalam AG. Anda juga dapat meminta wizard melakukan pencadangan, penyalinan, dan pemulihan (opsi kedua); minta bergabung jika Anda mencadangkan, menyalin, dan memulihkan database secara manual pada replika (opsi ketiga); atau tambahkan database nanti (opsi terakhir). Seperti halnya sertifikat, jika Anda membuat cadangan dan menyalinnya secara manual, atur izin pada file cadangan pada replika lain. Pilih Selanjutnya.

  14. Pada dialog Validasi, jika wizard tidak mengembalikan Sukses untuk semua pemeriksaan, selidiki lebih lanjut. Peringatan tertentu dapat diterima dan tidak fatal, seperti jika Anda tidak membuat penerima pesan. Pilih Selanjutnya.

  15. Pada dialog Ringkasan, pilih Selesai. Proses untuk membuat AG sekarang dimulai.

  16. Saat pembuatan AG selesai, pilih Tutup pada Hasil. Anda sekarang dapat melihat AG pada replika dalam tampilan manajemen dinamis, dan di bawah folder Ketersediaan Tinggi AlwaysOn di SSMS.

Menggunakan Transact-SQL

Bagian ini menunjukkan contoh pembuatan AG menggunakan Transact-SQL. Anda dapat mengonfigurasi pendengar dan perutean baca-saja setelah membuat AG. Anda dapat memodifikasi AG itu sendiri dengan menggunakan ALTER AVAILABILITY GROUP, tetapi Anda tidak dapat mengubah jenis kluster di SQL Server 2017 (14.x). Jika Anda tidak bermaksud membuat AG dengan jenis kluster Eksternal, Anda harus menghapusnya dan membuatnya kembali dengan jenis kluster Tidak Ada. Untuk informasi selengkapnya dan opsi lainnya, lihat tautan berikut ini:

Contoh A: Dua replika dengan replika khusus konfigurasi (Jenis kluster eksternal)

Contoh ini menunjukkan cara membuat AG dua replika yang menggunakan replika khusus konfigurasi.

  1. Jalankan pernyataan berikut pada simpul yang bertindak sebagai replika utama, dan berisi salinan database yang sepenuhnya dibaca/ditulis. Contoh ini menggunakan seeding otomatis.

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE <DBName>
    REPLICA ON
    N'LinAGN1' WITH (
       ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT
    ),
    N'LinAGN2' WITH (
       ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
       SEEDING_MODE = AUTOMATIC
    ),
    N'LinAGN3' WITH (
       ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
       AVAILABILITY_MODE = CONFIGURATION_ONLY
    );
    GO
    
  2. Di jendela kueri yang terhubung ke replika lain, jalankan perintah berikut untuk menggabungkan replika ke AG dan memulai proses penyemaian dari replika utama ke replika sekunder.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    
  3. Di jendela kueri yang tersambung ke replika konfigurasi saja, jalankan pernyataan berikut untuk menggabungkannya ke AG.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    

Contoh B: Tiga replika dengan pengalihan baca saja (Jenis kluster eksternal)

Contoh ini menunjukkan tiga replika lengkap dan bagaimana Anda dapat mengonfigurasi perutean baca-saja sebagai bagian dari pembuatan AG awal.

  1. Jalankan pernyataan berikut pada simpul yang bertindak sebagai replika utama, dan berisi salinan database yang sepenuhnya dibaca/ditulis. Contoh ini menggunakan seeding otomatis.

    CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE < DBName > REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN2.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433')
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433')
        ),
        N'LinAGN3' WITH (
            ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433')
        )
        LISTENER '<ListenerName>' (
            WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433
        );
    GO
    

    Beberapa hal yang perlu diperhatikan tentang konfigurasi ini:

    • AGName adalah nama AG.
    • DBName adalah nama database yang Anda gunakan dengan AG. Ini juga bisa menjadi daftar nama yang dipisahkan oleh koma.
    • ListenerName adalah nama yang berbeda dari salah satu server atau simpul yang mendasar. Ini terdaftar di DNS bersama dengan IPAddress.
    • IPAddress adalah alamat IP yang terkait dengan ListenerName. Ini juga unik dan tidak sama dengan server atau simpul mana pun. Aplikasi dan pengguna akhir menggunakan ListenerName atau IPAddress untuk menyambungkan ke AG.
      • SubnetMask adalah subnet mask dari IPAddress. Di SQL Server 2019 (15.x) dan versi sebelumnya, nilai ini adalah 255.255.255.255. Di SQL Server 2022 (16.x) dan versi yang lebih baru, nilai ini adalah 0.0.0.0.
  2. Di jendela kueri yang terhubung ke replika lain, jalankan perintah berikut untuk menggabungkan replika ke AG dan memulai proses penyemaian dari replika utama ke replika sekunder.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    
  3. Ulangi Langkah 2 untuk replika ketiga.

Contoh C: Dua replika dengan perutean baca-saja (Jenis kluster tidak ada)

Contoh ini menunjukkan pembuatan konfigurasi dua replika menggunakan jenis kluster Tidak Ada. Gunakan konfigurasi ini untuk skenario skala baca di mana tidak ada failover yang diharapkan. Langkah ini membuat listener yang berfungsi sebagai replika utama, serta perutean hanya-baca, dengan menggunakan fungsionalitas round robin.

  1. Jalankan pernyataan berikut pada simpul yang bertindak sebagai replika utama, dan berisi salinan database yang sepenuhnya dibaca/ditulis. Contoh ini menggunakan penanaman otomatis.

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = NONE)
    FOR DATABASE <DBName> REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
            FAILOVER_MODE = MANUAL,
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(
                ALLOW_CONNECTIONS = READ_WRITE,
                READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
            ),
            SECONDARY_ROLE(
                ALLOW_CONNECTIONS = ALL,
                READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
            )
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
            FAILOVER_MODE = MANUAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                     ('LinAGN1.FullyQualified.Name',
                        'LinAGN2.FullyQualified.Name')
                     )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
        ),
        LISTENER '<ListenerName>' (WITH IP = (
                 '<PrimaryReplicaIPAddress>',
                 '<SubnetMask>'),
                Port = <PortOfListener>
        );
    GO
    

    Dalam contoh ini:

    • AGName adalah nama AG.
    • DBName adalah nama database yang Anda gunakan dengan AG. Ini juga bisa menjadi daftar nama yang dipisahkan oleh koma.
    • PortOfEndpoint adalah nomor port yang digunakan oleh titik akhir yang Anda buat.
      • PortOfInstance adalah nomor port yang digunakan oleh instans SQL Server.
    • ListenerName adalah nama yang berbeda dari replikasi dasar mana pun tetapi sebenarnya tidak digunakan.
    • PrimaryReplicaIPAddress adalah alamat IP replika utama.
      • SubnetMask adalah subnet mask dari IPAddress. Di SQL Server 2019 (15.x) dan versi sebelumnya, nilai ini adalah 255.255.255.255. Di SQL Server 2022 (16.x) dan versi yang lebih baru, nilai ini adalah 0.0.0.0.
  2. Gabungkan replika sekunder dengan AG dan mulai pengisian data otomatis.

    ALTER AVAILABILITY GROUP [<AGName>]
    JOIN WITH (CLUSTER_TYPE = NONE);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>]
    GRANT CREATE ANY DATABASE;
    GO
    

Membuat login dan izin SQL Server untuk Pacemaker

Kluster ketersediaan tinggi Pacemaker yang menggunakan SQL Server di Linux memerlukan akses ke instans SQL Server, dan izin pada AG itu sendiri. Langkah-langkah ini membuat login dan izin terkait, bersama dengan file yang memberi tahu Pacemaker cara mengautentikasi ke SQL Server.

  1. Di jendela kueri yang tersambung ke replika pertama, jalankan skrip berikut:

    CREATE LOGIN PMLogin
        WITH PASSWORD = '<password>';
    GO
    
    GRANT VIEW SERVER STATE TO PMLogin;
    GO
    
    GRANT ALTER, CONTROL, VIEW DEFINITION
    ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin;
    GO
    
  2. Pada Node 1, masukkan perintah:

    sudo emacs /var/opt/mssql/secrets/passwd
    

    Perintah ini membuka editor Emacs.

  3. Masukkan dua baris berikut ke editor:

    PMLogin
    
    <password>
    
  4. Tahan tombol Ctrl , lalu tekan X, lalu C, untuk keluar dan menyimpan file.

  5. Jalankan:

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

    untuk mengunci file.

  6. Ulangi Langkah 1-5 di server lain yang berfungsi sebagai replika.

Membuat sumber daya grup ketersediaan di kluster Pacemaker (Hanya eksternal)

Setelah membuat AG di SQL Server, Anda harus membuat sumber daya yang sesuai di Pacemaker saat Anda menentukan jenis kluster Eksternal. AG memerlukan dua sumber daya: sumber daya grup ketersediaan, dan sumber daya alamat IP. Mengonfigurasi sumber daya alamat IP bersifat opsional jika Anda tidak menggunakan pendengar. Namun, disarankan saat Anda memerlukan fitur pendengar.

Sumber daya AG yang Anda buat adalah jenis sumber daya yang disebut kloning. Sumber daya AG memiliki salinan pada setiap simpul, dan satu sumber daya pengontrol yang disebut master. Master dikaitkan dengan server yang menghosting replika utama. Sumber daya lain menghosting replika sekunder (reguler atau hanya untuk konfigurasi) dan dapat dipromosikan menjadi master dalam failover.

Agen Pacemaker HA v2 (pratinjau)

Di SQL Server 2025 (17.x) dengan Pembaruan Kumulatif (CU) 3 dan versi yang lebih baru, agen Pacemaker HA baru v2 (mssql-server-ha) tersedia untuk Red Hat Enterprise Linux (RHEL) dan Ubuntu.

Agen Pacemaker HA versi 2 memperkenalkan peningkatan keandalan dan kinerja dibandingkan agen sebelumnya, termasuk:

  • Peningkatan performa failover untuk mengurangi waktu failover yang direncanakan dan tidak direncanakan.

  • Dukungan untuk kebijakan failover otomatis yang fleksibel, termasuk konfigurasi batas waktu pemeriksaan kesehatan dan tingkat kondisi kegagalan.

  • Dukungan untuk TLS 1.3 untuk komunikasi antara kluster Pacemaker dan SQL Server.

Agen Pacemaker HA v2 saat ini berada dalam tahap eksperimental. Agen Pacemaker HA (v1) yang ada masih didukung sepenuhnya untuk implementasi produksi.

  1. Buat sumber daya AG di Pacemaker menggunakan agen Pacemaker HA yang ada (v1):

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s promotable notify=true
    

    Dalam contoh ini, NameForAGResource adalah nama unik yang Anda berikan ke sumber daya kluster ini untuk AG, dan AGName merupakan nama AG yang Anda buat.

    Untuk menggunakan agen Pacemaker HA v2, buat sumber daya AG menggunakan agv2 agen sumber daya:

    sudo pcs resource create <NameForAGResource> ocf:mssql:agv2 ag_name=<AGName> meta failure-timeout=30s promotable notify=true
    

    Penyebaran baru pada SQL Server 2025 (17.x) dapat mengevaluasi agen HA Pacemaker v2. Penyebaran produksi yang ada harus ditingkatkan jika sesuai.

    Saat meng-upgrade atau menyebarkan Pacemaker HA agent v2, buat AG resource baru menggunakan agen agv2 daripada agen yang lama ag. Jika Anda sudah mengonfigurasi sumber daya AG yang ada, hapus dan buat sumber daya baru menggunakan agv2:

    sudo pcs resource delete <NameForAGResource>
    

    Operasi ini menghentikan sementara sinkronisasi AG saat sumber daya sedang dibuat ulang. Menghapus dan membuat ulang sumber daya Pacemaker AG tidak menghapus AG. Setelah sumber daya dibuat ulang, Pacemaker melanjutkan manajemen dan sinkronisasi AG secara otomatis.

  2. Buat sumber daya alamat IP untuk AG yang Anda kaitkan dengan fungsionalitas pendengar.

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    Dalam contoh ini, NameForIPResource adalah nama unik untuk sumber daya IP, dan IPAddress merupakan alamat IP statis yang Anda tetapkan ke sumber daya.

  3. Untuk memastikan bahwa alamat IP dan sumber daya AG berjalan pada simpul yang sama, konfigurasikan batasan kolokasi.

    sudo pcs constraint colocation add <NameForIPResource> with promoted <NameForAGResource>-clone INFINITY
    

    Dalam contoh ini, NameForIPResource adalah nama untuk sumber daya IP, dan NameForAGResource merupakan nama untuk sumber daya AG.

  4. Buat batasan pemesanan untuk memastikan bahwa sumber daya AG sudah siap dan berjalan sebelum alamat IP. Meskipun batasan kolokasi menyiratkan batasan pemesanan, langkah ini memberlakukannya.

    sudo pcs constraint order promote <NameForAGResource>-clone then start <NameForIPResource>
    

    Dalam contoh ini, NameForIPResource adalah nama untuk sumber daya IP, dan NameForAGResource merupakan nama untuk sumber daya AG.