Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Konfigurasikan SQL Server Always ON Availability Groups antara Dua Replika Sinkron. Bagian 2

Kami telah membahas beberapa teori tentang mengonfigurasi Always ON Availability Groups untuk SQL Server berbasis Linux. Artikel saat ini akan fokus pada latihan.

Kami akan menyajikan proses langkah demi langkah untuk mengonfigurasi Grup Ketersediaan SQL Server Always ON antara dua replika sinkron. Selain itu, kami akan menyoroti penggunaan replika khusus konfigurasi untuk melakukan failover otomatis.

Sebelum kita mulai, saya sarankan Anda untuk merujuk ke artikel sebelumnya dan menyegarkan pengetahuan Anda.

Diagram desain di bawah ini menampilkan replika sinkron dua simpul dan replika konfigurasi saja yang membantu kami memastikan failover otomatis dan perlindungan data.

Kami menjelajahi desain ini di artikel yang disebutkan sebelumnya, jadi silakan merujuknya untuk informasi sebelum melanjutkan ke tugas praktis.

Instal SQL Server di Sistem Ubuntu

Diagram desain di atas menyebutkan 3 sistem Ubuntu – aoagvm1 , aoagvm2 , dan aoagvm3 dengan contoh SQL Server diinstal. Lihat instruksi menginstal SQL Server di Ubuntu – contohnya terkait dengan SQL Server 2019 di sistem Ubuntu 18.04. Anda dapat melanjutkan dan menginstal SQL Server 2019 di ketiga node (pastikan untuk menginstal versi build yang sama).

Untuk menghemat biaya lisensi, Anda dapat menginstal edisi SQL Server Express untuk replika node ketiga. Yang ini akan berfungsi sebagai replika khusus konfigurasi tanpa menghosting database ketersediaan apa pun.

Setelah SQL Server diinstal pada ketiga node, kita dapat mengonfigurasi Grup Ketersediaan di antara mereka.

Mengonfigurasi Grup Ketersediaan di antara tiga node

Sebelum melanjutkan, validasi lingkungan Anda:

  • Pastikan ada komunikasi antara ketiga node.
  • Periksa dan perbarui nama komputer untuk setiap host dengan menjalankan perintah sudo vi /etc/hostname
  • Perbarui file host dengan alamat IP dan nama Node untuk setiap node. Anda dapat menggunakan perintah sudo vi /etc/hosts untuk menyelesaikan ini
  • Pastikan Anda memiliki semua instans yang berjalan di luar SQL Server 2017 CU1 jika Anda tidak menggunakan SQL Server 2019

Sekarang, mari kita mulai mengkonfigurasi SQL Server Always ON Availability Group antara 3-node. Kita perlu mengaktifkan fitur Grup Ketersediaan di ketiga node.

Jalankan perintah di bawah ini (perhatikan bahwa Anda perlu me-restart layanan SQL Server setelah tindakan itu):

--Enable Availability Group feature
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1

--Restart SQL Server service
sudo systemctl restart mssql-server

Saya telah menjalankan perintah di atas pada simpul utama. Ini harus diulang untuk dua node yang tersisa.

Outputnya di bawah ini – masukkan nama pengguna dan kata sandi setiap kali diminta.

[email protected]:~$ sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1
SQL Server needs to be restarted to apply this setting. Please run
'systemctl restart mssql-server.service'.

[email protected]:~$ systemctl restart mssql-server
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'mssql-server.service'.
Authenticating as: Ubuntu (aoagvm1)
Password:

Langkah selanjutnya adalah mengaktifkan acara yang diperluas Selalu AKTIF untuk setiap contoh SQL Server. Meskipun ini adalah langkah opsional, Anda harus mengaktifkannya untuk memecahkan masalah apa pun yang mungkin muncul nanti. Hubungkan ke instance SQL Server menggunakan SQLCMD dan jalankan perintah di bawah ini:

--Connect to the local SQL Server instance using sqlcmd
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
Go
ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
Go

Outputnya di bawah ini:

[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
2>GO
1>

Setelah Anda mengaktifkan opsi ini pada node replika utama, lakukan hal yang sama untuk node aoagvm2 dan aoagvm3 yang tersisa.

Instans SQL Server yang berjalan di Linux menggunakan sertifikat untuk mengotentikasi komunikasi antara titik akhir pencerminan. Jadi, opsi selanjutnya adalah membuat sertifikat pada replika utama aoagvm1 .

Pertama, kita membuat kunci master dan sertifikat. Kemudian kami mencadangkan sertifikat ini dalam sebuah file dan mengamankan file tersebut dengan kunci pribadi. Jalankan skrip T-SQL di bawah ini pada node replika utama:

--Connect to the local SQL Server instance using sqlcmd
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'

--Configure Certificates
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
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 = '[email protected]');

Keluaran:

[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
2>CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
3>GO
1>BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
2>WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk',ENCRYPTION BY PASSWORD = '[email protected]');
3>GO
1>

Node replika utama sekarang memiliki dua file baru. Salah satunya adalah file sertifikat dbm_certificate.cer dan file kunci pribadi dbm_certificate.pvk di /var/opt/mssql/data/ lokasi.

Salin dua file di atas ke lokasi yang sama pada dua node yang tersisa (AOAGVM2 dan AOAGVM3) yang akan berpartisipasi dalam konfigurasi Grup Ketersediaan. Anda dapat menggunakan perintah SCP atau utilitas pihak ketiga mana pun untuk menyalin kedua file ini ke server target.

Setelah file disalin ke dua node yang tersisa, kami akan memberikan izin ke mssql pengguna untuk mengakses file-file ini di semua 3 node. Untuk itu, jalankan perintah di bawah ini lalu jalankan untuk node ke-3 aoagvm3 juga:

--Copy files to aoagvm2 node
cd /var/opt/mssql/data
scp dbm_certificate.* [email protected]:var/opt/mssql/data/

--Grant permission to user mssql to access both newly created files
cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

Kami akan membuat kunci master dan file sertifikat dengan bantuan dua file yang disalin di atas pada dua node yang tersisa aoagvm2 dan aoagvm3 . Jalankan perintah di bawah ini pada dua node tersebut untuk membuat master key :

--Create master key and certificate on remaining two nodes
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
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 = '[email protected]');

Saya telah menjalankan perintah di atas pada simpul kedua aoagvm2 untuk membuat kunci master dan sertifikat . Lihat hasil eksekusinya. Pastikan untuk menggunakan sandi yang sama seperti saat membuat dan mencadangkan sertifikat dan kunci master.

[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>CREATE MASTER KEY ENCRYPTION BY PASSWORD = '[email protected]$terKEY';
2>CREATE CERTIFICATE dbm_certificate
3>FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
4>WITH PRIVATE KEY (FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '[email protected]');
5>GO
1>

Jalankan perintah di atas pada AOAGVM3 simpul juga.

Sekarang, kami mengonfigurasi titik akhir pencerminan basis data – sebelumnya kami telah membuat sertifikat untuknya. Titik akhir pencerminan bernama hadr_endpoint harus berada di ketiga node sesuai dengan jenis perannya masing-masing.

Karena database ketersediaan dihosting hanya pada 2 node aoagvm1 dan aoagvm2, kami akan menjalankan pernyataan di bawah ini hanya pada node tersebut. Node ketiga akan bertindak seperti saksi – jadi kita mengubah PERAN untuk saksi dalam skrip di bawah ini, lalu jalankan T-SQL ke simpul ketiga aoagvm3 . Scriptnya adalah:

--Configure database mirroring endpoint Hadr_endpoint on nodes aoagvm1 and aoagvm2
CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (ROLE = ALL,
	    AUTHENTICATION = CERTIFICATE dbm_certificate,
		ENCRYPTION = REQUIRED ALGORITHM AES);

--Start the newly created endpoint
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

Berikut adalah output dari perintah di atas pada node replika utama. Saya telah terhubung ke sqlcmd dan dieksekusi itu. Pastikan untuk melakukan hal yang sama pada node replika ke-2 aoagvm2 juga.

[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>CREATE ENDPOINT [Hadr_endpoint]
2>AS TCP (LISTENER_PORT = 5022)
3>FOR DATABASE_MIRRORING (ROLE = ALL, AUTHENTICATION = CERTIFICATE dbm_certificate, ENCRYPTION = REQUIRED ALGORITHM AES);
4>Go
1>ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
2>Go
1>

Setelah Anda menjalankan skrip T-SQL di atas pada 2 node pertama, kita perlu memodifikasinya untuk node ketiga – ubah ROLE menjadi WITNESS.

Jalankan skrip di bawah ini untuk membuat titik akhir pencerminan basis data pada simpul saksi AOAGVM3 . Jika Anda ingin meng-host database ketersediaan di sana, jalankan perintah di atas pada 3 node replika juga. Tetapi pastikan Anda telah menginstal edisi SQL Server yang tepat untuk mencapai kemampuan ini.

Jika Anda menginstal edisi SQL Server Express pada node 3 untuk mengimplementasikan hanya konfigurasi replika , Anda hanya dapat mengonfigurasi ROLE sebagai saksi untuk simpul ini:

--Connect to the local SQL Server instance using sqlcmd
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'

----Configure database mirroring endpoint Hadr_endpoint on 3rd node aoagvm3
CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = 5022)
    FOR DATABASE_MIRRORING (ROLE = WITNESS, AUTHENTICATION = CERTIFICATE dbm_certificate, ENCRYPTION = REQUIRED ALGORITHM AES);

--Start the newly created endpoint on aoagvm3
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

Sekarang kita harus membuat Grup Ketersediaan bernama ag1 .

Hubungkan ke instance SQL Server menggunakan sqlcmd utilitas dan jalankan perintah di bawah ini pada node replika utama aoagvm1 :

--Connect to the local SQL Server instance using sqlcmd hosted on primary replica node aoagvm1
sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'

--Create availability group ag1
CREATE AVAILABILITY GROUP [ag1] 
    WITH (CLUSTER_TYPE = EXTERNAL) 
    FOR REPLICA ON 
     N'aoagvm1’ WITH (ENDPOINT_URL = N'tcp://aoagvm1:5022', 
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
        FAILOVER_MODE = EXTERNAL, 
        SEEDING_MODE = AUTOMATIC), 
     N'aoagvm2' WITH (ENDPOINT_URL = N'tcp://aoagvm2:5022',  
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
        FAILOVER_MODE = EXTERNAL, 
        SEEDING_MODE = AUTOMATIC), 
     N'aoagvm3' WITH (ENDPOINT_URL = N'tcp://aoagvm3:5022', 
        AVAILABILITY_MODE = CONFIGURATION_ONLY);

--Assign required permission
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Skrip di atas mengonfigurasi replika Grup Ketersediaan dengan parameter konfigurasi di bawah ini (kami baru saja menggunakannya dalam skrip T-SQL):

  • CLUSTER_TYPE =EKSTERNAL karena kami mengonfigurasi grup ketersediaan pada instalasi SQL Server berbasis Linux
  • SEEDING_MODE =OTOMATIS menyebabkan SQL Server secara otomatis membuat database pada setiap replika sekunder. Basis data ketersediaan tidak akan dibuat pada replika khusus konfigurasi
  • FAILOVER_MODE =EKSTERNAL untuk replika Primer dan Sekunder. artinya replika berinteraksi dengan pengelola sumber daya cluster eksternal, seperti Alat pacu jantung
  • AVAILABILITY_MODE =SYNCHRONOUS_COMMIT untuk replika primer dan sekunder untuk failover otomatis
  • AVAILABILITY_MODE =CONFIGURATION_ONLY untuk replika ke-3 yang berfungsi sebagai replika khusus konfigurasi

Kita juga perlu membuat login Pacemaker di semua instance SQL Server. Pengguna ini harus diberi ALTER , KONTROL , dan LIHAT DEFINISI izin pada Grup Ketersediaan di semua replika. Untuk memberikan izin, jalankan skrip T-SQL di bawah ini pada semua 3 node replika segera. Pertama, kita akan membuat login Pacemaker. Kemudian, kami akan menetapkan izin di atas untuk login tersebut.

--Create pacemaker login on each SQL Server instance. Run below commands on all 3 SQL Server instances
CREATE LOGIN pacemaker WITH PASSWORD = '[email protected]@12'

--Grant permission to pacemaker login on newly created availability group. Run it on all 3 SQL Server instances
GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemaker
GRANT VIEW SERVER STATE TO pacemaker

Setelah menetapkan izin yang sesuai untuk login Pacemaker di ketiga replika, kami menjalankan skrip T-SQL di bawah ini untuk bergabung dengan replika sekunder aoagvm2 dan aoagvm3 ke grup ketersediaan yang baru dibuat ag1 . Jalankan perintah di bawah ini pada replika sekunder aoagvm2 dan aoagvm3 .

--Execute below commands on aoagvm2 and aoagvm3 to join availability group ag1
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);		 
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Di bawah ini adalah output dari eksekusi di atas pada node aoagvm2 . Pastikan untuk menjalankannya di aoagvm3 simpul juga.

[email protected]:~$ sqlcmd -S localhost -U SA -P 'C0de!n$!ght$'
1>ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
2>Go		 
1>ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
2>Go
1>

Jadi, kami telah mengonfigurasi Grup Ketersediaan. Sekarang, kita perlu menambahkan pengguna atau database pengujian ke Grup Ketersediaan ini. Jika Anda telah membuat database pengguna di replika node utama, jalankan saja full backup dan biarkan seeding otomatis memulihkannya di node sekunder.

Jadi, jalankan perintah di bawah ini:

--Run a full backup of test database or user database hosted on primary replica aoagvm1
BACKUP DATABASE [Test] TO DISK = N'/var/opt/mssql/data/Test_15June.bak';

Mari tambahkan database ini Uji ke Grup Ketersediaan ag1 . Jalankan pernyataan T-SQL di bawah ini pada node utama aoagvm1 . Anda dapat menggunakan sqlcmd utilitas untuk menjalankan pernyataan T-SQL.

--Add user database or test database to the availability group ag1
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [Test];

Anda dapat memverifikasi database pengguna atau database pengujian yang telah Anda tambahkan ke grup ketersediaan dengan melihat ke dalam contoh SQL Server sekunder, apakah dibuat pada replika sekunder atau tidak. Anda dapat menggunakan SQL Server Management Studio atau menjalankan pernyataan T-SQL sederhana untuk mengambil detail tentang database ini.

--Verify test database is created on a secondary replica or not. Run it on secondary replica aoagvm2.
SELECT * FROM sys.databases WHERE name = 'Test';
GO 

Anda akan mendapatkan Tes database dibuat pada replika sekunder.

Dengan langkah di atas, Grup Ketersediaan AlwaysOn telah dikonfigurasi di antara ketiga node. Namun, node ini belum berkerumun. Langkah kami selanjutnya adalah memasang Pacemaker mengelompok pada mereka. Kemudian kita akan menambahkan Grup Ketersediaan ag1 sebagai sumber daya untuk cluster itu.

Konfigurasi Cluster PACEMAKER antara Tiga Node

Jadi, kita akan menggunakan pengelola sumber daya cluster eksternal PACEMAKER antara semua 3 node untuk dukungan cluster. Mari kita mulai dengan mengaktifkan port firewall di antara ketiga node.

Buka port firewall menggunakan perintah di bawah ini:

--Run the below commands on all 3 nodes to open Firewall Ports
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
sudo ufw allow 5022/tcp
sudo ufw reload

--If you don't want to open specific firewall ports then alternatively you can disable the firewall on all 3 nodes by running the below command (THIS IS ALTERNATE & OPTIONAL APPROACH)
sudo ufw disable

Lihat hasilnya – yang ini dari replika utama AOAGVM1 . Anda perlu menjalankan perintah di atas pada ketiga node, satu per satu. Outputnya harus serupa.

[email protected]:~$ sudo ufw allow 2224/tcp
Rules updated
Rules updated (v6)

[email protected]:~$ sudo ufw allow 3121/tcp
Rules updated
Rules updated (v6)

[email protected]:~$ sudo ufw allow 21064/tcp
Rules updated
Rules updated (v6)

[email protected]:~$ sudo ufw allow 5405/udp
Rules updated
Rules updated (v6)

[email protected]:~$ sudo ufw allow 1433/tcp
Rules updated
Rules updated (v6)

[email protected]:~$ sudo ufw allow 5022/tcp
Rules updated
Rules updated (v6)

[email protected]:~$ sudo ufw reload
Firewall not enabled (skipping reload)

Pasang Alat pacu jantung dan corosync paket pada semua 3 node. Jalankan perintah di bawah ini pada setiap node – ini akan mengonfigurasi Pacemaker , corosync , dan agen anggar .

--Install Pacemaker packages on all 3 nodes aoagvm1, aoagvm2 and aoagvm3 by running the below command
sudo apt-get install pacemaker pcs fence-agents resource-agents

Outputnya besar – hampir 20 halaman. Saya telah menyalin beberapa baris pertama dan terakhir untuk mengilustrasikannya (Anda dapat melihat semua paket terinstal):

[email protected]:~$ sudo apt-get install pacemaker pcs fence-agents resource-agents
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following additional packages will be installed:
  cluster-glue corosync fonts-dejavu-core fonts-lato fonts-liberation ibverbs-providers javascript-common libcfg6 libcib4 libcmap4 libcorosync-common4 libcpg4
  libcrmcluster4 libcrmcommon3 libcrmservice3 libdbus-glib-1-2 libesmtp6 libibverbs1 libjs-jquery liblrm2 liblrmd1 libnet-telnet-perl libnet1 libnl-3-200
  libnl-route-3-200 libnspr4 libnss3 libopenhpi3 libopenipmi0 libpe-rules2 libpe-status10 libpengine10 libpils2 libplumb2 libplumbgpl2 libqb0 libquorum5 librdmacm1
  libruby2.5 libsensors4 libsgutils2-2 libsnmp-base libsnmp30 libstatgrab10 libstonith1 libstonithd2 libtimedate-perl libtotem-pg5 libtransitioner2 libvotequorum8
  libxml2-utils openhpid pacemaker-cli-utils pacemaker-common pacemaker-resource-agents python-pexpect python-ptyprocess python-pycurl python3-bs4 python3-html5lib
  python3-lxml python3-pycurl python3-webencodings rake ruby ruby-activesupport ruby-atomic ruby-backports ruby-did-you-mean ruby-ethon ruby-ffi ruby-highline
  ruby-i18n ruby-json ruby-mime-types ruby-mime-types-data ruby-minitest ruby-multi-json ruby-net-telnet ruby-oj ruby-open4 ruby-power-assert ruby-rack
  ruby-rack-protection ruby-rack-test ruby-rpam-ruby19 ruby-sinatra ruby-sinatra-contrib ruby-test-unit ruby-thread-safe ruby-tilt ruby-tzinfo ruby2.5
  rubygems-integration sg3-utils snmp unzip xsltproc zip
Suggested packages:
  ipmitool python-requests python-suds apache2 | lighttpd | httpd lm-sensors snmp-mibs-downloader python-pexpect-doc libcurl4-gnutls-dev python-pycurl-dbg
  python-pycurl-doc python3-genshi python3-lxml-dbg python-lxml-doc python3-pycurl-dbg ri ruby-dev bundler
The following NEW packages will be installed:
  cluster-glue corosync fence-agents fonts-dejavu-core fonts-lato fonts-liberation ibverbs-providers javascript-common libcfg6 libcib4 libcmap4 libcorosync-common4
  libcpg4 libcrmcluster4 libcrmcommon3 libcrmservice3 libdbus-glib-1-2 libesmtp6 libibverbs1 libjs-jquery liblrm2 liblrmd1 libnet-telnet-perl libnet1 libnl-3-200
  libnl-route-3-200 libnspr4 libnss3 libopenhpi3 libopenipmi0 libpe-rules2 libpe-status10 libpengine10 libpils2 libplumb2 libplumbgpl2 libqb0 libquorum5 librdmacm1
  libruby2.5 libsensors4 libsgutils2-2 libsnmp-base libsnmp30 libstatgrab10 libstonith1 libstonithd2 libtimedate-perl libtotem-pg5 libtransitioner2 libvotequorum8
  libxml2-utils openhpid pacemaker pacemaker-cli-utils pacemaker-common pacemaker-resource-agents pcs python-pexpect python-ptyprocess python-pycurl python3-bs4
  python3-html5lib python3-lxml python3-pycurl python3-webencodings rake resource-agents ruby ruby-activesupport ruby-atomic ruby-backports ruby-did-you-mean
  ruby-ethon ruby-ffi ruby-highline ruby-i18n ruby-json ruby-mime-types ruby-mime-types-data ruby-minitest ruby-multi-json ruby-net-telnet ruby-oj ruby-open4
  ruby-power-assert ruby-rack ruby-rack-protection ruby-rack-test ruby-rpam-ruby19 ruby-sinatra ruby-sinatra-contrib ruby-test-unit ruby-thread-safe ruby-tilt
  ruby-tzinfo ruby2.5 rubygems-integration sg3-utils snmp unzip xsltproc zip
0 upgraded, 103 newly installed, 0 to remove and 2 not upgraded.
Need to get 19.6 MB of archives.
After this operation, 86.0 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://azure.archive.ubuntu.com/ubuntu bionic/main amd64 fonts-lato all 2.0-2 [2698 kB]
Get:2 http://azure.archive.ubuntu.com/ubuntu bionic/main amd64 libdbus-glib-1-2 amd64 0.110-2 [58.3 kB]
…………
--------

Setelah Alat pacu jantung instalasi cluster selesai, hacluster pengguna akan diisi secara otomatis saat menjalankan perintah di bawah ini:

[email protected]:~$ cat /etc/passwd|grep hacluster
hacluster:x:111:115::/var/lib/pacemaker:/usr/sbin/nologin

Sekarang, kita dapat mengatur kata sandi untuk pengguna default yang dibuat saat menginstal Pacemaker dan Corosync paket. Pastikan untuk menggunakan kata sandi yang sama di ketiga node. Gunakan perintah di bawah ini:

--Set default user password on all 3 nodes
sudo passwd hacluster

Masukkan kata sandi saat diminta:

[email protected]:~$ sudo passwd hacluster
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

Langkah selanjutnya adalah mengaktifkan dan memulai pcsd servis dan Alat pacu jantung pada semua 3 node. Hal ini memungkinkan semua 3 node untuk bergabung dengan cluster setelah reboot. Jalankan perintah di bawah ini pada ketiga node untuk menyelesaikan langkah ini:

--Enable and start pcsd service and pacemaker
sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl enable pacemaker

Lihat eksekusi pada replika utama aoagvm1 . Pastikan untuk menjalankannya di dua node yang tersisa juga.

--Enable pcsd service
[email protected]:~$ sudo systemctl enable pcsd
Synchronizing state of pcsd.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable pcsd

--Start pcsd service
[email protected]:~$ sudo systemctl start pcsd

--Enable Pacemaker
[email protected]:~$ sudo systemctl enable pacemaker
Synchronizing state of pacemaker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable pacemaker

Kami telah mengonfigurasi Alat pacu jantung paket. Sekarang kita membuat sebuah cluster.

Pertama, pastikan Anda tidak memiliki cluster yang dikonfigurasi sebelumnya pada sistem tersebut. Anda dapat menghancurkan konfigurasi cluster yang ada dari semua node dengan menjalankan perintah di bawah ini. Perhatikan bahwa menghapus konfigurasi cluster akan menghentikan semua layanan cluster dan menonaktifkan Pacemaker service – perlu diaktifkan kembali.

--Destroy previously configured clusters to clean the systems
sudo pcs cluster destroy

--Reenable Pacemaker
sudo systemctl enable pacemaker

Di bawah ini adalah output dari node replika utama aoagvm1 .

--Destroy previously configured clusters to clean the systems
[email protected]:~$ sudo pcs cluster destroy
Shutting down pacemaker/corosync services...
Killing any remaining services...
Removing all cluster configuration files...

--Reenable Pacemaker
[email protected]:~$ sudo systemctl enable pacemaker
Synchronizing state of pacemaker.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable pacemaker

Selanjutnya, kita membuat cluster 3-node antara ketiga node dari replika utama aoagvm1 . Penting :Jalankan perintah di bawah hanya dari node utama Anda !

--Create cluster. Modify below command with your node names, hacluster password and clustername
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

Lihat output pada node replika utama:

[email protected]:~$ sudo pcs cluster auth aoagvm1 aoagvm2 aoagvm3 -u hacluster -p hacluster
aoagvm1: Authorized
aoagvm2: Authorized
aoagvm3: Authorized

[email protected]:~$ sudo pcs cluster setup --name aoagvmcluster aoagvm1 aoagvm2 aoagvm3
Destroying cluster on nodes: aoagvm1, aoagvm2, aoagvm3...
aoagvm1: Stopping Cluster (pacemaker)...
aoagvm2: Stopping Cluster (pacemaker)...
aoagvm3: Stopping Cluster (pacemaker)...
aoagvm1: Successfully destroyed cluster
aoagvm2: Successfully destroyed cluster
aoagvm3: Successfully destroyed cluster
Sending 'pacemaker_remote authkey' to 'aoagvm1', 'aoagvm2', 'aoagvm3'
aoagvm1: successful distribution of the file 'pacemaker_remote authkey'
aoagvm2: successful distribution of the file 'pacemaker_remote authkey'
aoagvm3: successful distribution of the file 'pacemaker_remote authkey'
Sending cluster config files to the nodes...
aoagvm1: Succeeded
aoagvm2: Succeeded
aoagvm3: Succeeded
Synchronizing pcsd certificates on nodes aoagvm1, aoagvm2, aoagvm3...
aoagvm1: Success
aoagvm2: Success
aoagvm3: Success
Restarting pcsd on the nodes to reload the certificates...
aoagvm1: Success
aoagvm2: Success
aoagvm3: Success


[email protected]:~$ sudo pcs cluster start --all
aoagvm1: Starting Cluster...
aoagvm2: Starting Cluster...
aoagvm3: Starting Cluster...

[email protected]:~$ sudo pcs cluster enable --all
aoagvm1: Cluster Enabled
aoagvm2: Cluster Enabled
aoagvm3: Cluster Enabled

Pagar adalah salah satu konfigurasi penting saat menggunakan cluster PACEMAKER dalam produksi. Anda harus mengonfigurasi pagar untuk kluster Anda guna memastikan tidak akan ada kerusakan data jika terjadi pemadaman .

Ada dua jenis penerapan pagar:

  • Tingkat sumber daya – memastikan bahwa sebuah simpul tidak dapat menggunakan satu atau lebih sumber daya.
  • Tingkat simpul – memastikan bahwa sebuah simpul tidak menjalankan sumber daya sama sekali.

Kami biasanya menggunakan STONITH sebagai konfigurasi pagar – pagar tingkat simpul untuk PACEMAKER .

Saat PACEMAKER tidak dapat menentukan status node atau sumber daya pada node, fencing membawa cluster ke status yang diketahui lagi. Untuk mencapainya, PACEMAKER mengharuskan kita untuk mengaktifkan STONITH , yang merupakan singkatan dari Shoot The Other Node In The Head .

Kami tidak akan fokus pada konfigurasi pagar dalam artikel ini karena konfigurasi pagar tingkat simpul sangat bergantung pada lingkungan individu. Untuk skenario kami, kami akan menonaktifkannya dengan menjalankan perintah di bawah ini:

--Disable fencing (STONITH)
sudo pcs property set stonith-enabled=false

Namun, jika Anda berencana menggunakan Pacemaker di lingkungan produksi, Anda harus merencanakan implementasi STONITH tergantung pada lingkungan Anda dan tetap mengaktifkannya.

Selanjutnya, kita akan mengatur beberapa properti cluster penting:cluster-recheck-interval, start-failure-is-fatal, dan failure-timeout .

Sesuai MSDN, jika failure-timeout diatur ke 60 detik, dan cluster-recheck-interval diatur ke 120 detik, restart dicoba pada interval yang lebih besar dari 60 detik tetapi kurang dari 120 detik. Microsoft merekomendasikan pengaturan nilai untuk cluster-recheck-interval lebih besar dari nilai failure-timeout . Pengaturan lain start-failure-is-fatal perlu disetel sebagai benar . Jika tidak, cluster tidak akan memulai failover replika utama ke replika sekunder masing-masing, jika terjadi pemadaman permanen.

Jalankan perintah di bawah ini untuk mengonfigurasi ketiga properti cluster penting:

--Set cluster property cluster-recheck-interval to 2 minutes
sudo pcs property set cluster-recheck-interval=2min

--Set start-failure-is-fatal to True
sudo pcs property set start-failure-is-fatal=true

--Set failure-timeout to 60 seconds. Ag1 is the name of the availability group. Change this name with your availability group name.
pcs resource update ag1 meta failure-timeout=60s

Mengintegrasikan Grup Ketersediaan ke Grup Cluster Alat Pacu Jantung

Di sini, tujuan kami adalah menjelaskan proses Mengintegrasikan Grup Ketersediaan ag1 yang baru dibuat ke Pacemaker . yang baru dibuat kelompok klaster.

Pertama, kita akan menginstal agen sumber daya SQL Server untuk integrasi dengan Pacemaker di ketiga node:

--Install SQL Server Resource Agent on all 3 nodes
sudo apt-get install mssql-server-ha

Saya telah menjalankan perintah di atas pada semua 3 node. Lihat output di bawah ini (diambil dari aoagvm1 ):

--Install SQL Server resource agent for integration with Pacemaker
[email protected]:~$ sudo apt-get install mssql-server-ha
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  mssql-server-ha
0 upgraded, 1 newly installed, 0 to remove, and 2 not upgraded.
Need to get 1486 kB of archives.
After this operation, 9151 kB of additional disk space will be used.
Get:1 https://packages.microsoft.com/ubuntu/16.04/mssql-server-preview xenial/main amd64 mssql-server-ha amd64 15.0.1600.8-1 [1486 kB]
Fetched 1486 kB in 0s (4187 kB/s)
Selecting previously unselected package mssql-server-ha.
(Reading database ... 90430 files and directories currently installed.)
Preparing to unpack .../mssql-server-ha_15.0.1600.8-1_amd64.deb ...
Unpacking mssql-server-ha (15.0.1600.8-1) ...
Setting up mssql-server-ha (15.0.1600.8-1) ...

Ulangi langkah di atas pada 2 node yang tersisa.

Kami telah membuat Pacemaker login di semua instance SQL Server yang dihosting di 3 node saat kami telah mengonfigurasi Grup Ketersediaan ag1 . Sekarang, kami menetapkan peran sysadmin pada semua 3 contoh SQL Server. Anda dapat terhubung menggunakan sqlcmd untuk menjalankan perintah T-SQL ini. If you have not created the Pacemaker login, you can run the below command to do it.

--Create a pacemaker login if you missed creating it in the above section.
USE master
Go
CREATE LOGIN pacemaker WITH PASSWORD = '[email protected]@12'
Go

--Assign sysadmin role to pacemaker login on all 3 nodes. Run this T-SQL on all 3 SQL Server instances.
ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemaker]

We must save the above SQL Server Pacemaker login and its credentials on all 3 nodes. Run the below command there:

--Save pacemaker login credentials on all 3 nodes by executing below commands on each node
echo 'pacemaker' >> ~/pacemaker-passwd
echo '[email protected]@12' >> ~/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

We will create the Availability Group Resource as master/subordinate .

We are using the pcs resource create command to create the Availability Group resource and set its properties. The following command will create the ocf:mssql:ag resource for the Availability Group ag1 .

The Pacemaker resource agent automatically sets the value of REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT on the Availability Group based on the Availability Group’s configuration during the creation of the Availability Group resource.

Execute the below command:

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

Next, we create a virtual IP resource in Pacemaker . Ensure you have the unused private IP address from your network . Replace the IP value with your virtual IP address. This IP will point to the primary replica and you can use it to make databases connections with active nodes.

The command is below:

--Configure virtual IP resource
sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=10.50.0.7

We are adding the colocation constraint and ordering constraint to the Pacemaker cluster configuration . These constraints help the virtual IP resource to make decisions on resources, e.g., where they should run.

Constraints have some scores, and Pacemaker uses these scores to make decisions. Scores are calculated per resource. The cluster resource manager chooses the node with the highest score for a particular resource.

The colocation constraint has an implicit ordering constraint . We need to add an ordering constraint to prevent the IP address from temporarily pointing to the node with the pre-failover secondary . Ordering constraint ensures the cluster comes online in a particular sequential manner.

Run the below commands to add colocation constraint and ordering constraint to the cluster.

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

--Add ordering constraint
sudo pcs constraint order promote ag_cluster-master then start virtualip

Hence, Two-Node Synchronous Replicas (aoagvm1 &aoagvm2) and a Configuration-Only Replica (aoagvm3) on PACEMAKER Cluster between 3-Node Ubuntu Systems has been completed.

We can test the configuration to validate the automatic failover. Run the below command to check the status of the Pacemaker cluster. The command also initiates the Availability Group failover.

Remember, once you couple your Availability Group with the PACEMAKER cluster, you cannot use T-SQL statements to initiate the Availability Group failovers. You can also shut down the primary replica to initiate the automatic failover.

The command is the following:

--Validate the PACEMAKER cluster configuration
sudo pcs status

--Initiate availability group failover to verify AOAG configuration
sudo pcs resource move ag_cluster-master aoagvm2 –master

Kesimpulan

This article was meant to help you understand the configuration of the Two-Node Synchronous Replicas and a Configuration-Only Replica on PACEMAKER Cluster. We hope that you got useful information that will help you in your workflow.

Always plan all steps carefully and do proper testing in a lower life cycle before deploying to your production environment.

We’ll be glad to hear your thoughts about this topic. Feel free to leave your feedback in a comment section.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server 2008 tidak dapat masuk dengan pengguna yang baru dibuat

  2. SQL Server mengonversi varbinary ke string

  3. Kunci asing ke kunci komposit

  4. Bagaimana cara memasukkan catatan dengan hanya nilai default?

  5. Dapatkan Daftar Tabel dengan atau tanpa Batasan Kunci Utama di semua Basis Data dari Instance SQL Server - Tutorial SQL Server / TSQL Bagian 61