Membuat dan mengonfigurasi grup ketersediaan untuk SQL Server di Linux

Berlaku untuk:SQL Server - Linux

Tutorial ini mencakup cara membuat dan mengonfigurasi grup ketersediaan (AG) untuk SQL Server di Linux. Tidak seperti SQL Server 2016 (13.x) dan yang lebih lama di Windows, Anda dapat mengaktifkan AG dengan atau tanpa membuat kluster Pacemaker yang mendasarinya terlebih dahulu. Integrasi dengan kluster, jika diperlukan, tidak dilakukan sampai 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 bawah Linux, Anda harus menggunakan mssql-conf untuk mengaktifkan fitur. Ada dua cara untuk mengaktifkan fitur grup ketersediaan: gunakan mssql-conf utilitas, atau edit mssql.conf file secara manual.

Penting

Fitur AG harus diaktifkan untuk replika khusus konfigurasi, bahkan di SQL Server Express.

Menggunakan utilitas mssql-conf

Pada perintah, terbitkan perintah berikut:

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

Mengedit file mssql.conf

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

[hadr]

hadr.hadrenabled = 1

Mulai ulang SQL Server

Setelah mengaktifkan grup ketersediaan, seperti pada Windows, Anda harus memulai ulang SQL Server, menggunakan 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 akan berpartisipasi sebagai replika dalam AG yang sama. Proses sertifikat diperlukan bahkan untuk replika khusus konfigurasi.

Membuat titik akhir dan memulihkan sertifikat hanya dapat dilakukan melalui 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 = '<StrongPassword>';
    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 = '<StrongPassword>';
    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 = '<StrongPassword>';
    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 = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  7. Pulihkan dan LinAGN3_Cert aktifkan .LinAGN2_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 LinAG2 dan LinAGN3 izin untuk menyambungkan ke titik akhir di LinAGN1.

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

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  10. Pulihkan dan LinAGN3_Cert aktifkan .LinAGN1_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 LinAG1 dan LinAGN3 izin untuk menyambungkan ke titik akhir di LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    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 = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
  13. Pulihkan dan LinAGN2_Cert aktifkan .LinAGN1_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;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

Membuat grup ketersediaan

Bagian ini mencakup 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. Eksternal harus digunakan ketika Pacemaker akan disebarkan. Tidak ada 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.

    Screenshot of Create Availability Group showing cluster type.

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

  5. Dalam dialog Tentukan Replika, pilih Tambahkan Replika.

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

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

  8. Ketiga instans sekarang harus dicantumkan pada dialog Tentukan Replika. Jika menggunakan jenis kluster Eksternal, untuk replika sekunder yang akan menjadi sekunder sejati, pastikan Mode Ketersediaan cocok dengan replika utama dan mode failover diatur 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.

    Screenshot of Create Availability Group showing the readable secondary option.

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

    Screenshot of Create Availability Group showing the Replicas page.

  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 menggunakan sekunder yang dapat dibaca atau membuat AG dengan jenis kluster Tidak Ada untuk skala baca, Anda dapat membuat pendengar dengan memilih tab Listener. Pendengar juga dapat ditambahkan 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. Ingatlah bahwa untuk AG dengan jenis kluster Tidak Ada, IP harus statis dan diatur ke alamat IP utama.

    Screenshot of Create Availability Group showing the listener option.

  11. Jika pendengar dibuat untuk skenario yang dapat dibaca, SSMS 17.3 atau yang lebih baru memungkinkan pembuatan perutean baca-saja dalam wizard. Ini juga dapat ditambahkan 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 akan 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, izin pada file cadangan perlu diatur 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. Pendengar dan perutean baca-saja dapat dikonfigurasi setelah AG dibuat. AG itu sendiri dapat dimodifikasi dengan ALTER AVAILABILITY GROUP, tetapi mengubah jenis kluster tidak dapat dilakukan 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. Informasi selengkapnya dan opsi lainnya dapat ditemukan di tautan berikut:

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 pada simpul yang akan menjadi replika utama yang 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 tersambung ke replika lain, jalankan yang berikut ini untuk bergabung dengan replika ke AG dan mulai proses penyemaian dari replika utama ke 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, gabungkan 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 perutean baca-saja dapat dikonfigurasi sebagai bagian dari pembuatan AG awal.

  1. Jalankan pada simpul yang akan menjadi replika utama yang 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 digunakan dengan grup ketersediaan. Ini juga bisa menjadi daftar nama yang dipisahkan oleh koma.
    • ListenerName adalah nama yang berbeda dari salah satu server/simpul yang mendasar. Ini akan terdaftar di DNS bersama dengan IPAddress.
    • IPAddress adalah alamat IP yang terkait dengan ListenerName. Ini juga unik dan tidak sama dengan server/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, ini adalah 255.255.255.255. Di SQL Server 2022 (16.x) dan versi yang lebih baru, ini adalah 0.0.0.0.
  2. Di jendela kueri yang tersambung ke replika lain, jalankan yang berikut ini untuk bergabung dengan replika ke AG dan mulai proses penyemaian dari replika utama ke 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. Ini digunakan untuk skenario skala baca di mana tidak ada failover yang diharapkan. Ini membuat pendengar yang sebenarnya adalah replika utama, dan perutean baca-saja, menggunakan fungsionalitas round robin.

  1. Jalankan pada simpul yang akan menjadi replika utama yang 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

Mana:

  • AGName adalah nama grup ketersediaan.
  • DBName adalah nama database yang akan digunakan dengan grup ketersediaan. Ini juga bisa menjadi daftar nama yang dipisahkan oleh koma.
  • PortOfEndpoint adalah nomor port yang digunakan oleh titik akhir yang dibuat.
  • PortOfInstance adalah nomor port yang digunakan oleh instans SQL Server.
  • ListenerName adalah nama yang berbeda dari replika yang mendasar 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, ini adalah 255.255.255.255. Di SQL Server 2022 (16.x) dan versi yang lebih baru, ini adalah 0.0.0.0.
  1. 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 mendasari 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 ='<StrongPassword>';
    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
    

    Ini membuka editor Emacs.

  3. Masukkan dua baris berikut ke editor:

    PMLogin
    
    <StrongPassword>
    
  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 akan berfungsi sebagai replika.

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

Setelah grup ketersediaan dibuat di SQL Server, sumber daya yang sesuai harus dibuat di Pacemaker, ketika jenis kluster Eksternal ditentukan. Ada dua sumber daya yang terkait dengan AG: AG 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 pada dasarnya memiliki salinan pada setiap simpul, dan ada satu sumber daya pengendali 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.

Catatan

Komunikasi bebas bias

Artikel ini berisi referensi ke istilah budak, istilah yang dianggap menyinggung Microsoft saat digunakan dalam konteks ini. Istilah muncul dalam artikel ini karena saat ini muncul di perangkat lunak. Ketika istilah dihapus dari perangkat lunak, kami akan menghapusnya dari artikel.

  1. Buat sumber daya AG dengan sintaks berikut:

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

    Di mana NameForAGResource adalah nama unik yang diberikan untuk sumber daya kluster ini untuk AG, dan AGName merupakan nama AG yang dibuat.

    Pada RHEL 7.7 dan Ubuntu 18.04, dan versi yang lebih baru, Anda mungkin mengalami peringatan dengan penggunaan --master, atau kesalahan seperti sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'. Untuk menghindari situasi ini, gunakan:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failover-timeout=30s master notify=true
    
  2. Buat sumber daya alamat IP untuk AG yang akan dikaitkan dengan fungsionalitas pendengar.

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

    Di mana NameForIPResource adalah nama unik untuk sumber daya IP, dan IPAddress merupakan alamat IP statis yang ditetapkan ke sumber daya.

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

    sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
    

    Di mana 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. Sementara batasan kolokasi menyiratkan batasan pemesanan, ini menegakkannya.

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

    Di mana 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: