Vi har redan täckt en del teorier om att konfigurera Always ON Availability Groups för Linux-baserade SQL-servrar. Den aktuella artikeln kommer att fokusera på praktiken.
Vi kommer att presentera steg-för-steg-processen för att konfigurera SQL Server Always ON Availability Groups mellan två synkrona repliker. Vi kommer också att belysa användningen av repliken endast för konfiguration för att utföra automatisk failover.
Innan vi börjar skulle jag rekommendera dig att hänvisa till den tidigare artikeln och uppdatera dina kunskaper.
Designdiagrammet nedan visar den synkrona repliken med två noder och en replik som endast är konfigurerad som hjälper oss att säkerställa automatisk failover och dataskydd.
Vi utforskade den här designen i den tidigare nämnda artikeln, så hänvisa till den för information innan vi går vidare till praktiska uppgifter.
Installera SQL Server på Ubuntu-system
Ovanstående designdiagram nämner 3 Ubuntu-system – aoagvm1 , aoagvm2 och aoagvm3 med SQL Server-instanserna installerade. Se instruktionerna för installation av SQL Server på Ubuntu – exemplet avser SQL Server 2019 på Ubuntu 18.04-systemet. Du kan fortsätta och installera SQL Server 2019 på alla tre noder (se till att installera samma version).
För att spara licenskostnader kan du installera SQL Server Express-utgåvan för den tredje nodrepliken. Den här kommer att fungera som en konfigurationsreplika utan att vara värd för några tillgänglighetsdatabaser.
När SQL Server är installerad på alla tre noderna kan vi konfigurera tillgänglighetsgruppen mellan dem.
Konfigurera tillgänglighetsgrupper mellan tre noder
Innan du går vidare, validera din miljö:
- Se till att det finns kommunikation mellan alla tre noderna.
- Kontrollera och uppdatera datornamnet för varje värd genom att köra kommandot sudo vi /etc/hostname
- Uppdatera värdfilen med IP-adress och nodnamn för varje nod. Du kan använda kommandot sudo vi /etc/hosts för att få detta gjort
- Se till att du har alla instanser som körs bortom SQL Server 2017 CU1 om du inte använder SQL Server 2019
Låt oss nu börja konfigurera SQL Server Always ON Availability Group mellan 3-noder. Vi måste aktivera funktionen Tillgänglighetsgrupp på alla tre noderna.
Kör kommandot nedan (observera att du måste starta om SQL Server-tjänsten efter den åtgärden):
--Enable Availability Group feature
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
--Restart SQL Server service
sudo systemctl restart mssql-server
Jag har utfört kommandot ovan på den primära noden. Det bör upprepas för de återstående två noderna.
Utdata är nedan – ange användarnamn och lösenord närhelst du uppmanas.
[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:
Nästa steg är att aktivera Alltid PÅ utökade händelser för varje SQL Server-instans. Även om detta är ett valfritt steg måste du aktivera det för att felsöka eventuella problem som kan komma senare. Anslut till SQL Server-instansen med SQLCMD och kör kommandot nedan:
--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
Utdata är nedan:
[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>
När du har aktiverat det här alternativet på den primära replikanoden gör du samma sak för de återstående aoagvm2- och aoagvm3-noderna.
SQL Server-instanserna som körs på Linux använder certifikat för att autentisera kommunikation mellan speglingsslutpunkterna. Så nästa alternativ är att skapa certifikatet på den primära repliken aoagvm1 .
Först skapar vi en huvudnyckel och ett certifikat. Sedan säkerhetskopierar vi detta certifikat i en fil och säkrar filen med en privat nyckel. Kör nedanstående T-SQL-skript på den primära replikanoden:
--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]');
Utdata:
[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>
Den primära replikanoden har nu två nya filer. En är certifikatfilen dbm_certificate.cer och den privata nyckelfilen dbm_certificate.pvk på /var/opt/mssql/data/ plats.
Kopiera ovanstående två filer till samma plats på de återstående två noderna (AOAGVM2 och AOAGVM3) som kommer att delta i Availability Group-konfigurationen. Du kan använda SCP-kommandot eller något tredjepartsverktyg för att kopiera dessa två filer till målservern.
När filerna har kopierats till de återstående två noderna tilldelar vi behörigheter till mssql användare att komma åt dessa filer på alla tre noder. För det, kör kommandot nedan och kör det sedan för den tredje noden aoagvm3 likaså:
--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.*
Vi kommer att skapa huvudnyckeln och certifikatfilerna med hjälp av de två kopierade filerna ovan på de återstående två noderna aoagvm2 och aoagvm3 . Kör kommandot nedan på dessa två noder för att skapa huvudnyckeln :
--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]');
Jag har utfört kommandot ovan på den andra noden aoagvm2 för att skapa huvudnyckeln och certifikat . Ta en titt på exekveringsutgången. Se till att använda samma lösenord som när du skapar och säkerhetskopierar certifikatet och huvudnyckeln.
[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>
Kör kommandot ovan på AOAGVM3 nod också.
Nu konfigurerar vi databasspeglingsslutpunkter – tidigare har vi skapat certifikat för dem. Speglingsslutpunkten med namnet hadr_endpoint bör finnas på alla tre noderna enligt deras respektive rolltyp.
Eftersom tillgänglighet finns databaser endast på två noder aoagvm1 och aoagvm2, vi kommer att köra nedanstående uttalande endast på dessa noder. Den tredje noden kommer att fungera som ett vittne – så vi kommer bara att byta ROLL att bevittna i skriptet nedan och kör sedan T-SQL till den tredje noden aoagvm3 . Skriptet är:
--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;
Här är resultatet av kommandot ovan på den primära replikanoden. Jag har anslutit till sqlcmd och utförde det. Se till att göra samma sak på den andra repliknoden aoagvm2 likaså.
[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>
När du har kört ovanstående T-SQL-skript på de två första noderna måste vi modifiera det för den tredje noden – ändra ROLEN till WITNESS.
Kör skriptet nedan för att skapa databasspeglingsslutpunkten på vittnesnoden AOAGVM3 . Om du vill ha tillgänglighetsdatabaser där, kör kommandot ovan på noden 3 repliker också. Men se till att du har installerat rätt utgåva av SQL Server för att uppnå denna funktion.
Om du installerade SQL Server Express-utgåvan på noden 3 för att implementera enbart konfiguration replika , du kan bara konfigurera ROLE som vittne för denna nod:
--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;
Nu måste vi skapa tillgänglighetsgruppen som heter ag1 .
Anslut till SQL Server-instansen med sqlcmd och kör kommandot nedan på den primära replikanoden 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;
Skriptet ovan konfigurerar Tillgänglighetsgruppsrepliker med nedanstående konfigurationsparametrar (vi har precis använt dem i T-SQL-skriptet):
- CLUSTER_TYPE =EXTERN eftersom vi konfigurerar tillgänglighetsgrupp på Linux-baserade SQL Server-installationer
- SEEDING_MODE =AUTOMATISK gör att SQL Server automatiskt skapar en databas på varje sekundär replik. Tillgänglighetsdatabaser kommer inte att skapas på enbart konfigurationsrepliker
- FAILOVER_MODE =EXTERN för både primära och sekundära repliker. det betyder att repliken interagerar med en extern klusterresurshanterare, såsom Pacemaker
- AVAILABILITY_MODE =SYNCHRONOUS_COMMIT för primära och sekundära repliker för automatisk failover
- AVAILABILITY_MODE =CONFIGURATION_ONLY för 3:e repliken som fungerar som en endast konfigurationsreplika
Vi behöver också skapa en Pacemaker-inloggning på alla SQL Server-instanser. Denna användare måste tilldelas ALTER , KONTROLL och VISA DEFINITION behörigheter för tillgänglighetsgruppen för alla repliker. För att bevilja behörigheter, kör T-SQL-skriptet nedan på alla tre replikanoderna omedelbart. Först skapar vi en Pacemaker-inloggning. Sedan tilldelar vi ovanstående behörigheter till den inloggningen.
--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
Efter att ha tilldelat lämpliga behörigheter till Pacemaker-inloggningen på alla tre replikerna, kör vi nedanstående T-SQL-skript för att gå med i de sekundära replikerna aoagvm2 och aoagvm3 till den nyskapade tillgänglighetsgruppen ag1 . Kör kommandona nedan på de sekundära replikerna aoagvm2 och 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;
Nedan är utdata från ovanstående körningar på noden aoagvm2 . Se till att köra den på aoagvm3 nod också.
[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>
Därför har vi konfigurerat tillgänglighetsgruppen. Nu måste vi lägga till en användare eller en testdatabas till denna tillgänglighetsgrupp. Om du redan har skapat en användardatabas på den primära nodrepliken, kör bara en fullständig säkerhetskopia och låt den automatiska seedningen återställa den på den sekundära noden.
Kör därför kommandot nedan:
--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';
Låt oss lägga till den här databasen Test till tillgänglighetsgruppen ag1 . Kör nedanstående T-SQL-sats på den primära noden aoagvm1 . Du kan använda sqlcmd verktyg för att köra T-SQL-satser.
--Add user database or test database to the availability group ag1
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [Test];
Du kan verifiera användardatabasen eller en testdatabas som du har lagt till i tillgänglighetsgruppen genom att titta på den sekundära SQL Server-instansen, oavsett om den är skapad på sekundära repliker eller inte. Du kan antingen använda SQL Server Management Studio eller köra en enkel T-SQL-sats för att hämta information om denna databas.
--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
Du får Test databas skapad på den sekundära repliken.
Med steget ovan har AlwaysOn Availability Group konfigurerats mellan alla tre noderna. Dessa noder är dock inte klustrade ännu. Vårt nästa steg är att installera Pacemaker kluster på dem. Sedan lägger vi till tillgänglighetsgruppen ag1 som en resurs till det klustret.
PACEMAKER-klusterkonfiguration mellan tre noder
Så vi kommer att använda en extern klusterresurshanterare PACEMAKER mellan alla 3 noderna för klusterstöd. Låt oss börja med att aktivera brandväggsportarna mellan alla tre noderna.
Öppna brandväggsportar med kommandot nedan:
--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
Se utdata – den här är från den primära repliken AOAGVM1 . Du måste utföra ovanstående kommandon på alla tre noderna, en efter en. Utdata bör vara liknande.
[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)
Installera Pacemaker och corosync paket på alla 3 noder. Kör kommandot nedan på varje nod – det kommer att konfigurera Pacemaker , corosync , och fäktningsmedel .
--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
Resultatet är enormt – nästan 20 sidor. Jag har kopierat de första och sista raderna för att illustrera det (du kan se alla paket installerade):
[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]
…………
--------
En gång Pacemaker klusterinstallationen är klar, hacluster användaren kommer att fyllas i automatiskt när du kör kommandot nedan:
[email protected]:~$ cat /etc/passwd|grep hacluster
hacluster:x:111:115::/var/lib/pacemaker:/usr/sbin/nologin
Nu kan vi ställa in lösenordet för standardanvändaren som skapades när Pacemaker installerades och Corosync paket. Se till att använda samma lösenord på alla 3 noder. Använd kommandot nedan:
--Set default user password on all 3 nodes
sudo passwd hacluster
Ange lösenordet när du uppmanas:
[email protected]:~$ sudo passwd hacluster
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Nästa steg är att aktivera och starta pcsd service och Pacemaker på alla 3 noderna. Det tillåter alla 3 noder att gå med i klustret efter omstart. Kör kommandot nedan på alla tre noderna för att få detta steg gjort:
--Enable and start pcsd service and pacemaker
sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl enable pacemaker
Se körningen på den primära repliken aoagvm1 . Se till att köra den på de återstående två noderna också.
--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
Vi har konfigurerat Pacemaker paket. Nu skapar vi ett kluster.
Se först till att du inte har några tidigare konfigurerade kluster på dessa system. Du kan förstöra alla befintliga klusterkonfigurationer från alla noder genom att köra kommandona nedan. Observera att om du tar bort alla klusterkonfigurationer stoppas alla klustertjänster och Pacemaker inaktiveras. tjänst – den måste återaktiveras.
--Destroy previously configured clusters to clean the systems
sudo pcs cluster destroy
--Reenable Pacemaker
sudo systemctl enable pacemaker
Nedan är utdata från den primära replikanoden 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
Därefter skapar vi 3-nodsklustret mellan alla 3 noderna från den primära repliken aoagvm1 . Viktigt :Kör nedanstående kommandon endast från din primära nod !
--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
Se utdata på den primära replikanoden:
[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
Fäktning är en av de väsentliga konfigurationerna när du använder PACEMAKER-klustret i produktionen. Du bör konfigurera stängsel för ditt kluster för att säkerställa att det inte blir någon datakorruption i händelse av avbrott .
Det finns två typer av stängselimplementering:
- Resursnivå – säkerställer att en nod inte kan använda en eller flera resurser.
- Nodnivå – säkerställer att en nod inte kör några resurser alls.
Vi använder vanligtvis STONITH som stängselkonfiguration – stängslet på nodnivå för PACEMAKER .
När PACEMAKER inte kan bestämma tillståndet för en nod eller en resurs på en nod, fäktning för klustret till ett känt tillstånd igen. För att uppnå detta kräver PACEMAKER att vi aktiverar STONITH , som står för Skjut den andra noden i huvudet .
Vi kommer inte att fokusera på stängselkonfigurationen i den här artikeln eftersom stängselkonfigurationen på nodnivå beror mycket på den individuella miljön. För vårt scenario inaktiverar vi det genom att köra kommandot nedan:
--Disable fencing (STONITH)
sudo pcs property set stonith-enabled=false
Men om du planerar att använda Pacemaker i en produktionsmiljö bör du planera STONITH-implementeringen beroende på din miljö och hålla den aktiverad.
Därefter kommer vi att ställa in några viktiga klusteregenskaper:kluster-recheck-interval, start-failure-is-fatal, och fel-timeout .
Enligt MSDN, om fel-timeout är inställd på 60 sekunder och kluster-recheck-intervall är inställd på 120 sekunder, prövas omstarten med ett intervall som är större än 60 sekunder men mindre än 120 sekunder. Microsoft rekommenderar att du ställer in ett värde för cluster-recheck-interval större än värdet för fel-timeout . En annan inställning start-failure-is-fatal måste ställas in som true . Annars kommer klustret inte att initiera failover av primär replik till deras respektive sekundära replik, om permanenta avbrott skulle inträffa.
Kör kommandona nedan för att konfigurera alla tre viktiga klusteregenskaper:
--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
Integrera tillgänglighetsgrupp med pacemakerklustergrupp
Här är vårt mål att beskriva processen för att integrera den nyskapade tillgänglighetsgruppen ag1 till den nyskapade Pacemaker klustergrupp.
Först kommer vi att installera SQL Server-resursagenten för integration med Pacemaker på alla tre noderna:
--Install SQL Server Resource Agent on all 3 nodes
sudo apt-get install mssql-server-ha
Jag har utfört kommandot ovan på alla 3 noder. Se utdata nedan (tagen från 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) ...
Upprepa stegen ovan på de återstående två noderna.
Vi har redan skapat Pacemaker logga in på alla SQL Server-instanser som finns på 3 noder när vi har konfigurerat tillgänglighetsgruppen ag1 . Nu tilldelar vi rollen sysadmin på alla 3 SQL Server-instanser. Du kan ansluta med sqlcmd for running this T-SQL command. 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
Slutsats
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.