Mengonfigurasi kluster Pacemaker untuk grup ketersediaan SQL Server

Berlaku untuk:SQL Server - Linux

Artikel ini menjelaskan cara membuat kluster tiga node di Linux menggunakan Pacemaker, 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.

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.

SQL Server tidak terintegrasi erat dengan Pacemaker di Linux seperti halnya dengan pengklusteran failover Windows Server (WSFC). Instans SQL Server tidak mengetahui kluster, dan semua orkestrasi berasal dari luar masuk. Pacemaker menyediakan orkestrasi sumber daya kluster. Selain itu, nama jaringan virtual khusus untuk pengklusteran failover Windows Server; tidak ada yang setara di Pacemaker. Tampilan manajemen dinamis grup ketersediaan (DMV) yang mengkueri informasi kluster mengembalikan baris kosong pada kluster Pacemaker. Untuk membuat pendengar untuk koneksi ulang transparan setelah failover, daftarkan nama pendengar secara manual di DNS dengan IP yang digunakan untuk membuat sumber daya IP virtual.

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 kluster Pacemaker dan menambahkan grup ketersediaan sebagai sumber daya di kluster untuk ketersediaan tinggi, untuk setiap distribusi Linux yang didukung.

Lapisan pengklusteran didasarkan pada add-on Red Hat Enterprise Linux (RHEL) HA yang dibangun di atas Pacemaker.

Catatan

Akses ke dokumentasi lengkap Red Hat memerlukan langganan yang valid.

Untuk informasi selengkapnya tentang konfigurasi kluster, opsi agen sumber daya, dan manajemen, kunjungi dokumentasi referensi RHEL.

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 di artikel ini.

    Cara mengonfigurasi manajer sumber daya kluster tergantung pada distribusi Linux tertentu.

    Penting

    Lingkungan produksi memerlukan agen anggar 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.

  4. Tambahkan grup ketersediaan sebagai sumber daya di kluster.

Mengonfigurasi ketersediaan tinggi untuk RHEL

Untuk mengonfigurasi ketersediaan tinggi untuk RHEL, aktifkan langganan ketersediaan tinggi lalu konfigurasikan Pacemaker.

Mengaktifkan langganan ketersediaan tinggi untuk RHEL

Setiap simpul dalam kluster harus memiliki langganan yang sesuai untuk RHEL dan Add on Ketersediaan Tinggi. Tinjau persyaratan di Cara menginstal paket kluster Ketersediaan Tinggi di Red Hat Enterprise Linux. Ikuti langkah-langkah ini untuk mengonfigurasi langganan dan repositori:

  1. Daftarkan sistem.

    sudo subscription-manager register
    

    Berikan nama pengguna dan kata sandi Anda.

  2. Cantumkan kumpulan yang tersedia untuk pendaftaran.

    sudo subscription-manager list --available
    

    Dari daftar kumpulan yang tersedia, perhatikan ID kumpulan untuk langganan ketersediaan tinggi.

  3. Perbarui skrip berikut. Ganti <pool id> dengan ID kumpulan untuk ketersediaan tinggi dari langkah sebelumnya. Jalankan skrip untuk melampirkan langganan.

    sudo subscription-manager attach --pool=<pool id>
    
  4. Aktifkan repositori.

    RHEL 7

    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    

    RHEL 8

    sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
    

Untuk informasi selengkapnya, lihat Pacemaker - Kluster Open Source, Ketersediaan Tinggi.

Setelah Anda mengonfigurasi langganan, selesaikan langkah-langkah berikut untuk mengonfigurasi Pacemaker:

Mengonfigurasi Pacemaker

Setelah Anda mendaftarkan langganan, selesaikan langkah-langkah berikut untuk mengonfigurasi Pacemaker:

  1. Pada semua node kluster, buka port firewall Pacemaker. Untuk membuka port ini dengan firewalld, jalankan perintah berikut:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Jika firewall tidak memiliki konfigurasi ketersediaan tinggi bawaan, buka port berikut untuk Pacemaker.

    • TCP: Port 2224, 3121, 21064
    • UDP: Port 5405
  2. Instal paket Pacemaker pada semua simpul.

    sudo yum install pacemaker pcs fence-agents-all 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
    
  4. Untuk memungkinkan simpul bergabung kembali dengan kluster setelah menghidupkan ulang, aktifkan dan mulai pcsd layanan dan Pacemaker. Jalankan perintah berikut pada semua simpul.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  5. Buat Kluster. Untuk membuat kluster, jalankan perintah berikut:

    RHEL 7

    sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster>
    sudo pcs cluster setup --name <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    RHEL8

    Untuk RHEL 8, Anda harus mengautentikasi simpul secara terpisah. Masukkan secara manual di Nama Pengguna dan Kata Sandi untuk hacluster saat diminta.

    sudo pcs host auth <node1> <node2> <node3>
    sudo pcs cluster setup <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    Catatan

    Jika sebelumnya Anda mengonfigurasi kluster pada simpul yang sama, Anda perlu menggunakan --force opsi saat menjalankan pcs cluster setup. Opsi ini setara dengan menjalankan pcs cluster destroy. Untuk mengaktifkan kembali Pacemaker, jalankan sudo systemctl enable pacemaker.

  6. Instal agen sumber daya SQL Server untuk SQL Server. Jalankan perintah berikut pada semua simpul.

    sudo yum install mssql-server-ha
    

Setelah Pacemaker dikonfigurasi, gunakan pcs untuk berinteraksi dengan kluster. Jalankan semua perintah pada satu simpul dari kluster.

Pertimbangan untuk beberapa antarmuka jaringan (NIC)

Saat menyiapkan ketersediaan tinggi dengan server yang memiliki beberapa NIC, ikuti saran berikut:

  • Pastikan hosts file disiapkan sehingga alamat IP server untuk beberapa NIC diselesaikan ke nama host server Linux pada setiap simpul.

  • Saat menyiapkan kluster menggunakan Pacemaker, menggunakan nama host server harus mengonfigurasi Corosync untuk mengatur konfigurasi untuk semua NIC. Kami hanya ingin komunikasi Pacemaker/Corosync melalui satu NIC. Setelah kluster Pacemaker dikonfigurasi, ubah konfigurasi dalam corosync.conf file, dan perbarui alamat IP untuk NIC khusus yang ingin Anda gunakan untuk komunikasi Pacemaker/Corosync.

  • Yang <hostname> diberikan dalam corosync.conf file harus sama dengan output yang diberikan saat melakukan pencarian terbalik (ping -a <ip_address>), dan harus menjadi nama pendek yang dikonfigurasi pada host. Pastikan hosts file juga mewakili alamat IP yang tepat untuk resolusi nama.

Perubahan pada corosync.conf contoh file disorot di bawah ini:

  nodelist {
    node {
        ring0_addr: <ip_address_of_node1_NIC1>
        name: <hostname_of_node1>
        nodeid: 1
    }
    node {
        ring0_addr: <ip_address_of_node2_NIC1>
        name: <hostname_of_node2>
        nodeid: 2
    }
    node {
        ring0_addr: <ip_address_of_node3_NIC1>
        name: <hostname_of_node3>
        nodeid: 3
    }
  }

Mengonfigurasi perangkat anggar

Vendor kluster Pacemaker memerlukan pemagaran node yang gagal, menggunakan perangkat anggar yang dikonfigurasi untuk penyiapan kluster yang didukung. Ketika manajer sumber daya kluster tidak dapat menentukan status simpul atau sumber daya pada node, anggar membawa kluster ke status yang diketahui lagi.

Perangkat pagar menyediakan agen anggar. Menyiapkan Pacemaker di Red Hat Enterprise Linux di Azure memberikan contoh cara membuat perangkat pagar untuk kluster ini di Azure. Ubah instruksi untuk lingkungan Anda.

Pemagaran tingkat sumber daya memastikan bahwa tidak ada kerusakan data dalam pemadaman dengan mengonfigurasi sumber daya. Misalnya, Anda dapat menggunakan anggar tingkat sumber daya untuk menandai disk pada node sebagai kedaluarsa saat tautan komunikasi tidak berfungsi.

Anggar tingkat node memastikan bahwa node tidak menjalankan sumber daya apa pun. Ini dilakukan dengan mengatur ulang simpul. Pacemaker mendukung berbagai perangkat anggar. Contohnya termasuk catu daya yang tidak dapat diinterupsi atau kartu antarmuka manajemen untuk server.

Untuk informasi tentang anggar node yang gagal, lihat artikel berikut ini:

Catatan

Karena konfigurasi pagar tingkat node sangat bergantung pada lingkungan Anda, nonaktifkan untuk tutorial ini (dapat dikonfigurasi nanti). Skrip berikut menonaktifkan anggar tingkat simpul:

sudo pcs property set stonith-enabled=false

Menonaktifkan pagar hanya untuk tujuan pengujian. Jika Anda berencana menggunakan Pacemaker di lingkungan produksi, Anda harus merencanakan implementasi pagar tergantung pada lingkungan Anda dan mengaktifkannya.

Atur interval cluster-recheck-property properti kluster

cluster-recheck-interval menunjukkan interval polling di mana kluster memeriksa perubahan parameter sumber daya, batasan, atau opsi kluster lainnya. Jika replika turun, kluster mencoba menghidupkan 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. Kami menyarankan agar Anda mengatur waktu habis kegagalan menjadi 60 detik dan cluster-recheck-interval ke nilai yang lebih besar dari 60 detik. Pengaturan cluster-recheck-interval ke nilai 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, paket Pacemaker 1.1.18-11.el7 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 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 akan true dijalankan:

sudo pcs property set start-failure-is-fatal=true

Untuk memperbarui ag_cluster properti failure-timeout sumber daya ke 60s, jalankan:

pcs resource update ag_cluster meta failure-timeout=60s

Untuk informasi tentang properti kluster Pacemaker, lihat Properti Kluster Pacemaker.

Membuat data masuk SQL Server untuk Pacemaker

  1. Pada semua instans 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. Pada semua instans 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 berikut membuat ocf:mssql:ag sumber daya jenis master/subordinat untuk grup ketersediaan dengan nama ag1.

RHEL 7

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s master notify=true

RHEL 8

Dengan ketersediaan RHEL 8, sintaksis buat telah berubah. Jika Anda menggunakan RHEL 8, terminologi master telah berubah menjadi promotable. Gunakan perintah buat berikut alih-alih perintah di atas:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s 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 diatur 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. Ganti alamat IP antara <10.128.16.240> 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, bukan alamat IP, daftarkan alamat sumber daya IP virtual 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. 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.

Pada kluster pacemaker, Anda dapat memanipulasi keputusan kluster dengan batasan. Batasan memiliki skor. Jika batasan memiliki skor yang lebih rendah dari INFINITY, Pacemaker menganggapnya sebagai rekomendasi. Skor INFINITY bersifat wajib.

Untuk memastikan bahwa replika utama dan sumber daya ip virtual berjalan pada host yang sama, tentukan batasan kolokasi dengan skor INFINITY. Untuk menambahkan batasan kolokasi, jalankan perintah berikut pada satu simpul.

RHEL 7

Saat Anda membuat ag_cluster sumber daya di RHEL 7, sumber daya akan dibuat sebagai ag_cluster-master. Gunakan perintah berikut untuk RHEL 7:

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master

RHEL 8

Saat Anda membuat ag_cluster sumber daya di RHEL 8, sumber daya akan dibuat sebagai ag_cluster-clone. Gunakan perintah berikut untuk RHEL 8:

sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master

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

  3. Sumber daya IP virtual dimulai pada simpul 2.

    Catatan

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

  4. Grup ketersediaan utama pada simpul 1 diturunkan ke sekunder.

  5. Grup ketersediaan sekunder pada simpul 2 dipromosikan ke primer.

Untuk mencegah alamat IP menunjuk sementara ke simpul dengan sekunder pra-failover, tambahkan batasan pemesanan.

Untuk menambahkan batasan pengurutan, jalankan perintah berikut pada satu simpul:

RHEL 7

sudo pcs constraint order promote ag_cluster-master then start virtualip

RHEL 8

sudo pcs constraint order promote ag_cluster-clone then start virtualip

Penting

Setelah mengonfigurasi kluster dan menambahkan grup ketersediaan sebagai sumber daya kluster, Anda tidak dapat menggunakan Transact-SQL untuk melakukan failover pada sumber daya grup ketersediaan. 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 dan di SLES gunakan crm alat.

Failover grup ketersediaan secara manual dengan pcs. Jangan memulai failover dengan Transact-SQL. Untuk petunjuknya, lihat Failover.