Mengonfigurasi Kluster Ubuntu dan Sumber Daya Grup Ketersediaan

Berlaku untuk:yes 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:

  1. Konfigurasikan SQL Server pada node kluster.

  2. Buat grup ketersediaan.

  3. 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.

  4. Tambahkan grup ketersediaan sebagai sumber daya di kluster.

Menginstal dan mengonfigurasi Pacemaker pada setiap node kluster

  1. 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
    
  2. Instal paket Pacemaker. Pada semua simpul, jalankan perintah berikut:

    sudo apt-get install pacemaker pcs fence-agents resource-agents
    
  3. 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

  1. Hapus konfigurasi kluster yang ada dari semua simpul.

    Menjalankan sudo apt-get install pcspenginstalan 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. Perintah pcs 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
    
  2. 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 adalah node1, pastikan SERVERPROPERTY('ServerName') kembali di instans node1 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, 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 prosedur dan sp_addserver tersimpan untuk memastikan metadata di SQL Server cocok dengan perubahan.
    • addr Gunakan opsi dalam pcs cluster auth perintah untuk mencocokkan nama simpul dengan SERVERPROPERTY('ServerName') nilai dan gunakan IP statis sebagai alamat simpul.

    Jika sebelumnya Anda mengonfigurasi kluster pada simpul yang sama, Anda perlu menggunakan --force opsi saat menjalankan pcs cluster setup. Ini setara dengan menjalankan pcs cluster destroy, dan layanan Pacemaker perlu diaktifkan kembali menggunakan sudo systemctl enable pacemaker.

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

  1. 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.

  2. 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:

  1. Masalah pcs resource move pengguna ke grup ketersediaan utama dari node1 ke node2.

  2. Sumber daya IP virtual berhenti pada node1.

  3. Sumber daya IP virtual dimulai pada node2.

    Pada titik ini, alamat IP untuk sementara menunjuk ke node2 saat node2 masih merupakan sekunder pra-failover.

  4. Grup ketersediaan utama aktif node1 diturunkan ke sekunder.

  5. 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.

Langkah berikutnya