Bagikan melalui


Mengonfigurasi kluster instans kluster failover RHEL (FCI) untuk SQL Server

Berlaku untuk:SQL Server di Linux

Panduan ini menyediakan instruksi untuk membuat kluster failover disk bersama dua node untuk SQL Server di Red Hat Enterprise Linux. Lapisan pengklusteran didasarkan pada add-on Red Hat Enterprise Linux (RHEL) HA yang dibangun di atas Pacemaker. Instans SQL Server aktif pada satu simpul atau simpul lainnya.

Catatan

Akses ke add-on dan dokumentasi Red Hat HA memerlukan langganan.

Seperti yang ditunjukkan oleh diagram berikut, penyimpanan disajikan ke dua server. Komponen pengklusteran - Corosync dan Pacemaker - mengoordinasikan komunikasi dan manajemen sumber daya. Salah satu server memiliki koneksi aktif ke sumber daya penyimpanan dan SQL Server. Ketika Pacemaker mendeteksi kegagalan, komponen pengklusteran bertanggung jawab untuk memindahkan sumber daya ke simpul lain.

Diagram kluster SQL Server Red Hat Enterprise Linux 7 dengan disk bersama.

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

Pada titik ini, integrasi SQL Server dengan Pacemaker tidak digabungkan seperti WSFC di Windows. Dari dalam SQL Server, tidak ada pengetahuan tentang keberadaan kluster, semua orkestrasi berada di luar dan layanan dikendalikan sebagai instans mandiri oleh Pacemaker. Juga misalnya, kluster dmvs sys.dm_os_cluster_nodes dan sys.dm_os_cluster_properties tidak akan ada rekaman.

Untuk menggunakan string koneksi yang menunjuk ke nama server string dan tidak menggunakan IP, mereka harus mendaftar di server DNS mereka IP yang digunakan untuk membuat sumber daya IP virtual (seperti yang dijelaskan di bagian berikut) dengan nama server yang dipilih.

Bagian berikut menelusuri langkah-langkah untuk menyiapkan solusi kluster failover.

Prasyarat

Untuk menyelesaikan skenario end-to-end berikut, Anda memerlukan dua komputer untuk menyebarkan kluster dua node dan server lain untuk mengonfigurasi server NFS. Langkah-langkah berikut menguraikan bagaimana server ini akan dikonfigurasi.

Menyiapkan dan mengonfigurasi sistem operasi pada setiap node kluster

Langkah pertama adalah mengonfigurasi sistem operasi pada node kluster. Untuk panduan langkah demi langkah ini, gunakan RHEL dengan langganan yang valid untuk add-on HA.

Menginstal dan mengonfigurasi SQL Server pada setiap node kluster

  1. Instal dan siapkan SQL Server pada kedua simpul. Untuk petunjuk terperinci, lihat Panduan penginstalan untuk SQL Server di Linux.

  2. Menunjuk satu simpul sebagai primer dan yang lain sebagai sekunder, untuk tujuan konfigurasi. Gunakan istilah-istilah ini untuk panduan berikut ini.

  3. Pada simpul sekunder, hentikan dan nonaktifkan SQL Server.

    Contoh berikut menghentikan dan menonaktifkan SQL Server:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

Catatan

Pada waktu penyiapan, Kunci Master Server dihasilkan untuk instans SQL Server dan ditempatkan di /var/opt/mssql/secrets/machine-key. Di Linux, SQL Server selalu berjalan sebagai akun lokal yang disebut mssql. Karena ini adalah akun lokal, identitasnya tidak dibagikan di seluruh simpul. Oleh karena itu, Anda perlu menyalin kunci enkripsi dari simpul utama ke setiap simpul sekunder sehingga setiap akun lokal mssql dapat mengaksesnya untuk mendekripsi Kunci Master Server.

  1. Pada simpul utama, buat login SQL Server untuk Pacemaker dan berikan izin masuk untuk menjalankan sp_server_diagnostics. Pacemaker menggunakan akun ini untuk memverifikasi simpul mana yang menjalankan SQL Server.

    sudo systemctl start mssql-server
    

    Sambungkan ke database SQL Server master dengan sa akun dan jalankan hal berikut:

    USE [master];
    GO
    
    CREATE LOGIN [<loginName>]
        WITH PASSWORD = N'<password>';
    
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>];
    

    Perhatian

    Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

    Atau, Anda dapat mengatur izin pada tingkat yang lebih terperinci. Login Pacemaker memerlukan pengkuerian status kesehatan dengan VIEW SERVER STATE, sp_server_diagnostics, dan setupadmin serta pembaruan nama instans FCI dengan nama sumber daya dengan menjalankan ALTER ANY LINKED SERVER dan sp_dropserver.

  2. Pada simpul utama, hentikan dan nonaktifkan SQL Server.

  3. Konfigurasikan file host untuk setiap node kluster. File host harus menyertakan alamat IP dan nama setiap node kluster.

    Periksa alamat IP untuk setiap simpul. Skrip berikut menunjukkan alamat IP simpul Anda saat ini.

    sudo ip addr show
    

    Atur nama komputer pada setiap simpul. Berikan setiap node nama unik yang terdiri dari 15 karakter atau kurang. Atur nama komputer dengan menambahkannya ke /etc/hosts. Skrip berikut memungkinkan Anda mengedit /etc/hosts dengan vi.

    sudo vi /etc/hosts
    

    Contoh berikut menunjukkan /etc/hosts dengan penambahan untuk dua simpul bernama sqlfcivm1 dan sqlfcivm2.

    127.0.0.1   localhost localhost4 localhost4.localdomain4
    ::1       localhost localhost6 localhost6.localdomain6
    10.128.18.128 sqlfcivm1
    10.128.16.77 sqlfcivm2
    

Di bagian berikutnya, Anda akan mengonfigurasi penyimpanan bersama dan memindahkan file database Anda ke penyimpanan tersebut.

Mengonfigurasi penyimpanan bersama dan memindahkan file database

Ada berbagai solusi untuk menyediakan penyimpanan bersama. Panduan langkah demi langkah ini menunjukkan cara mengonfigurasi penyimpanan bersama dengan NFS. Sebaiknya ikuti praktik terbaik dan gunakan Kerberos untuk mengamankan NFS. Misalnya, lihat RHEL7: Gunakan Kerberos untuk mengontrol akses ke berbagi jaringan NFS.

Peringatan

Jika Anda tidak mengamankan NFS, maka siapa pun yang dapat mengakses jaringan Anda dan memalsukan alamat IP simpul SQL akan dapat mengakses file data Anda. Seperti biasa, pastikan Anda membuat model ancaman untuk sistem Anda sebelum menggunakannya dalam produksi. Opsi penyimpanan lainnya adalah menggunakan fileshare SMB.

Mengonfigurasi penyimpanan bersama dengan NFS

Penting

Menghosting file database di server NFS dengan versi <4 tidak didukung dalam rilis ini. Ini termasuk menggunakan NFS untuk pengklusteran failover disk bersama serta database pada instans non-kluster. Kami sedang berupaya mengaktifkan versi server NFS lainnya dalam rilis mendatang.

Di Server NFS, lakukan langkah-langkah berikut:

  1. Menginstal nfs-utils

    sudo yum -y install nfs-utils
    
  2. Aktifkan dan mulai rpcbind

    sudo systemctl enable rpcbind && sudo systemctl start rpcbind
    
  3. Aktifkan dan mulai nfs-server

    sudo systemctl enable nfs-server && sudo systemctl start nfs-server
    
  4. Edit /etc/exports untuk mengekspor direktori yang ingin Anda bagikan. Anda memerlukan satu baris untuk setiap saham yang Anda inginkan. Contohnya:

    /mnt/nfs  10.8.8.0/24(rw,sync,no_subtree_check,no_root_squash)
    
  5. Ekspor saham

    sudo exportfs -rav
    
  6. Verifikasi bahwa jalur dibagikan/diekspor, jalankan dari server NFS

    sudo showmount -e
    
  7. Menambahkan pengecualian di SELinux

    sudo setsebool -P nfs_export_all_rw 1
    
  8. Buka firewall pada server.

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    

Mengonfigurasi semua node kluster untuk menyambungkan ke penyimpanan bersama NFS

Lakukan langkah-langkah berikut pada semua node kluster.

  1. Menginstal nfs-utils

    sudo yum -y install nfs-utils
    
  2. Membuka firewall pada klien dan server NFS

    sudo firewall-cmd --permanent --add-service=nfs
    sudo firewall-cmd --permanent --add-service=mountd
    sudo firewall-cmd --permanent --add-service=rpc-bind
    sudo firewall-cmd --reload
    
  3. Verifikasi bahwa Anda dapat melihat berbagi NFS di komputer klien

    sudo showmount -e <IP OF NFS SERVER>
    
  4. Ulangi langkah-langkah ini pada semua node kluster.

Untuk informasi selengkapnya tentang menggunakan NFS, lihat sumber daya berikut ini:

Memasang direktori file database untuk menunjuk ke penyimpanan bersama

  1. Hanya pada simpul utama, simpan file database ke lokasi sementara. Skrip berikut, membuat direktori sementara baru, menyalin file database ke direktori baru, dan menghapus file database lama. Saat SQL Server berjalan sebagai pengguna mssql lokal, Anda perlu memastikan bahwa setelah transfer data ke folder berbagi yang terpasang, pengguna lokal memiliki akses baca-tulis ke folder berbagi tersebut.

    sudo su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    
  2. Pada semua simpul kluster, edit /etc/fstab file untuk menyertakan perintah pemasangan.

    <IP OF NFS SERVER>:<shared_storage_path> <database_files_directory_path> nfs timeo=14,intr
    

    Skrip berikut menunjukkan contoh pengeditan.

    10.8.8.0:/mnt/nfs /var/opt/mssql/data nfs timeo=14,intr
    

Catatan

Jika menggunakan sumber daya Sistem File (FS) seperti yang direkomendasikan di sini, tidak perlu mempertahankan perintah pemasangan di /etc/fstab. Pacemaker akan mengurus pemasangan folder ketika memulai sumber daya berkluster FS. Dengan bantuan pagar, akan dipastikan bahwa FS tidak pernah dipasang dua kali.

  1. Jalankan perintah mount -a agar sistem memperbarui jalur yang ter-mount.

  2. Salin file database dan file log yang Anda simpan ke /var/opt/mssql/tmp ke berbagi /var/opt/mssql/data yang baru dipasang. Langkah ini hanya perlu dilakukan pada simpul utama. Pastikan Anda memberikan izin baca tulis kepada mssql pengguna lokal.

    sudo chown mssql /var/opt/mssql/data
    sudo chgrp mssql /var/opt/mssql/data
    sudo su mssql
    cp /var/opt/mssql/tmp/* /var/opt/mssql/data/
    rm /var/opt/mssql/tmp/*
    exit
    
  3. Validasi bahwa SQL Server berhasil dimulai dengan jalur file baru. Lakukan ini pada setiap node. Pada titik ini hanya satu simpul yang harus menjalankan SQL Server pada satu waktu. Keduanya tidak dapat berjalan pada saat yang sama karena keduanya akan mencoba mengakses file data secara bersamaan (untuk menghindari memulai SQL Server secara tidak sengaja pada kedua node, gunakan sumber daya kluster sistem file dengan memastikan berbagi tidak di-mount dua kali oleh node yang berbeda). Perintah berikut memulai SQL Server, memeriksa status, lalu menghentikan SQL Server.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    sudo systemctl stop mssql-server
    

Pada titik ini, kedua instans SQL Server dikonfigurasi untuk dijalankan dengan file database pada penyimpanan bersama. Langkah selanjutnya adalah mengonfigurasi SQL Server untuk Pacemaker.

Menginstal dan mengonfigurasi Pacemaker pada setiap node kluster

  1. Pada kedua node kluster, buat file untuk menyimpan nama pengguna dan kata sandi SQL Server untuk login Pacemaker. Perintah berikut membuat dan mengisi file ini:

    sudo touch /var/opt/mssql/secrets/passwd
    echo '<loginName>' | sudo tee -a /var/opt/mssql/secrets/passwd
    echo '<password>' | sudo tee -a /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Perhatian

    Kata sandi Anda harus mengikuti kebijakan kata sandi default SQL Server. Secara default, kata sandi harus panjangnya minimal delapan karakter dan berisi karakter dari tiga dari empat set berikut: huruf besar, huruf kecil, digit dasar-10, dan simbol. Panjang kata sandi bisa hingga 128 karakter. Gunakan kata sandi yang panjang dan kompleks mungkin.

  2. Pada kedua 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 Anda menggunakan firewall lain yang tidak memiliki konfigurasi ketersediaan tinggi bawaan, port berikut perlu dibuka agar Pacemaker dapat berkomunikasi dengan simpul lain dalam kluster:

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

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. Atur kata sandi untuk pengguna default yang dibuat saat menginstal paket Pacemaker dan Corosync. Gunakan kata sandi yang sama pada kedua simpul.

    sudo passwd hacluster
    
  5. Aktifkan dan mulai layanan pcsd dan Pacemaker. Ini akan memungkinkan simpul untuk bergabung kembali dengan kluster setelah reboot. Jalankan perintah berikut pada kedua simpul.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. Instal agen sumber daya FCI untuk SQL Server. Jalankan perintah berikut di kedua node.

    sudo yum install mssql-server-ha
    

Mengonfigurasi agen anggar

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

Membuat kluster

  1. Pada salah satu simpul, buat kluster.

    sudo pcs cluster auth <nodeName1 nodeName2 ...> -u hacluster
    sudo pcs cluster setup --name <clusterName> <nodeName1 nodeName2 ...>
    sudo pcs cluster start --all
    
  2. Konfigurasikan sumber daya kluster untuk SQL Server, Sistem File, dan sumber daya IP virtual dan dorong konfigurasi ke kluster. Anda memerlukan informasi berikut:

    • Nama Sumber Daya SQL Server: Nama untuk sumber daya SQL Server terkelompok.
    • Nama Sumber Daya IP Terapung: Nama untuk sumber daya alamat IP virtual.
    • Alamat IP: Alamat IP yang digunakan klien untuk menyambungkan ke instans terkluster SQL Server.
    • Nama Sumber Daya Sistem File: Nama untuk sumber daya Sistem File.
    • device: Jalur berbagi NFS
    • perangkat: Jalur lokal yang terpasang pada berbagi tersebut
    • fstype: Jenis berbagi file (yaitu, nfs)

    Perbarui nilai dari skrip berikut untuk lingkungan Anda. Jalankan pada satu simpul untuk mengonfigurasi dan memulai layanan berkluster.

    sudo pcs cluster cib cfg
    sudo pcs -f cfg resource create <sqlServerResourceName> ocf:mssql:fci
    sudo pcs -f cfg resource create <floatingIPResourceName> ocf:heartbeat:IPaddr2 ip=<ip Address>
    sudo pcs -f cfg resource create <fileShareResourceName> Filesystem device=<networkPath> directory=<localPath> fstype=<fileShareType>
    sudo pcs -f cfg constraint colocation add <virtualIPResourceName> <sqlResourceName>
    sudo pcs -f cfg constraint colocation add <fileShareResourceName> <sqlResourceName>
    sudo pcs cluster cib-push cfg
    

    Misalnya, skrip berikut membuat sumber daya berkluster SQL Server bernama mssqlha, dan sumber daya IP mengambang dengan alamat 10.0.0.99IP . Ini juga membuat sumber daya Filesystem dan menambahkan batasan sehingga semua sumber daya dikolokasikan pada node yang sama dengan sumber daya SQL.

    sudo pcs cluster cib cfg
    sudo pcs -f cfg resource create mssqlha ocf:mssql:fci
    sudo pcs -f cfg resource create virtualip ocf:heartbeat:IPaddr2 ip=10.0.0.99
    sudo pcs -f cfg resource create fs Filesystem device="10.8.8.0:/mnt/nfs" directory="/var/opt/mssql/data" fstype="nfs"
    sudo pcs -f cfg constraint colocation add virtualip mssqlha
    sudo pcs -f cfg constraint colocation add fs mssqlha
    sudo pcs cluster cib-push cfg
    

    Setelah konfigurasi dikirim, SQL Server akan dimulai pada satu node.

  3. Verifikasi bahwa SQL Server dimulai.

    sudo pcs status
    

    Contoh berikut menunjukkan hasil ketika Pacemaker telah berhasil memulai instans terkluster SQL Server.

    fs     (ocf::heartbeat:Filesystem):    Started sqlfcivm1
    virtualip     (ocf::heartbeat:IPaddr2):      Started sqlfcivm1
    mssqlha  (ocf::mssql:fci): Started sqlfcivm1
    
    PCSD Status:
     sqlfcivm1: Online
     sqlfcivm2: Online
    
    Daemon Status:
     corosync: active/disabled
     pacemaker: active/enabled
     pcsd: active/enabled