Již jsme probrali nějakou teorii o konfiguraci Always ON Availability Groups pro SQL servery založené na Linuxu. Aktuální článek se zaměří na praxi.
Představíme krok za krokem proces konfigurace skupin SQL Server Always ON Availability mezi dvěma synchronními replikami. Také zdůrazníme použití repliky pouze pro konfiguraci k automatickému převzetí služeb při selhání.
Než začneme, doporučuji vám podívat se na předchozí článek a osvěžit si své znalosti.
Níže uvedený návrhový diagram zobrazuje dvouuzlovou synchronní repliku a repliku pouze pro konfiguraci, které nám pomáhají zajistit automatické převzetí služeb při selhání a ochranu dat.
Tento design jsme prozkoumali v dříve zmíněném článku, takže si jej prosím přečtěte, abyste získali informace, než přistoupíme k praktickým úkolům.
Nainstalujte SQL Server na systémy Ubuntu
Výše uvedený návrhový diagram zmiňuje 3 systémy Ubuntu – aoagvm1 , aoagvm2 a aoagvm3 s nainstalovanými instancemi SQL Server. Viz pokyny k instalaci SQL Server na Ubuntu – příklad se týká SQL Server 2019 na systému Ubuntu 18.04. Můžete pokračovat a nainstalovat SQL Server 2019 na všechny 3 uzly (nezapomeňte nainstalovat stejnou verzi sestavení).
Chcete-li ušetřit náklady na licence, můžete nainstalovat edici SQL Server Express pro repliku třetího uzlu. Tato bude fungovat jako replika pouze pro konfiguraci bez hostování jakýchkoli databází dostupnosti.
Jakmile je SQL Server nainstalován na všech 3 uzlech, můžeme mezi nimi nakonfigurovat skupinu dostupnosti.
Konfigurace skupin dostupnosti mezi třemi uzly
Než budete pokračovat, ověřte své prostředí:
- Ujistěte se, že mezi všemi 3 uzly probíhá komunikace.
- Zkontrolujte a aktualizujte název počítače pro každého hostitele spuštěním příkazu sudo vi /etc/hostname
- Aktualizujte hostitelský soubor pomocí IP adresy a názvů uzlů pro každý uzel. Můžete použít příkaz sudo vi /etc/hosts jak to udělat
- Pokud nepoužíváte SQL Server 2019, ujistěte se, že máte všechny instance spuštěné nad rámec SQL Server 2017 CU1
Nyní začněme konfigurovat skupinu SQL Server Always ON Availability Group mezi 3 uzly. Musíme povolit funkci skupiny dostupnosti na všech 3 uzlech.
Spusťte níže uvedený příkaz (všimněte si, že po této akci musíte restartovat službu SQL Server):
--Enable Availability Group feature
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
--Restart SQL Server service
sudo systemctl restart mssql-server
Výše uvedený příkaz jsem provedl na primárním uzlu. Mělo by se to opakovat pro zbývající dva uzly.
Výstup je níže – zadejte uživatelské jméno a heslo, kdykoli budete vyzváni.
[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:
Dalším krokem je povolení rozšířených událostí Vždy zapnuto pro každou instanci SQL Server. Ačkoli se jedná o volitelný krok, musíte jej povolit, abyste mohli řešit problémy, které by mohly nastat později. Připojte se k instanci SQL Server pomocí SQLCMD a spusťte níže uvedený příkaz:
--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
Výstup je níže:
[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>
Jakmile povolíte tuto možnost na primárním uzlu repliky, proveďte totéž pro zbývající uzly aoagvm2 a aoagvm3.
Instance SQL Server spuštěné v systému Linux používají certifikáty k ověření komunikace mezi zrcadlícími koncovými body. Další možností je tedy vytvořit certifikát na primární replice aoagvm1 .
Nejprve vytvoříme hlavní klíč a certifikát. Poté tento certifikát zazálohujeme do souboru a soubor zabezpečíme privátním klíčem. Spusťte níže uvedený skript T-SQL na primárním uzlu repliky:
--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]');
Výstup:
[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>
Uzel primární repliky má nyní dva nové soubory. Jedním z nich je soubor certifikátu dbm_certificate.cer a soubor soukromého klíče dbm_certificate.pvk na /var/opt/mssql/data/ umístění.
Zkopírujte výše uvedené dva soubory do stejného umístění na zbývajících dvou uzlech (AOAGVM2 a AOAGVM3), které se budou podílet na konfiguraci skupiny dostupnosti. Ke zkopírování těchto dvou souborů na cílový server můžete použít příkaz SCP nebo jakýkoli nástroj třetí strany.
Jakmile budou soubory zkopírovány do zbývajících dvou uzlů, přidělíme oprávnění k mssql k těmto souborům na všech 3 uzlech. Za tímto účelem spusťte níže uvedený příkaz a poté jej spusťte pro 3. uzel aoagvm3 také:
--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.*
Soubory hlavního klíče a certifikátu vytvoříme pomocí výše uvedených dvou zkopírovaných souborů na zbývajících dvou uzlech aoagvm2 a aoagvm3 . Spuštěním níže uvedeného příkazu na těchto dvou uzlech vytvořte hlavní klíč :
--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]');
Výše uvedený příkaz jsem provedl na druhém uzlu aoagvm2 vytvořit hlavní klíč a certifikát . Podívejte se na výstup provedení. Ujistěte se, že používáte stejná hesla jako při vytváření a zálohování certifikátu a hlavního klíče.
[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>
Spusťte výše uvedený příkaz na AOAGVM3 uzel také.
Nyní nakonfigurujeme koncové body zrcadlení databáze – dříve jsme pro ně vytvořili certifikáty. Koncový bod zrcadlení s názvem hadr_endpoint by měl být na všech 3 uzlech podle jejich příslušného typu role.
Protože databáze dostupnosti jsou hostovány pouze na 2 uzlech aoagvm1 a aoagvm2, spustíme příkaz еру níže pouze na těchto uzlech. Třetí uzel bude fungovat jako svědek – takže jen změníme ROLU svědkem ve skriptu níže a poté spusťte T-SQL do třetího uzlu aoagvm3 . Skript je:
--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;
Zde je výstup výše uvedeného příkazu na primárním uzlu repliky. Připojil jsem se k sqlcmd a provedl to. Ujistěte se, že proveďte totéž na 2. uzlu repliky aoagvm2 také.
[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>
Jakmile provedete výše uvedený skript T-SQL na prvních 2 uzlech, musíme jej upravit pro třetí uzel – změňte ROLE na WITNESS.
Spuštěním níže uvedeného skriptu vytvořte koncový bod zrcadlení databáze na uzlu svědka AOAGVM3 . Pokud tam chcete hostovat databáze dostupnosti, spusťte výše uvedený příkaz také na uzlu 3 replik. Ujistěte se však, že jste nainstalovali správnou edici SQL Server, abyste dosáhli této schopnosti.
Pokud jste nainstalovali edici SQL Server Express na uzel 3 za účelem implementace pouze konfigurace replika , můžete konfigurovat pouze ROLE jako svědek pro tento uzel:
--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;
Nyní musíme vytvořit skupinu dostupnosti s názvem ag1 .
Připojte se k instanci SQL Server pomocí sqlcmd a spusťte níže uvedený příkaz na primárním uzlu repliky 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;
Výše uvedený skript konfiguruje repliky skupiny dostupnosti s níže uvedenými konfiguračními parametry (právě jsme je použili ve skriptu T-SQL):
- CLUSTER_TYPE =EXTERNÍ protože konfigurujeme skupinu dostupnosti pro instalace SQL Serveru založené na Linuxu
- SEEDING_MODE =AUTOMATIC způsobí, že SQL Server automaticky vytvoří databázi na každé sekundární replice. Databáze dostupnosti nebudou vytvořeny na replikách pouze pro konfiguraci
- FAILOVER_MODE =EXTERNÍ pro primární i sekundární repliky. to znamená, že replika spolupracuje s externím správcem klastrových prostředků, jako je Pacemaker
- AVAILABILITY_MODE =SYNCHRONOUS_COMMIT pro primární a sekundární repliky pro automatické převzetí služeb při selhání
- AVAILABILITY_MODE =CONFIGURATION_ONLY pro 3. repliku, která funguje jako replika pouze pro konfiguraci
Potřebujeme také vytvořit přihlášení k Pacemakeru na všech instancích SQL Serveru. Tomuto uživateli musí být přiřazen ALTER , CONTROL a ZOBRAZIT DEFINICE oprávnění ve skupině dostupnosti na všech replikách. Chcete-li udělit oprávnění, okamžitě spusťte níže uvedený skript T-SQL na všech 3 uzlech replik. Nejprve vytvoříme přihlášení ke kardiostimulátoru. Poté tomuto přihlášení přiřadíme výše uvedená oprávnění.
--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
Po přiřazení příslušných oprávnění k přihlášení k kardiostimulátoru u všech 3 replik spustíme níže uvedené skripty T-SQL, abychom se připojili k sekundárním replikám aoagvm2 a aoagvm3 do nově vytvořené skupiny dostupnosti ag1 . Spusťte níže uvedené příkazy na sekundárních replikách aoagvm2 a 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;
Níže je uveden výstup výše uvedených spuštění na uzlu aoagvm2 . Ujistěte se, že jej spouštíte na aoagvm3 uzel také.
[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>
Proto jsme nakonfigurovali skupinu dostupnosti. Nyní musíme do této skupiny dostupnosti přidat uživatele nebo testovací databázi. Pokud jste již vytvořili uživatelskou databázi na replice primárního uzlu, stačí spustit úplnou zálohu a poté nechat automatické seedování, aby ji obnovilo na sekundárním uzlu.
Spusťte tedy níže uvedený příkaz:
--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';
Přidejme tuto databázi Test do skupiny dostupnosti ag1 . Spusťte níže uvedený příkaz T-SQL na primárním uzlu aoagvm1 . Můžete použít sqlcmd nástroj pro spouštění příkazů T-SQL.
--Add user database or test database to the availability group ag1
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [Test];
Uživatelskou databázi nebo testovací databázi, kterou jste přidali do skupiny dostupnosti, můžete ověřit pohledem na sekundární instanci SQL Server, ať už je vytvořena na sekundárních replikách či nikoli. Chcete-li získat podrobnosti o této databázi, můžete použít SQL Server Management Studio nebo spustit jednoduchý příkaz T-SQL.
--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
Získáte Test databáze vytvořená na sekundární replice.
Výše uvedeným krokem byla mezi všemi třemi uzly nakonfigurována skupina dostupnosti AlwaysOn. Tyto uzly však ještě nejsou seskupeny. Naším dalším krokem je instalace kardiostimulátoru shlukovat se na ně. Poté přidáme skupinu dostupnosti ag1 jako prostředek k tomuto clusteru.
Konfigurace klastru PACEMAKER mezi třemi uzly
Použijeme tedy externího správce clusterových prostředků PACEMAKER mezi všemi 3 uzly pro podporu clusteru. Začněme povolením portů brány firewall mezi všemi 3 uzly.
Otevřete porty brány firewall pomocí níže uvedeného příkazu:
--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
Podívejte se na výstup – tento je z primární repliky AOAGVM1 . Výše uvedené příkazy musíte provést na všech třech uzlech, jeden po druhém. Výstup by měl být podobný.
[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)
Nainstalujte Pacemaker a korosync balíčky na všech 3 uzlech. Spusťte níže uvedený příkaz na každém uzlu – nakonfiguruje Pacemaker , corosync a šermíř .
--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
Výstup je obrovský – téměř 20 stran. Pro ilustraci jsem zkopíroval prvních a posledních pár řádků (můžete vidět všechny nainstalované balíčky):
[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]
…………
--------
Jednou kardiostimulátor instalace clusteru je dokončena, hacluster uživatel bude vyplněn automaticky při spuštění níže uvedeného příkazu:
[email protected]:~$ cat /etc/passwd|grep hacluster
hacluster:x:111:115::/var/lib/pacemaker:/usr/sbin/nologin
Nyní můžeme nastavit heslo pro výchozího uživatele vytvořeného při instalaci Pacemaker a Corosync balíčky. Ujistěte se, že používáte stejné heslo na všech 3 uzlech. Použijte níže uvedený příkaz:
--Set default user password on all 3 nodes
sudo passwd hacluster
Po zobrazení výzvy zadejte heslo:
[email protected]:~$ sudo passwd hacluster
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Dalším krokem je povolení a spuštění pcsd služby a kardiostimulátor na všech 3 uzlech. Umožňuje všem 3 uzlům připojit se ke clusteru po restartu. Spusťte níže uvedený příkaz na všech 3 uzlech, abyste provedli tento krok:
--Enable and start pcsd service and pacemaker
sudo systemctl enable pcsd
sudo systemctl start pcsd
sudo systemctl enable pacemaker
Podívejte se na provedení na primární replice aoagvm1 . Ujistěte se, že jej spustíte také na zbývajících dvou uzlech.
--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
Nakonfigurovali jsme Pacemaker balíčky. Nyní vytvoříme cluster.
Nejprve se ujistěte, že v těchto systémech nemáte žádné dříve nakonfigurované clustery. Spuštěním níže uvedených příkazů můžete zničit jakékoli existující konfigurace clusteru ze všech uzlů. Upozorňujeme, že odebráním jakékoli konfigurace clusteru zastavíte všechny služby clusteru a deaktivujete Pacemaker služba – je třeba ji znovu povolit.
--Destroy previously configured clusters to clean the systems
sudo pcs cluster destroy
--Reenable Pacemaker
sudo systemctl enable pacemaker
Níže je uveden výstup z primárního uzlu repliky 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ále vytvoříme 3-uzlový cluster mezi všemi 3 uzly z primární repliky aoagvm1 . Důležité :Níže uvedené příkazy provádějte pouze z primárního uzlu !
--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
Viz výstup na primárním uzlu repliky:
[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
Oplocení je jednou ze základních konfigurací při používání clusteru PACEMAKER v produkci. Měli byste nakonfigurovat oplocení pro váš cluster, abyste zajistili, že v případě výpadků nedojde k poškození dat .
Existují dva typy implementace oplocení:
- Úroveň zdroje – zajišťuje, že uzel nemůže používat jeden nebo více zdrojů.
- Úroveň uzlu – zajišťuje, že uzel nespouští vůbec žádné prostředky.
Obecně používáme STONITH jako konfigurace oplocení – oplocení na úrovni uzlů pro PACEMAKER .
Když PACEMAKER nemůže určit stav uzlu nebo zdroje na uzlu, oplocení přivede cluster opět do známého stavu. Abychom toho dosáhli, PACEMAKER vyžaduje, abychom povolili STONITH , což je zkratka pro Shoot The Other Node In The Head .
V tomto článku se nezaměříme na konfiguraci oplocení, protože konfigurace oplocení na úrovni uzlů silně závisí na individuálním prostředí. V našem scénáři jej deaktivujeme spuštěním níže uvedeného příkazu:
--Disable fencing (STONITH)
sudo pcs property set stonith-enabled=false
Pokud však plánujete používat Pacemaker v produkčním prostředí byste měli implementaci STONITH naplánovat v závislosti na vašem prostředí a ponechat ji povolenou.
Dále nastavíme některé základní vlastnosti clusteru:cluster-recheck-interval, start-failure-is-fatal, a časový limit selhání .
Podle MSDN, pokud časový limit selhání je nastavena na 60 sekund a cluster-recheck-interval je nastavena na 120 sekund, restart se pokouší v intervalu, který je delší než 60 sekund, ale kratší než 120 sekund. Společnost Microsoft doporučuje nastavit hodnotu pro cluster-recheck-interval větší než hodnota failure-timeout . Jiné nastavení start-failure-is-fatal je třeba nastavit jako pravda . V opačném případě cluster nezahájí převzetí služeb při selhání primární repliky do příslušné sekundární repliky, pokud by došlo k trvalému výpadku.
Spuštěním níže uvedených příkazů nakonfigurujte všechny 3 důležité vlastnosti clusteru:
--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
Integrace skupiny dostupnosti do skupiny Pacemaker Cluster Group
Zde je naším cílem popsat proces integrace nově vytvořené skupiny dostupnosti ag1 na nově vytvořený Pacemaker skupina clusteru.
Nejprve nainstalujeme agenta prostředků SQL Server pro integraci s Pacemaker na všech 3 uzlech:
--Install SQL Server Resource Agent on all 3 nodes
sudo apt-get install mssql-server-ha
Výše uvedený příkaz jsem provedl na všech 3 uzlech. Viz výstup níže (převzatý z 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) ...
Opakujte výše uvedené kroky na zbývajících 2 uzlech.
Pacemaker jsme již vytvořili přihlaste se do všech instancí SQL Server hostovaných na 3 uzlech, když jsme nakonfigurovali skupinu dostupnosti ag1 . Nyní přiřadíme roli správce systému na všech 3 instancích SQL Server. Můžete se připojit pomocí sqlcmd pro spuštění tohoto příkazu T-SQL. 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
Závěr
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.