Mengonfigurasi Grup Ketersediaan AlwaysOn SQL Server untuk ketersediaan tinggi di Linux

Berlaku untuk:SQL Server - Linux

Artikel ini menjelaskan cara membuat grup ketersediaan AlwaysOn (AG) SQL Server untuk ketersediaan tinggi di Linux. Ada dua jenis konfigurasi untuk AG. Konfigurasi ketersediaan tinggi menggunakan manajer kluster untuk memberikan kelangsungan bisnis. Konfigurasi ini juga dapat mencakup replika skala baca. Dokumen ini menjelaskan cara membuat AG untuk ketersediaan tinggi.

Anda juga dapat membuat AG tanpa manajer kluster untuk skala baca. AG untuk skala baca hanya menyediakan replika baca-saja untuk peluasan skala performa. Ini tidak memberikan ketersediaan tinggi. Untuk membuat AG untuk skala baca, lihat Mengonfigurasi Grup Ketersediaan SQL Server untuk skala baca di Linux.

Konfigurasi yang menjamin ketersediaan tinggi dan perlindungan data memerlukan dua atau tiga replika penerapan sinkron. Dengan tiga replika sinkron, AG dapat pulih secara otomatis meskipun satu server tidak tersedia. Untuk informasi selengkapnya, lihat Ketersediaan tinggi dan perlindungan data untuk konfigurasi grup ketersediaan.

Semua server harus fisik atau virtual, dan server virtual harus berada di platform virtualisasi yang sama. Persyaratan ini karena agen anggar spesifik platform. Lihat Kebijakan untuk Kluster Tamu.

Peta Strategi

Langkah-langkah untuk membuat AG di server Linux untuk ketersediaan tinggi berbeda dari langkah-langkah pada kluster failover Windows Server. Daftar berikut ini menjelaskan langkah-langkah tingkat tinggi:

  1. Panduan instalasi untuk SQL Server di Linux.

    Penting

    Ketiga server di AG harus berada di platform yang sama - fisik atau virtual - karena ketersediaan tinggi Linux menggunakan agen pagar untuk mengisolasi sumber daya di server. Agen anggar khusus untuk setiap platform.

  2. Buat AG. Langkah ini tercakup dalam artikel saat ini.

  3. Konfigurasikan manajer sumber daya kluster, seperti Pacemaker.

    Cara mengonfigurasi manajer sumber daya kluster tergantung pada distribusi Linux tertentu. Lihat tautan berikut untuk instruksi spesifik distribusi:

    Penting

    Lingkungan produksi memerlukan agen anggar untuk ketersediaan tinggi. Contoh dalam artikel ini tidak menggunakan agen anggar. Mereka hanya untuk pengujian dan validasi.

    Kluster Pacemaker menggunakan anggar untuk mengembalikan kluster ke status yang diketahui. Cara mengonfigurasi anggar tergantung pada distribusi dan lingkungan. Saat ini, anggar tidak tersedia di beberapa lingkungan cloud. Untuk informasi selengkapnya, lihat Kebijakan Dukungan untuk Kluster Ketersediaan Tinggi RHEL - Platform Virtualisasi.

    Untuk SLES, lihat Ekstensi Ketersediaan Tinggi SUSE Linux Enterprise.

  4. Tambahkan AG sebagai sumber daya di kluster.

    Cara menambahkan AG sebagai sumber daya dalam kluster tergantung pada distribusi Linux. Lihat tautan berikut untuk instruksi spesifik distribusi:

Pertimbangan untuk beberapa Antarmuka Jaringan (NIC)

Untuk informasi tentang menyiapkan grup ketersediaan untuk server dengan beberapa NIC, lihat bagian yang relevan untuk:

Prasyarat

Sebelum membuat grup ketersediaan, Anda perlu:

  • Atur lingkungan Anda sehingga semua server yang akan menghosting replika ketersediaan dapat berkomunikasi.
  • Instal SQL Server.

Catatan

Di Linux, Anda harus membuat grup ketersediaan sebelum menambahkannya sebagai sumber daya kluster yang akan dikelola oleh kluster. Dokumen ini menyediakan contoh yang membuat grup ketersediaan. Untuk instruksi khusus distribusi untuk membuat kluster dan menambahkan grup ketersediaan sebagai sumber daya kluster, lihat tautan di bawah "Langkah berikutnya."

  1. Perbarui nama komputer untuk setiap host.

    Setiap nama SQL Server harus:

    • 15 karakter atau kurang.
    • Unik dalam jaringan.

    Untuk mengatur nama komputer, edit /etc/hostname. Skrip berikut memungkinkan Anda mengedit /etc/hostname dengan vi:

    sudo vi /etc/hostname
    
  2. Konfigurasikan file host.

    Catatan

    Jika nama host terdaftar dengan alamat IP mereka di server DNS, Anda tidak perlu melakukan langkah-langkah berikut. Validasi bahwa semua simpul yang dimaksudkan untuk menjadi bagian dari konfigurasi grup ketersediaan dapat berkomunikasi satu sama lain. (Ping ke nama host harus membalas dengan alamat IP yang sesuai.) Selain itu, pastikan bahwa /etc/hosts file tidak berisi catatan yang memetakan alamat IP localhost 127.0.0.1 dengan nama host simpul.

    File host di setiap server berisi alamat IP dan nama semua server yang akan berpartisipasi dalam grup ketersediaan.

    Perintah berikut mengembalikan alamat IP server saat ini:

    sudo ip addr show
    

    Perbarui /etc/hosts. Skrip berikut memungkinkan Anda mengedit /etc/hosts dengan vi:

    sudo vi /etc/hosts
    

    Contoh berikut menunjukkan /etc/hosts pada node1 dengan penambahan untuk node1, , dan .node3node2 Dalam sampel ini, node1 mengacu pada server yang menghosting replika utama, dan node2 dan node3 merujuk ke server yang menghosting replika sekunder.

    127.0.0.1    localhost localhost4 localhost4.localdomain4
    ::1          localhost localhost6 localhost6.localdomain6
    10.128.18.12 node1
    10.128.16.77 node2
    10.128.15.33 node3
    

Instal SQL Server

Instal SQL Server. Tautan berikut menunjuk ke instruksi penginstalan SQL Server untuk berbagai distribusi:

Mengaktifkan grup ketersediaan AlwaysOn

Aktifkan grup ketersediaan AlwaysOn untuk setiap simpul yang menghosting instans SQL Server, lalu mulai ulang mssql-server. Jalankan skrip berikut:

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

Mengaktifkan sesi peristiwa AlwaysOn_health

Anda dapat secara opsional mengaktifkan peristiwa yang diperluas (XE) untuk membantu diagnosis akar penyebab saat Anda memecahkan masalah grup ketersediaan. Jalankan perintah berikut pada setiap instans SQL Server:

ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

Untuk informasi selengkapnya tentang sesi XE ini, lihat Mengonfigurasi peristiwa yang diperluas untuk grup ketersediaan AlwaysOn.

Membuat sertifikat

Layanan SQL Server di Linux menggunakan sertifikat untuk mengautentikasi komunikasi antara titik akhir pencerminan.

Skrip Transact-SQL berikut membuat kunci master dan sertifikat. Kemudian mencadangkan sertifikat dan mengamankan file dengan kunci privat. Perbarui skrip dengan kata sandi yang kuat. Koneksi ke instans SQL Server utama. Untuk membuat sertifikat, jalankan skrip Transact-SQL berikut:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
BACKUP CERTIFICATE dbm_certificate
   TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
   WITH PRIVATE KEY (
           FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
           ENCRYPTION BY PASSWORD = '**<Private_Key_Password>**'
        );

Pada titik ini, replika SQL Server utama Anda memiliki sertifikat di /var/opt/mssql/data/dbm_certificate.cer dan kunci privat di var/opt/mssql/data/dbm_certificate.pvk. Salin kedua file ini ke lokasi yang sama di semua server yang akan menghosting replika ketersediaan. Gunakan pengguna mssql, atau berikan izin kepada pengguna mssql untuk mengakses file-file ini.

Misalnya, pada server sumber, perintah berikut menyalin file ke komputer target. **<node2>** Ganti nilai dengan nama instans SQL Server yang akan menghosting replika.

cd /var/opt/mssql/data
scp dbm_certificate.* root@**<node2>**:/var/opt/mssql/data/

Pada setiap server target, berikan izin kepada pengguna mssql untuk mengakses sertifikat.

cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

Membuat sertifikat di server sekunder

Skrip Transact-SQL berikut membuat kunci master dan sertifikat dari cadangan yang Anda buat di replika SQL Server utama. Perbarui skrip dengan kata sandi yang kuat. Kata sandi dekripsi adalah kata sandi yang sama dengan yang Anda gunakan untuk membuat file .pvk di langkah sebelumnya. Untuk membuat sertifikat, jalankan skrip berikut di semua server sekunder:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';
CREATE CERTIFICATE dbm_certificate
    FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
           FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
           DECRYPTION BY PASSWORD = '**<Private_Key_Password>**'
        );

Membuat titik akhir pencerminan database pada semua replika

Titik akhir pencerminan database menggunakan Protokol Kontrol Transmisi (TCP) untuk mengirim dan menerima pesan antara instans server yang berpartisipasi dalam sesi pencerminan database atau replika ketersediaan host. Titik akhir pencerminan database mendengarkan nomor port TCP yang unik.

Skrip Transact-SQL berikut membuat titik akhir mendengarkan bernama Hadr_endpoint untuk grup ketersediaan. Ini memulai titik akhir dan memberikan izin koneksi ke sertifikat yang Anda buat. Sebelum Anda menjalankan skrip, ganti nilai di antara **< ... >**. Secara opsional Anda dapat menyertakan alamat LISTENER_IP = (0.0.0.0)IP . Alamat IP pendengar harus berupa alamat IPv4. Anda juga dapat menggunakan 0.0.0.0.

Perbarui skrip Transact-SQL berikut untuk lingkungan Anda di semua instans SQL Server:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = **<5022>**)
    FOR DATABASE_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

Catatan

Jika Anda menggunakan SQL Server Express Edition pada satu simpul untuk menghosting replika khusus konfigurasi, satu-satunya nilai yang valid untuk ROLE adalah WITNESS. Jalankan skrip berikut di SQL Server Express Edition:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = **<5022>**)
    FOR DATABASE_MIRRORING (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );

ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

Port TCP pada firewall harus terbuka untuk port pendengar.

Penting

Untuk rilis SQL Server 2017, satu-satunya metode autentikasi yang didukung untuk titik akhir pencerminan database adalah CERTIFICATE. Opsi WINDOWS akan diaktifkan dalam rilis mendatang.

Untuk informasi selengkapnya, lihat Titik akhir pencerminan database (SQL Server).

Membuat AG

Contoh di bagian ini menjelaskan cara membuat grup ketersediaan menggunakan Transact-SQL. Anda juga dapat menggunakan Wizard Grup Ketersediaan SQL Server Management Studio. Saat Anda membuat AG dengan wizard, AG mengembalikan kesalahan saat Anda bergabung dengan replika ke AG. Untuk memperbaikinya, berikan ALTER, CONTROL, dan VIEW DEFINITIONS ke alat pacu jantung pada AG pada semua replika. Setelah izin diberikan pada replika utama, gabungkan simpul ke AG melalui wizard, tetapi agar HA berfungsi dengan baik, berikan izin pada semua replika.

Untuk konfigurasi ketersediaan tinggi yang memastikan failover otomatis, AG memerlukan setidaknya tiga replika. Salah satu konfigurasi berikut dapat mendukung ketersediaan tinggi:

Untuk informasi, lihat Ketersediaan tinggi dan perlindungan data untuk konfigurasi grup ketersediaan.

Catatan

Grup ketersediaan dapat mencakup replika sinkron atau asinkron tambahan.

Buat AG untuk ketersediaan tinggi di Linux. Gunakan CREATE AVAILABILITY GROUP dengan CLUSTER_TYPE = EXTERNAL.

  • Grup ketersediaan: CLUSTER_TYPE = EXTERNAL.

    Menentukan bahwa entitas kluster eksternal mengelola AG. Pacemaker adalah contoh entitas kluster eksternal. Ketika jenis kluster AG eksternal,

  • Atur replika primer dan sekunder: FAILOVER_MODE = EXTERNAL.

    Menentukan bahwa replika berinteraksi dengan manajer kluster eksternal, seperti Pacemaker.

Skrip Transact-SQL berikut membuat AG untuk ketersediaan tinggi bernama ag1. Skrip mengonfigurasi replika AG dengan SEEDING_MODE = AUTOMATIC. Pengaturan ini menyebabkan SQL Server membuat database secara otomatis di setiap server sekunder. Perbarui skrip berikut untuk lingkungan Anda. <node1>Ganti nilai , <node2>, atau <node3> dengan nama instans SQL Server yang menghosting replika. <5022> Ganti dengan port yang Anda tetapkan untuk titik akhir pencerminan data. Untuk membuat AG, jalankan Transact-SQL berikut pada instans SQL Server yang menghosting replika utama.

Penting

Dalam implementasi agen sumber daya SQL Server saat ini, nama simpul harus cocok dengan ServerName properti dari instans Anda. Misalnya, jika nama node Anda adalah node1, pastikan SERVERPROPERTY('ServerName') mengembalikan node1 di instans SQL Server Anda. Jika ada ketidakcocokan, replika Anda akan masuk ke status penyelesaian setelah sumber daya pacemaker dibuat.

Skenario di mana aturan ini penting adalah saat menggunakan nama domain yang sepenuhnya memenuhi syarat. Misalnya, jika Anda menggunakan node1.yourdomain.com sebagai nama simpul selama penyiapan kluster, pastikan SERVERPROPERTY('ServerName') mengembalikan node1.yourdomain.com, dan bukan hanya node1. Solusi yang mungkin untuk masalah ini adalah:

  • Ganti nama host Anda menjadi FQDN dan gunakan sp_dropserver dan sp_addserver simpan prosedur untuk memastikan metadata di SQL Server cocok dengan perubahan.
  • addr Gunakan opsi dalam pcs cluster auth perintah untuk mencocokkan nama simpul dengan nilai SERVERPROPERTY('ServerName') dan gunakan IP statis sebagai alamat simpul.

Jalankan hanya salah satu skrip berikut:

Membuat grup ketersediaan dengan tiga replika sinkron

Buat AG dengan tiga replika sinkron:

CREATE AVAILABILITY GROUP [ag1]
      WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
      FOR REPLICA ON
         N'<node1>'
               WITH (
            ENDPOINT_URL = N'tcp://<node1>:<5022>',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC
            ),
         N'<node2>'
         WITH (
            ENDPOINT_URL = N'tcp://<node2>:<5022>',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC
            ),
         N'<node3>'
         WITH(
            ENDPOINT_URL = N'tcp://<node3>:<5022>',
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC
            );

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Penting

Setelah Anda menjalankan skrip sebelumnya untuk membuat AG dengan tiga replika sinkron, jangan jalankan skrip berikut:

Membuat grup ketersediaan dengan dua replika sinkron dan replika konfigurasi

Buat AG dengan dua replika sinkron dan replika konfigurasi:

Penting

Arsitektur ini memungkinkan SQL Server edisi apa pun untuk menghosting replika ketiga. Misalnya, replika ketiga dapat dihosting di SQL Server Express Edition. Pada Edisi Ekspres, satu-satunya jenis titik akhir yang valid adalah WITNESS.

CREATE AVAILABILITY GROUP [ag1]
   WITH (CLUSTER_TYPE = EXTERNAL)
   FOR REPLICA ON
      N'<node1>' WITH (
         ENDPOINT_URL = N'tcp://<node1>:<5022>',
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
         FAILOVER_MODE = EXTERNAL,
         SEEDING_MODE = AUTOMATIC
         ),
      N'<node2>' WITH (
         ENDPOINT_URL = N'tcp://<node2>:<5022>',
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
         FAILOVER_MODE = EXTERNAL,
         SEEDING_MODE = AUTOMATIC
         ),
      N'<node3>' WITH (
         ENDPOINT_URL = N'tcp://<node3>:<5022>',
         AVAILABILITY_MODE = CONFIGURATION_ONLY
         );
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Membuat grup ketersediaan dengan dua replika sinkron

Membuat AG dengan dua replika sinkron

Sertakan dua replika dengan mode ketersediaan sinkron. Misalnya, skrip berikut membuat AG yang disebut ag1. node1 dan node2 replika host dalam mode sinkron, dengan seeding otomatis dan failover otomatis.

Penting

Hanya jalankan skrip berikut untuk membuat AG dengan dua replika sinkron. Jangan jalankan skrip berikut jika Anda menjalankan skrip sebelumnya.

CREATE AVAILABILITY GROUP [ag1]
   WITH (CLUSTER_TYPE = EXTERNAL)
   FOR REPLICA ON
   N'node1' WITH (
      ENDPOINT_URL = N'tcp://node1:5022',
      AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
      FAILOVER_MODE = EXTERNAL,
      SEEDING_MODE = AUTOMATIC
   ),
   N'node2' WITH (
      ENDPOINT_URL = N'tcp://node2:5022',
      AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
      FAILOVER_MODE = EXTERNAL,
      SEEDING_MODE = AUTOMATIC
   );

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Anda juga dapat mengonfigurasi AG dengan CLUSTER_TYPE=EXTERNAL menggunakan SQL Server Management Studio atau PowerShell.

Menggabungkan replika sekunder ke AG

Pengguna Pacemaker memerlukan ALTERizin , , CONTROLdan VIEW DEFINITION pada grup ketersediaan di semua replika. Untuk memberikan izin, jalankan skrip Transact-SQL berikut setelah grup ketersediaan dibuat pada replika utama dan setiap replika sekunder segera setelah ditambahkan ke grup ketersediaan. Sebelum Anda menjalankan skrip, ganti <pacemakerLogin> dengan nama akun pengguna Pacemaker. Jika Anda tidak memiliki login untuk Pacemaker, buat login sql server untuk Pacemaker.

GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO <pacemakerLogin>
GRANT VIEW SERVER STATE TO <pacemakerLogin>

Skrip Transact-SQL berikut menggabungkan instans SQL Server ke AG bernama ag1. Perbarui skrip untuk lingkungan Anda. Pada setiap instans SQL Server yang menghosting replika sekunder, jalankan Transact-SQL berikut untuk bergabung dengan AG.

ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);

ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Menambahkan database ke Grup Ketersediaan

Pastikan database yang Anda tambahkan ke grup ketersediaan berada dalam model pemulihan penuh dan memiliki cadangan log yang valid. Jika ini adalah database pengujian atau database yang baru dibuat, ambil cadangan database. Pada SQL Server utama, jalankan skrip Transact-SQL berikut untuk membuat dan mencadangkan database yang disebut db1:

CREATE DATABASE [db1];
ALTER DATABASE [db1] SET RECOVERY FULL;
BACKUP DATABASE [db1]
   TO DISK = N'/var/opt/mssql/data/db1.bak';

Pada replika SQL Server utama, jalankan skrip Transact-SQL berikut untuk menambahkan database yang dipanggil db1 ke grup ketersediaan yang disebut ag1:

ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];

Memverifikasi bahwa database dibuat di server sekunder

Pada setiap replika SQL Server sekunder, jalankan kueri berikut untuk melihat apakah db1 database dibuat dan disinkronkan:

SELECT * FROM sys.databases WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database', synchronization_state_desc FROM sys.dm_hadr_database_replica_states;

Penting

Setelah membuat AG, Anda harus mengonfigurasi integrasi dengan teknologi kluster seperti Pacemaker untuk ketersediaan tinggi. Untuk konfigurasi skala baca menggunakan AG, dimulai dengan SQL Server 2017 (14.x), menyiapkan kluster tidak diperlukan.

Jika Anda mengikuti langkah-langkah dalam dokumen ini, Anda memiliki AG yang belum diklusterkan. Langkah selanjutnya adalah menambahkan kluster. Konfigurasi ini berlaku untuk skenario read-scale/load balancing, tidak lengkap untuk ketersediaan tinggi. Untuk ketersediaan tinggi, Anda perlu menambahkan AG sebagai sumber daya kluster. Lihat Konten terkait untuk instruksi.

Keterangan

Penting

Setelah mengonfigurasi kluster dan menambahkan AG sebagai sumber daya kluster, Anda tidak dapat menggunakan Transact-SQL untuk melakukan failover pada sumber daya AG. Sumber daya kluster SQL Server di Linux tidak digabungkan seketat dengan sistem operasi seperti yang ada di Windows Server Failover Cluster (WSFC). Layanan SQL Server tidak mengetahui keberadaan kluster. Semua orkestrasi dilakukan melalui alat manajemen kluster. Di RHEL atau Ubuntu gunakan pcs. Dalam SLES gunakan crm.

Penting

Jika AG adalah sumber daya kluster, ada masalah yang diketahui dalam rilis saat ini di mana failover paksa dengan kehilangan data ke replika asinkron tidak berfungsi. Ini akan diperbaiki dalam rilis mendatang. Failover manual atau otomatis ke replika sinkron berhasil.