Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server di 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. Artikel ini menjelaskan cara membuat Availability Group (AG) untuk ketersediaan tinggi.
Anda juga dapat membuat AG tanpa pengelola kluster untuk skala baca. AG untuk read scale hanya menyediakan replika read-only untuk meningkatkan skala performa. Ini tidak menyediakan 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 komit 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 ada karena agen anggar spesifik platform. Lihat Kebijakan untuk Kluster Tamu.
Langkah-langkah penginstalan
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:
Panduan penginstalan untuk SQL Server di Linux.
Penting
Ketiga server di AG harus berada pada platform yang sama — secara fisik atau virtual — karena ketersediaan tinggi pada Linux menggunakan fencing agents untuk mengisolasi sumber daya di server. Agen "fencing" khusus untuk setiap platform.
Buat AG. Langkah ini tercakup dalam artikel saat ini.
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 pembatas untuk ketersediaan tinggi. Contoh dalam artikel ini tidak menggunakan agen pengaman. Hanya untuk pengujian dan validasi.
Kluster Pacemaker menggunakan isolasi untuk mengembalikan kluster ke keadaan yang diketahui. Cara mengonfigurasi fencing tergantung pada distribusi dan lingkungan. Saat ini, pengamanan tidak tersedia di beberapa lingkungan cloud. Untuk informasi selengkapnya, lihat Kebijakan Dukungan untuk Kluster Ketersediaan Tinggi RHEL - Platform Virtualisasi.
Untuk SLES, lihat SUSE Linux Enterprise Ekstensi Ketersediaan Tinggi.
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 Anda membuat grup ketersediaan, selesaikan langkah-langkah berikut:
- Siapkan lingkungan Anda sehingga semua server yang menghosting replika ketersediaan dapat berkomunikasi.
- Instal SQL Server.
Di Linux, Anda harus membuat grup ketersediaan sebelum menambahkannya sebagai sumber daya kluster untuk dikelola kluster. Artikel ini menyediakan contoh untuk membuat grup ketersediaan.
Perbarui nama komputer untuk setiap host.
Setiap nama instans SQL Server harus:
- 15 karakter atau lebih sedikit.
- Unik di jaringan.
Untuk mengatur nama komputer, edit
/etc/hostname. Contoh berikut menunjukkan cara mengedit/etc/hostnamedengan vi:sudo vi /etc/hostnameKonfigurasikan file host.
Nota
Jika server DNS mendaftarkan nama host dengan alamat IP-nya, Anda tidak perlu menyelesaikan 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 file
/etc/hoststidak berisi catatan yang memetakan alamat IP localhost 127.0.0.1 dengan nama host dari simpul tersebut.File host di setiap server berisi alamat IP dan nama semua server yang berpartisipasi dalam grup ketersediaan.
Perintah berikut mengembalikan alamat IP server saat ini:
sudo ip addr showPerbarui
/etc/hosts. Contoh berikut menunjukkan cara mengedit/etc/hostsdengan vi:sudo vi /etc/hostsContoh berikut menunjukkan
/etc/hostspadanode1dengan penambahan untuknode1, , dan .node2node3Dalam sampel ini,node1mengacu pada server yang menghosting replika utama, dannode2dannode3merujuk 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
Menginstal SQL Server
Instal SQL Server. Tautan berikut menunjuk ke instruksi penginstalan SQL Server untuk berbagai distribusi:
- Mulai cepat: Menginstal SQL Server dan membuat database di Red Hat Enterprise Linux
- Mulai cepat: Menginstal SQL Server dan membuat database di SUSE Linux Enterprise Server
- Mulai cepat: Menginstal SQL Server dan membuat database di Ubuntu
Nota
Mulai SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) tidak didukung.
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 acara AlwaysOn_health
Anda dapat secara opsional mengaktifkan Extended Events (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 Acara yang Diperluas untuk grup ketersediaan.
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, sistem mencadangkan sertifikat dan mengamankan file dengan kunci privat. Perbarui skrip dengan kata sandi yang kuat. Sambungkan 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 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 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 .pvk file 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>'
);
Dalam contoh sebelumnya, ganti <private-key-password> dengan kata sandi yang sama dengan yang Anda gunakan saat membuat sertifikat pada replika utama.
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 mengaktifkan 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;
Nota
Jika Anda menggunakan edisi SQL Server Express pada satu simpul untuk menghosting replika khusus konfigurasi, satu-satunya nilai yang valid untuk ROLE adalah WITNESS. Jalankan skrip berikut pada edisi SQL Server Express:
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;
Anda harus membuka port TCP pada firewall untuk port pendengar.
Penting
Satu-satunya metode autentikasi yang didukung untuk titik akhir pencerminan database adalah CERTIFICATE. Opsi WINDOWS tidak tersedia.
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 menggunakan wizard, akan terjadi kesalahan saat Anda menambahkan replika ke dalam AG. Untuk memperbaiki kesalahan ini, berikan ALTER, CONTROL, dan VIEW DEFINITIONS ke alat pacu jantung pada AG pada semua replika. Setelah Anda memberikan izin pada replika utama, pertama-tama sambungkan simpul ke AG melalui wizard, tetapi agar HA berfungsi dengan baik, pastikan untuk memberikan 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 selengkapnya, lihat Ketersediaan tinggi dan perlindungan data untuk konfigurasi grup ketersediaan.
Nota
Grup ketersediaan dapat mencakup replika sinkron atau asinkron tambahan.
Buat AG untuk ketersediaan tinggi di Linux. Gunakan perintah 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.
Jalankan hanya salah satu skrip berikut:
- Membuat grup ketersediaan dengan tiga replika sinkron
- Membuat grup ketersediaan dengan dua replika sinkron dan replika konfigurasi
- Membuat grup ketersediaan dengan dua replika sinkron
Cocokkan nama simpul dengan properti ServerName
Dalam implementasi agen sumber daya SQL Server saat ini, nama simpul harus sesuai dengan properti ServerName dari instans Anda. Misalnya, jika nama simpul Anda adalah node1, pastikan SERVERPROPERTY('ServerName') mengembalikan node1 dalam instans SQL Server Anda. Jika ada ketidakcocokan, replika Anda masuk ke status penyelesaian setelah sumber daya Pacemaker dibuat.
Aturan ini penting ketika Anda menggunakan nama domain yang sepenuhnya memenuhi syarat. Misalnya, jika Anda menggunakan node1.yourdomain.com sebagai nama node selama penyiapan kluster, pastikan SERVERPROPERTY('ServerName') mengembalikan node1.yourdomain.com, dan bukan hanya node1. Untuk memperbaiki masalah ini, Anda dapat:
- Ubah nama host Anda menjadi FQDN dan gunakan prosedur tersimpan
sp_dropserverdansp_addserverguna memastikan metadata di SQL Server sesuai dengan perubahan. -
addrGunakan opsi dalampcs cluster authperintah untuk mencocokkan nama simpul denganSERVERPROPERTY('ServerName')nilai dan gunakan IP statis sebagai alamat simpul.
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 satu replika konfigurasi.
Buat AG dengan dua replika sinkron dan satu replika konfigurasi tambahan:
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
Buat AG dengan dua replika sinkron.
Sertakan dua replika dengan mode ketersediaan sinkron. Misalnya, skrip berikut membuat AG bernama ag1.
node1 dan node2 menyelenggarakan replika dalam mode sinkron, dengan seeding otomatis dan failover otomatis.
Penting
Jalankan saja 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.
Gabungkan replika sekunder ke AG
Pengguna Pacemaker memerlukan izin ALTER, CONTROL, dan VIEW DEFINITION pada grup ketersediaan di semua replika. Untuk memberikan izin ini, jalankan skrip Transact-SQL berikut setelah membuat grup ketersediaan pada replika utama. Jalankan skrip pada setiap replika sekunder segera setelah menambahkannya ke grup ketersediaan. Sebelum 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;
Nota
Untuk replika konfigurasi, hanya langkah gabungan yang diperlukan.
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 database Anda adalah database pengujian atau database yang baru dibuat, ambil cadangan database. Pada SQL Server utama, jalankan skrip Transact-SQL (T-SQL) berikut untuk membuat dan mencadangkan database yang disebut db1:
CREATE DATABASE [db1];
GO
ALTER DATABASE [db1]
SET RECOVERY FULL;
GO
BACKUP DATABASE [db1]
TO DISK = N'/var/opt/mssql/data/db1.bak';
Pada replika SQL Server utama, jalankan skrip T-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;
GO
Setelah membuat AG, Anda harus mengonfigurasi integrasi dengan teknologi kluster seperti Pacemaker untuk ketersediaan tinggi. Untuk konfigurasi pembacaan skala dengan menggunakan AG, mulai dari SQL Server 2017 (14.x), Anda tidak perlu menyiapkan kluster.
Jika Anda mengikuti langkah-langkah dalam artikel ini, Anda memiliki AG yang belum diklusterkan. Langkah selanjutnya adalah menambahkan kluster. Konfigurasi ini berlaku untuk skenario skala pembacaan dan penyeimbangan beban, namun tidak cukup untuk memastikan ketersediaan tinggi. Untuk ketersediaan tinggi, Anda perlu menambahkan AG sebagai sumber daya kluster. Lihat Konten terkait untuk instruksi.
Komentar
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. Di SLES, gunakan crm.
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. Masalah ini akan diperbaiki dalam rilis mendatang. Failover manual atau otomatis ke replika sinkron berhasil.