Mengonfigurasi Kluster Ubuntu dan Sumber Daya Grup Ketersediaan
Berlaku untuk: SQL Server (semua versi yang didukung) - Linux
Artikel ini menjelaskan cara membuat kluster tiga simpul di Ubuntu 20.04 dan menambahkan grup ketersediaan yang dibuat sebelumnya sebagai sumber daya di kluster. Untuk ketersediaan tinggi, grup ketersediaan di Linux memerlukan tiga simpul - lihat Ketersediaan tinggi dan perlindungan data untuk konfigurasi grup ketersediaan.
Integrasi SQL Server dengan Pacemaker di Linux tidak digabungkan seperti WSFC di Windows. Dari dalam SQL Server, tidak ada pengetahuan tentang keberadaan kluster, semua orkestrasi berasal dari luar, dan layanan dikendalikan sebagai instans mandiri oleh manajer kluster. Selain itu, nama jaringan virtual khusus untuk WSFC, dan tidak ada yang setara dengan yang sama di Pacemaker. Tampilan manajemen dinamis AlwaysOn yang menampilkan informasi kluster kueri mengembalikan baris kosong.
Anda masih dapat membuat pendengar untuk koneksi ulang transparan setelah failover, tetapi Anda harus mendaftarkan nama pendengar secara manual di server DNS dengan IP yang digunakan untuk membuat sumber daya IP virtual (seperti yang dijelaskan di bagian berikut).
Bagian berikut menelusuri langkah-langkah untuk menyiapkan solusi kluster failover.
Peta Strategi
Langkah-langkah untuk membuat grup ketersediaan di server Linux untuk ketersediaan tinggi berbeda dari langkah-langkah pada kluster failover Windows Server. Daftar berikut ini menjelaskan langkah-langkah tingkat tinggi:
Konfigurasikan manajer sumber daya kluster, seperti Pacemaker. Instruksi ini ada dalam dokumen ini.
Cara untuk mengonfigurasi manajer sumber daya kluster tergantung pada distribusi Linux tertentu.
Lingkungan produksi memerlukan agen anggar, seperti STONITH untuk ketersediaan tinggi. Demonstrasi dalam dokumentasi ini tidak menggunakan agen anggar. Demonstrasi hanya untuk pengujian dan validasi.
Kluster Linux 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.
Anggar biasanya diimplementasikan pada sistem operasi dan tergantung pada lingkungan. Temukan instruksi untuk pagar dalam dokumentasi distributor sistem operasi.
Menginstal dan mengonfigurasi Pacemaker pada setiap node kluster
Pada semua simpul, buka port firewall. Buka port untuk layanan ketersediaan tinggi Pacemaker, instans SQL Server, dan titik akhir grup ketersediaan. Port TCP default untuk server yang menjalankan SQL Server adalah 1433.
sudo ufw allow 2224/tcp sudo ufw allow 3121/tcp sudo ufw allow 21064/tcp sudo ufw allow 5405/udp sudo ufw allow 1433/tcp # Replace with TDS endpoint sudo ufw allow 5022/tcp # Replace with DATA_MIRRORING endpoint sudo ufw reload
Atau, Anda hanya dapat menonaktifkan firewall:
sudo ufw disable
Instal paket Pacemaker. Pada semua simpul, jalankan perintah berikut:
sudo apt-get install pacemaker pcs fence-agents resource-agents
Atur kata sandi untuk pengguna default yang dibuat saat menginstal paket Pacemaker dan Corosync. Gunakan kata sandi yang sama pada semua simpul.
sudo passwd hacluster
Mengaktifkan dan memulai layanan pcsd dan Pacemaker
Perintah berikut mengaktifkan dan memulai pcsd
layanan dan Pacemaker. Jalankan pada semua simpul. Ini memungkinkan simpul untuk bergabung kembali dengan kluster setelah reboot.
sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl enable pacemaker
Perintah enable pacemaker
mungkin selesai dengan kesalahan berikut:
pacemaker Default-Start contains no runlevels, aborting.
Kesalahan tidak berbahaya, dan konfigurasi kluster dapat dilanjutkan.
Membuat kluster
Hapus konfigurasi kluster yang ada dari semua simpul.
Menjalankan
sudo apt-get install pcs
penginstalan pacemaker, corosync, dan pcs pada saat yang sama dan mulai menjalankan semua 3 layanan. Memulai corosync menghasilkan file templat/etc/cluster/corosync.conf
. Agar langkah berikutnya berhasil, file ini seharusnya tidak ada, jadi solusinya adalah menghentikan pacemaker atau corosync dan menghapus/etc/cluster/corosync.conf
, lalu langkah berikutnya berhasil diselesaikan. Perintahpcs cluster destroy
melakukan hal yang sama, dan Anda dapat menggunakannya sebagai langkah penyiapan kluster awal satu kali.Perintah berikut menghapus file konfigurasi kluster yang ada dan menghentikan semua layanan kluster, secara permanen menghancurkan kluster. Jalankan sebagai langkah pertama di lingkungan pra-produksi. Perhatikan bahwa
pcs cluster destroy
menonaktifkan layanan Pacemaker dan perlu diaktifkan kembali. Jalankan perintah berikut pada semua simpul.Peringatan
Perintah menghancurkan sumber daya kluster yang ada.
sudo pcs cluster destroy sudo systemctl enable pacemaker
Buat kluster.
Memulai kluster (
pcs cluster start
) mungkin gagal dengan kesalahan berikut, karena file log yang dikonfigurasi di/etc/corosync/corosync.conf
, yang dibuat ketika perintah penyiapan kluster dijalankan, salah. Untuk mengatasi masalah ini, ubah file log menjadi/var/log/corosync/corosync.log
. Atau Anda dapat membuat file sendiri/var/log/cluster/corosync.log
.Job for corosync.service failed because the control process exited with error code. See "systemctl status corosync.service" and "journalctl -xe" for details.
Perintah berikut membuat kluster tiga simpul. Sebelum Anda menjalankan skrip, ganti nilai di antara
< ... >
. Jalankan perintah berikut pada simpul utama.sudo pcs host auth <node1> <node2> <node3> -u hacluster -p <password for hacluster> sudo pcs cluster setup <clusterName> <node1> <node2> <node3> sudo pcs cluster start --all sudo pcs cluster enable --all
Dalam implementasi agen sumber daya SQL Server saat ini, nama simpul harus cocok dengan
ServerName
properti dari instans Anda. Misalnya, jika nama simpul Anda adalahnode1
, pastikanSERVERPROPERTY('ServerName')
kembali di instansnode1
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 (FQDN). Misalnya, jika Anda menggunakan
node1.yourdomain.com
sebagai nama node selama penyiapan kluster, pastikanSERVERPROPERTY('ServerName')
mengembalikannode1.yourdomain.com
, dan bukan hanyanode1
. Solusi yang mungkin untuk masalah ini adalah:- Ganti nama host Anda menjadi FQDN, dan gunakan
sp_dropserver
prosedur dansp_addserver
tersimpan untuk memastikan metadata di SQL Server cocok dengan perubahan. addr
Gunakan opsi dalampcs cluster auth
perintah untuk mencocokkan nama simpul denganSERVERPROPERTY('ServerName')
nilai dan gunakan IP statis sebagai alamat simpul.
Jika sebelumnya Anda mengonfigurasi kluster pada simpul yang sama, Anda perlu menggunakan
--force
opsi saat menjalankanpcs cluster setup
. Ini setara dengan menjalankanpcs cluster destroy
, dan layanan Pacemaker perlu diaktifkan kembali menggunakansudo systemctl enable pacemaker
.- Ganti nama host Anda menjadi FQDN, dan gunakan
Mengonfigurasi pagar (STONITH)
Vendor kluster Pacemaker mengharuskan STONITH diaktifkan dan perangkat pagar yang dikonfigurasi untuk penyiapan kluster yang didukung. (STONITH adalah singkatan dari "tembak simpul lain di kepala".) Ketika manajer sumber daya kluster tidak dapat menentukan status simpul atau sumber daya pada node, anggar digunakan untuk membawa kluster ke keadaan yang diketahui lagi.
Pemagaran tingkat sumber daya memastikan bahwa tidak ada kerusakan data yang terjadi jika ada pemadaman. Anda dapat menggunakan pagar tingkat sumber daya, misalnya, dengan DRBD (Perangkat Blok Terdistribusi Replikasi Terdistribusi) untuk menandai disk pada simpul sebagai kedaluarsa saat tautan komunikasi tidak berfungsi.
Anggar tingkat simpul memastikan bahwa simpul tidak menjalankan sumber daya apa pun. Ini dilakukan dengan mengatur ulang simpul, dan implementasi Pacemaker dari simpul tersebut disebut STONITH. Pacemaker mendukung berbagai perangkat anggar, misalnya, catu daya yang tidak dapat diubah atau kartu antarmuka manajemen untuk server.
Untuk informasi selengkapnya, lihat Kluster Pacemaker dari Scratch dan Fencing dan Stonith.
Karena konfigurasi anggar tingkat simpul sangat bergantung pada lingkungan Anda, kami menonaktifkannya untuk tutorial ini (dapat dikonfigurasi di lain waktu). Jalankan skrip berikut pada simpul utama:
sudo pcs property set stonith-enabled=false
Dalam contoh ini, menonaktifkan STONITH hanya untuk tujuan pengujian. Jika Anda berencana menggunakan Pacemaker di lingkungan produksi, Anda harus merencanakan implementasi STONITH tergantung pada lingkungan Anda dan tetap mengaktifkannya. Hubungi vendor sistem operasi untuk informasi tentang agen anggar untuk distribusi tertentu.
Mengatur interval cluster-recheck-property properti kluster
Properti cluster-recheck-interval
menunjukkan interval polling di mana kluster memeriksa perubahan parameter sumber daya, batasan, atau opsi kluster lainnya. Jika replika tidak berfungsi, kluster mencoba memulai ulang replika pada interval yang terikat oleh failure-timeout
nilai dan cluster-recheck-interval
nilai . Misalnya, jika failure-timeout
diatur ke 60 detik dan cluster-recheck-interval
diatur ke 120 detik, mulai ulang dicoba pada interval yang lebih besar dari 60 detik tetapi kurang dari 120 detik. Anda harus mengatur failure-timeout
ke 60 detik, dan cluster-recheck-interval
ke nilai yang lebih besar dari 60 detik. Pengaturan cluster-recheck-interval
ke nilai yang lebih kecil tidak disarankan.
Untuk memperbarui nilai properti yang akan 2 minutes
dijalankan:
sudo pcs property set cluster-recheck-interval=2min
Jika Anda sudah memiliki sumber daya grup ketersediaan yang dikelola oleh kluster Pacemaker, perhatikan bahwa semua distribusi yang menggunakan paket Pacemaker 1.1.18-11.el7 atau yang lebih baru, memperkenalkan perubahan perilaku untuk start-failure-is-fatal
pengaturan kluster saat nilainya adalah false
. Perubahan ini memengaruhi alur kerja failover. Jika replika utama mengalami pemadaman, kluster diperkirakan akan gagal ke salah satu replika sekunder yang tersedia. Sebagai gantinya, pengguna akan melihat bahwa kluster terus mencoba memulai replika utama yang gagal. Jika primer tersebut tidak pernah online (karena pemadaman permanen), kluster tidak pernah gagal ke replika sekunder lain yang tersedia. Karena perubahan ini, konfigurasi yang disarankan sebelumnya untuk diatur start-failure-is-fatal
tidak lagi valid dan pengaturan perlu dikembalikan ke nilai defaultnya true
Selain itu, sumber daya AG perlu diperbarui untuk menyertakan failover-timeout
properti .
Untuk memperbarui nilai properti yang true
akan dijalankan:
sudo pcs property set start-failure-is-fatal=true
Perbarui properti failure-timeout
sumber daya AG yang ada untuk 60s
dijalankan (ganti ag1
dengan nama sumber daya grup ketersediaan Anda):
pcs resource update ag1 meta failure-timeout=60s
Menginstal agen sumber daya SQL Server untuk integrasi dengan Pacemaker
Jalankan perintah berikut pada semua simpul.
sudo apt-get install mssql-server-ha
Membuat data masuk SQL Server untuk Pacemaker
Di semua SQL Server, buat login Server untuk Pacemaker. Transact-SQL berikut membuat login:
USE [master] GO CREATE LOGIN [pacemakerLogin] with PASSWORD= N'ComplexP@$$w0rd!'; ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
Pada saat pembuatan grup ketersediaan, pengguna pacemaker akan memerlukan izin ALTER, CONTROL, dan VIEW DEFINITION pada grup ketersediaan, setelah dibuat tetapi sebelum node ditambahkan ke dalamnya.
Di semua SQL Server, simpan kredensial untuk login SQL Server.
echo 'pacemakerLogin' >> ~/pacemaker-passwd echo 'ComplexP@$$w0rd!' >> ~/pacemaker-passwd sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root
Membuat sumber daya grup ketersediaan
Untuk membuat sumber daya grup ketersediaan, gunakan pcs resource create
perintah dan atur properti sumber daya. Perintah di bawah ini membuat ocf:mssql:ag
sumber daya jenis primer/replika untuk grup ketersediaan dengan nama ag1
.
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s promotable notify=true
Catatan
Saat Anda membuat sumber daya, dan secara berkala setelahnya, agen sumber daya Pacemaker secara otomatis menetapkan nilai REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
pada grup ketersediaan berdasarkan konfigurasi grup ketersediaan. Misalnya, jika grup ketersediaan memiliki tiga replika sinkron, agen akan mengatur REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
ke 1
. Untuk detail dan opsi konfigurasi tambahan, lihat Ketersediaan tinggi dan perlindungan data untuk konfigurasi grup ketersediaan.
Membuat sumber daya IP virtual
Untuk membuat sumber daya alamat IP virtual, jalankan perintah berikut pada satu simpul. Gunakan alamat IP statis yang tersedia dari jaringan. Sebelum Anda menjalankan skrip, ganti nilai antara < ... >
dengan alamat IP yang valid.
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<10.128.16.240>
Tidak ada nama server virtual yang setara di Pacemaker. Untuk menggunakan string koneksi yang menunjuk ke nama server string dan tidak menggunakan alamat IP, daftarkan alamat sumber daya IP dan nama server virtual yang diinginkan di DNS. Untuk konfigurasi DR, daftarkan nama server virtual dan alamat IP yang diinginkan dengan server DNS di situs utama dan DR.
Menambahkan batasan kolokasi
Hampir setiap keputusan dalam kluster Pacemaker, seperti memilih tempat sumber daya harus dijalankan, dilakukan dengan membandingkan skor. Skor dihitung per sumber daya, dan manajer sumber daya kluster memilih simpul dengan skor tertinggi untuk sumber daya tertentu. (Jika simpul memiliki skor negatif untuk sumber daya, sumber daya tidak dapat berjalan pada simpul tersebut.)
Gunakan batasan untuk mengonfigurasi keputusan kluster. Batasan memiliki skor. Jika batasan memiliki skor yang lebih rendah dari INFINITY, itu hanya rekomendasi. Skor INFINITY berarti itu wajib.
Untuk memastikan bahwa replika utama dan sumber daya ip virtual berada di host yang sama, tentukan batasan kolokasi dengan skor INFINITY. Untuk menambahkan batasan kolokasi, jalankan perintah berikut pada satu simpul.
sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY
Menambahkan batasan pemesanan
Batasan kolokasi memiliki batasan pengurutan implisit. Ini memindahkan sumber daya IP virtual sebelum memindahkan sumber daya grup ketersediaan. Secara default urutan peristiwa adalah:
Masalah
pcs resource move
pengguna ke grup ketersediaan utama darinode1
kenode2
.Sumber daya IP virtual berhenti pada
node1
.Sumber daya IP virtual dimulai pada
node2
.Pada titik ini, alamat IP untuk sementara menunjuk ke
node2
saatnode2
masih merupakan sekunder pra-failover.Grup ketersediaan utama aktif
node1
diturunkan ke sekunder.Grup ketersediaan sekunder aktif dipromosikan
node2
ke primer.
Untuk mencegah alamat IP menunjuk sementara ke simpul dengan sekunder pra-failover, tambahkan batasan pemesanan.
Untuk menambahkan batasan pemesanan, jalankan perintah berikut pada satu simpul:
sudo pcs constraint order promote ag_cluster-clone then start virtualip
Setelah mengonfigurasi kluster dan menambahkan grup ketersediaan sebagai sumber daya kluster, Anda tidak dapat menggunakan Transact-SQL untuk mengalihkan sumber daya grup ketersediaan. Sumber daya kluster SQL Server di Linux tidak digabungkan seketat dengan sistem operasi seperti yang ada di Kluster Failover Windows Server (WSFC). Layanan SQL Server tidak mengetahui keberadaan kluster. Semua orkestrasi dilakukan melalui alat manajemen kluster. Di RHEL atau Ubuntu, Anda harus menggunakan pcs
.