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.
  • Membuat titik akhir dan sertifikat 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, titik akhir untuk AG hanya didukung jika sertifikat digunakan untuk autentikasi. Anda harus memulihkan sertifikat dari satu instans pada semua instans lain yang berpartisipasi sebagai replika dalam AG yang sama. Proses sertifikat diperlukan bahkan untuk replika khusus 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, jenis titik akhir menggunakan FOR DATABASE_MIRRORING, karena beberapa aspek yang mendasar pernah dibagikan dengan fitur yang sekarang tidak digunakan lagi.

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

  1. Jalankan skrip berikut untuk LinAGN1 membuat kunci master, sertifikat, dan titik akhir, dan cadangkan 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 akan menjadi 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 dan LinAGN2_Cert aktifkan .LinAGN3_CertLinAGN1 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 dan LinAGN1_Cert aktifkan .LinAGN3_CertLinAGN2

    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 dan LinAGN1_Cert aktifkan .LinAGN2_CertLinAGN3

    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 Ketersediaan Tinggi AlwaysOn, 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 grup ketersediaan, dan pilih jenis EXTERNAL kluster atau NONE di daftar dropdown. 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 akan 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 akan menjadi sekunder sejati, pastikan Mode Ketersediaan sesuai dengan replika utama dan mode failover disetel ke Eksternal. Untuk replika khusus konfigurasi, 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 Buat Grup Ketersediaan memperlihatkan 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.

    3. Pilih setiap URL dan dari bawah, pilih replika yang dapat dibaca. Untuk memilih beberapa, tahan SHIFT atau pilih-seret.

  12. Pilih Selanjutnya.

  13. Pilih bagaimana replika sekunder diinisialisasi. 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 telah 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 semuanya tidak kembali sebagai Berhasil, selidiki. Beberapa peringatan dapat diterima dan tidak fatal, seperti jika Anda tidak membuat pendengar. 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 akan 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 perutean 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 akan 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 grup ketersediaan.
    • DBName adalah nama database yang Anda gunakan dengan grup ketersediaan. 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 atau ListenerNameIPAddress 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 tersambung ke replika lain, jalankan pernyataan berikut untuk menambahkan replika ke dalam 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 akan bertindak sebagai replika utama, dan berisi salinan database yang sepenuhnya dibaca/ditulis. Contoh ini menggunakan seeding 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 grup ketersediaan.
    • DBName adalah nama database yang Anda gunakan dengan grup ketersediaan. 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. Bergabunglah dengan replika sekunder ke AG dan mulai seeding 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 grup ketersediaan itu sendiri. Langkah-langkah ini membuat login dan izin terkait, bersama dengan file yang memberi tahu Pacemaker cara masuk 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 grup ketersediaan di SQL Server, Anda harus membuat sumber daya yang sesuai di Pacemaker saat Anda menentukan jenis kluster Eksternal. Dua sumber daya dikaitkan dengan grup ketersediaan: grup ketersediaan itu sendiri, dan alamat IP. Mengonfigurasi sumber daya alamat IP bersifat opsional jika Anda tidak menggunakan fungsi pendengar, tetapi disarankan.

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 khusus konfigurasi) dan dapat dipromosikan ke master dalam failover.

  1. Buat sumber daya AG dengan sintaks berikut:

    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.

  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.

Langkah selanjutnya

Dalam tutorial ini, Anda mempelajari cara membuat dan mengonfigurasi grup ketersediaan untuk SQL Server di Linux. Anda mempelajari cara untuk:

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

Untuk sebagian besar tugas administrasi AG, termasuk peningkatan dan failover, lihat: