Kurz: Konfigurace skupin dostupnosti pro SQL Server na virtuálních počítačích s Ubuntu v Azure
V tomto kurzu se naučíte:
- Vytvoření virtuálních počítačů, jejich umístění do skupiny dostupnosti
- Povolení vysoké dostupnosti (HA)
- Vytvoření clusteru Pacemaker
- Konfigurace agenta fencingu vytvořením zařízení STONITH
- Instalace SQL Serveru a nástrojů mssql-tools na Ubuntu
- Konfigurace skupiny dostupnosti AlwaysOn PRO SQL Server
- Konfigurace prostředků skupiny dostupnosti (AG) v clusteru Pacemaker
- Otestování převzetí služeb při selhání a agenta fencingu
Poznámka:
Komunikace bez předsudků
Tento článek obsahuje odkazy na termín otrok, termín Microsoft považuje za urážlivé, pokud se používá v tomto kontextu. Termín se zobrazí v tomto článku, protože se aktuálně zobrazuje v softwaru. Když se termín odebere ze softwaru, odebereme ho z článku.
V tomto kurzu se k nasazení prostředků v Azure používá Azure CLI.
Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.
Požadavky
Použijte prostředí Bash v Azure Cloud Shellu. Další informace najdete v tématu Rychlý start pro Bash v Azure Cloud Shellu.
Pokud dáváte přednost místnímu spouštění referenčních příkazů rozhraní příkazového řádku, nainstalujte Azure CLI. Pokud používáte Windows nebo macOS, zvažte spuštění Azure CLI v kontejneru Docker. Další informace najdete v tématu Jak spustit Azure CLI v kontejneru Dockeru.
Pokud používáte místní instalaci, přihlaste se k Azure CLI pomocí příkazu az login. Pokud chcete dokončit proces ověřování, postupujte podle kroků zobrazených na terminálu. Další možnosti přihlášení najdete v tématu Přihlášení pomocí Azure CLI.
Po zobrazení výzvy nainstalujte rozšíření Azure CLI při prvním použití. Další informace o rozšířeních najdete v tématu Využití rozšíření v Azure CLI.
Spuštěním příkazu az version zjistěte verzi a závislé knihovny, které jsou nainstalované. Pokud chcete upgradovat na nejnovější verzi, spusťte az upgrade.
- Tento článek vyžaduje verzi 2.0.30 nebo novější azure CLI. Pokud používáte Azure Cloud Shell, je už nainstalovaná nejnovější verze.
Vytvoření skupiny zdrojů
Pokud máte více než jedno předplatné, nastavte předplatné, na které chcete tyto prostředky nasadit.
Pomocí následujícího příkazu vytvořte skupinu <resourceGroupName>
prostředků v oblasti. Nahraďte <resourceGroupName>
názvem podle svého výběru. Tento kurz používá oblast East US 2
. Další informace najdete v následujícím rychlém startu.
az group create --name <resourceGroupName> --location eastus2
Vytvoření skupiny dostupnosti
Dalším krokem je vytvoření skupiny dostupnosti. V Azure Cloud Shellu spusťte následující příkaz a nahraďte <resourceGroupName>
názvem vaší skupiny prostředků. Zvolte název pro <availabilitySetName>
.
az vm availability-set create \
--resource-group <resourceGroupName> \
--name <availabilitySetName> \
--platform-fault-domain-count 2 \
--platform-update-domain-count 2
Po dokončení příkazu byste měli získat následující výsledky:
{
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
"location": "eastus2",
"name": "<availabilitySetName>",
"platformFaultDomainCount": 2,
"platformUpdateDomainCount": 2,
"proximityPlacementGroup": null,
"resourceGroup": "<resourceGroupName>",
"sku": {
"capacity": null,
"name": "Aligned",
"tier": null
},
"statuses": null,
"tags": {},
"type": "Microsoft.Compute/availabilitySets",
"virtualMachines": []
}
Vytvoření virtuální sítě a podsítě
Vytvořte pojmenovanou podsíť s předem přiřazeným rozsahem IP adres. Nahraďte tyto hodnoty v následujícím příkazu:
<resourceGroupName>
<vNetName>
<subnetName>
az network vnet create \ --resource-group <resourceGroupName> \ --name <vNetName> \ --address-prefix 10.1.0.0/16 \ --subnet-name <subnetName> \ --subnet-prefix 10.1.1.0/24
Předchozí příkaz vytvoří virtuální síť a podsíť obsahující vlastní rozsah IP adres.
Vytvoření virtuálních počítačů s Ubuntu uvnitř skupiny dostupnosti
Získejte seznam imagí virtuálních počítačů, které nabízejí operační systém založený na Ubuntu v Azure.
az vm image list --all --offer "sql2022-ubuntupro2004"
Při hledání imagí BYOS by se měly zobrazit následující výsledky:
[ { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "enterprise_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.221108", "version": "16.0.221108" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "enterprise_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.230207", "version": "16.0.230207" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "enterprise_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.230808", "version": "16.0.230808" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "sqldev_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.221108", "version": "16.0.221108" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "sqldev_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.230207", "version": "16.0.230207" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "sqldev_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.230808", "version": "16.0.230808" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "standard_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.221108", "version": "16.0.221108" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "standard_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.230207", "version": "16.0.230207" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "standard_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.230808", "version": "16.0.230808" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "web_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.221108", "version": "16.0.221108" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "web_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.230207", "version": "16.0.230207" }, { "architecture": "x64", "offer": "sql2022-ubuntupro2004", "publisher": "MicrosoftSQLServer", "sku": "web_upro", "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.230808", "version": "16.0.230808" } ]
Tento kurz používá oblast
Ubuntu 20.04
.Důležité
Názvy počítačů musí být delší než 15 znaků, aby bylo možné nastavit skupinu dostupnosti. Uživatelská jména nesmí obsahovat velká písmena a hesla musí mít 12 až 72 znaků.
Vytvořte tři virtuální počítače ve skupině dostupnosti. Nahraďte tyto hodnoty v následujícím příkazu:
<resourceGroupName>
<VM-basename>
<availabilitySetName>
<VM-Size>
– Příklad by byl "Standard_D16s_v3"<username>
<adminPassword>
<vNetName>
<subnetName>
for i in `seq 1 3`; do az vm create \ --resource-group <resourceGroupName> \ --name <VM-basename>$i \ --availability-set <availabilitySetName> \ --size "<VM-Size>" \ --os-disk-size-gb 128 \ --image "Canonical:0001-com-ubuntu-server-jammy:20_04-lts-gen2:latest" \ --admin-username "<username>" \ --admin-password "<adminPassword>" \ --authentication-type all \ --generate-ssh-keys \ --vnet-name "<vNetName>" \ --subnet "<subnetName>" \ --public-ip-sku Standard \ --public-ip-address "" done
Předchozí příkaz vytvoří virtuální počítače pomocí dříve definované virtuální sítě. Další informace o různých konfiguracích najdete v článku az vm create .
Příkaz obsahuje --os-disk-size-gb
také parametr pro vytvoření vlastní velikosti jednotky operačního systému 128 GB. Pokud tuto velikost později zvětšíte, rozbalte příslušné svazky složek tak, aby vyhovovaly vaší instalaci, nakonfigurujte Správce logických svazků (LVM).
Po dokončení příkazu pro každý virtuální počítač byste měli získat podobné výsledky jako následující:
{
"fqdns": "",
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/ubuntu1",
"location": "westus",
"macAddress": "<Some MAC address>",
"powerState": "VM running",
"privateIpAddress": "<IP1>",
"resourceGroup": "<resourceGroupName>",
"zones": ""
}
Testování připojení k vytvořeným virtuálním počítačům
Připojení ke každému virtuálnímu počítači pomocí následujícího příkazu v Azure Cloud Shellu. Pokud nemůžete najít IP adresy virtuálních počítačů, postupujte podle tohoto rychlého startu ve službě Azure Cloud Shell.
ssh <username>@<publicIPAddress>
Pokud je připojení úspěšné, měl by se zobrazit následující výstup představující terminál Linuxu:
[<username>@ubuntu1 ~]$
Zadáním exit
opustíte relaci SSH.
Konfigurace přístupu SSH bez hesla mezi uzly
Přístup SSH bez hesla umožňuje virtuálním počítačům vzájemně komunikovat pomocí veřejných klíčů SSH. Na každém uzlu musíte nakonfigurovat klíče SSH a tyto klíče zkopírovat do každého uzlu.
Generování nových klíčů SSH
Požadovaná velikost klíče SSH je 4 096 bitů. Na každém virtuálním /root/.ssh
počítači přejděte do složky a spusťte následující příkaz:
ssh-keygen -t rsa -b 4096
Během tohoto kroku se může zobrazit výzva k přepsání existujícího souboru SSH. Musíte souhlasit s touto výzvou. Nemusíte zadávat přístupové heslo.
Kopírování veřejných klíčů SSH
Na každém virtuálním počítači musíte pomocí příkazu zkopírovat veřejný klíč z uzlu, který jste právě vytvořili ssh-copy-id
. Pokud chcete zadat cílový adresář na cílovém virtuálním počítači, můžete použít -i
parametr.
V následujícím příkazu může být účet stejným účtem, <username>
který jste při vytváření virtuálního počítače nakonfigurovali pro každý uzel. Účet můžete použít root
také, ale tato možnost se nedoporučuje v produkčním prostředí.
sudo ssh-copy-id <username>@ubuntu1
sudo ssh-copy-id <username>@ubuntu2
sudo ssh-copy-id <username>@ubuntu3
Ověření přístupu bez hesla z každého uzlu
Pokud chcete ověřit, že se veřejný klíč SSH zkopíroval do každého uzlu, použijte ssh
příkaz z každého uzlu. Pokud jste klíče zkopírovali správně, nezobrazí se výzva k zadání hesla a připojení je úspěšné.
V tomto příkladu se připojujeme k druhému a třetímu uzlu z prvního virtuálního počítače (ubuntu1
). Účet může být opět <username>
stejný účet, který jste nakonfigurovali pro každý uzel při vytváření virtuálního počítače.
ssh <username>@ubuntu2
ssh <username>@ubuntu3
Tento proces opakujte ze všech tří uzlů, aby každý uzel mohl komunikovat s ostatními bez nutnosti hesel.
Konfigurace překladu ip adres
Překlad názvů můžete nakonfigurovat pomocí DNS nebo ručně upravit etc/hosts
soubor na každém uzlu.
Další informace o DNS a Active Directory najdete v tématu Připojení SQL Serveru na hostiteli s Linuxem k doméně služby Active Directory.
Důležité
Doporučujeme použít privátní IP adresu v předchozím příkladu. Použití veřejné IP adresy v této konfiguraci způsobí selhání instalace a zveřejní váš virtuální počítač externím sítím.
Virtuální počítače a jejich IP adresa použité v tomto příkladu jsou uvedené takto:
ubuntu1
: 10.0.0.85ubuntu2
: 10.0.0.86ubuntu3
: 10.0.0.87
Povolení vysoké dostupnosti
Pomocí ssh se připojte ke každému ze tří virtuálních počítačů a po připojení spusťte následující příkazy, které umožní vysokou dostupnost.
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
Instalace a konfigurace clusteru Pacemaker
Pokud chcete začít s konfigurací clusteru Pacemaker, musíte nainstalovat požadované balíčky a agenty prostředků. Na každém virtuálním počítači spusťte následující příkazy:
sudo apt-get install -y pacemaker pacemaker-cli-utils crmsh resource-agents fence-agents csync2 python3-azure
Teď pokračujte vytvořením ověřovacího klíče na primárním serveru:
sudo corosync-keygen
Ověřovací klíč se vygeneruje v /etc/corosync/authkey
umístění. Zkopírujte klíč ověřování na sekundární servery v tomto umístění: /etc/corosync/authkey
sudo scp /etc/corosync/authkey username@ubuntu2:~
sudo scp /etc/corosync/authkey username@ubuntu3:~
Přesuňte ověřovací klíč z domovského adresáře do /etc/corosync
.
sudo mv authkey /etc/corosync/authkey
Pokračujte vytvořením clusteru pomocí následujících příkazů:
cd /etc/corosync/
sudo vi corosync.conf
Upravte soubor Corosync tak, aby zobrazoval obsah takto:
totem {
version: 2
secauth: off
cluster_name: demo
transport: udpu
}
nodelist {
node {
ring0_addr: 10.0.0.85
name: ubuntu1
nodeid: 1
}
node {
ring0_addr: 10.0.0.86
name: ubuntu2
nodeid: 2
}
node {
ring0_addr: 10.0.0.87
name: ubuntu3
nodeid: 3
}
}
quorum {
provider: corosync_votequorum
two_node: 0
}
qb {
ipc_type: native
}
logging {
fileline: on
to_stderr: on
to_logfile: yes
logfile: /var/log/corosync/corosync.log
to_syslog: no
debug: off
}
corosync.conf
Zkopírujte soubor do jiných uzlů do/etc/corosync/corosync.conf
:
sudo scp /etc/corosync/corosync.conf username@ubuntu2:~
sudo scp /etc/corosync/corosync.conf username@ubuntu3:~
sudo mv corosync.conf /etc/corosync/
Restartujte Pacemaker a Corosync a potvrďte stav:
sudo systemctl restart pacemaker corosync
sudo crm status
Výstup vypadá podobně jako v následujícím příkladu:
Cluster Summary:
* Stack: corosync
* Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
* Last updated: Wed Nov 29 07:01:32 2023
* Last change: Sun Nov 26 17:00:26 2023 by hacluster via crmd on ubuntu1
* 3 nodes configured
* 0 resource instances configured
Node List:
* Online: [ ubuntu1 ubuntu2 ubuntu3 ]
Full List of Resources:
* No resources
Konfigurace agenta fencingu
Nakonfigurujte ohraničení v clusteru. Ohraničení je izolace neúspěšného uzlu v clusteru. Restartuje uzel, který selhal, nechá ho přejít dolů, resetovat a vrátit se zpět a znovu se připojit ke clusteru.
Pokud chcete nakonfigurovat ohraničení, proveďte následující akce:
- Registrace nové aplikace v Microsoft Entra ID a vytvoření tajného kódu
- Vytvoření vlastní role ze souboru JSON v PowerShellu nebo rozhraní příkazového řádku
- Přiřazení role a aplikace k virtuálním počítačům v clusteru
- Nastavení vlastností agenta ohraničení
Registrace nové aplikace v Microsoft Entra ID a vytvoření tajného kódu
- Na portálu přejděte na ID Microsoft Entra a poznamenejte si ID tenanta.
- V nabídce na levé straně vyberte Registrace aplikací a pak vyberte Nová registrace.
- Zadejte název a pak vyberte Účty pouze v tomto adresáři organizace.
- Jako typ aplikace vyberte Web, zadejte
http://localhost
jako přihlašovací adresu URL a pak vyberte Zaregistrovat. - V nabídce na levé straně vyberte Certifikáty a tajné kódy a pak vyberte Nový tajný klíč klienta.
- Zadejte popis a vyberte období vypršení platnosti.
- Poznamenejte si hodnotu tajného kódu, použije se jako následující heslo a ID tajného kódu, které se používá jako následující uživatelské jméno.
- Vyberte Přehled a poznamenejte si ID aplikace. Používá se jako následující přihlášení.
Vytvořte volaný fence-agent-role.json
soubor JSON a přidejte následující (přidejte ID předplatného):
{
"Name": "Linux Fence Agent Role-ap-server-01-fence-agent",
"Id": null,
"IsCustom": true,
"Description": "Allows to power-off and start virtual machines",
"Actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"NotActions": [],
"AssignableScopes": [
"/subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
]
}
Vytvoření vlastní role ze souboru JSON v PowerShellu nebo rozhraní příkazového řádku
az role definition create --role-definition fence-agent-role.json
Přiřazení role a aplikace k virtuálním počítačům v clusteru
- Pro každý virtuální počítač v clusteru vyberte v boční nabídce řízení přístupu (IAM).
- Vyberte Přidat přiřazení role (použijte klasické prostředí).
- Vyberte dříve vytvořenou roli.
- V seznamu Vybrat zadejte název aplikace vytvořené dříve.
Teď můžeme vytvořit prostředek agenta pro vytváření fencingu pomocí předchozích hodnot a ID vašeho předplatného:
sudo crm configure primitive fence-vm stonith:fence_azure_arm \
params \
action=reboot \
resourceGroup="resourcegroupname" \
resourceGroup="$resourceGroup" \
username="$secretId" \
login="$applicationId" \
passwd="$password" \
tenantId="$tenantId" \
subscriptionId="$subscriptionId" \
pcmk_reboot_timeout=900 \
power_timeout=60 \
op monitor \
interval=3600 \
timeout=120
Nastavení vlastností agenta ohraničení
Spuštěním následujících příkazů nastavte vlastnosti agenta ohraničení:
sudo crm configure property cluster-recheck-interval=2min
sudo crm configure property start-failure-is-fatal=true
sudo crm configure property stonith-timeout=900
sudo crm configure property concurrent-fencing=true
sudo crm configure property stonith-enabled=true
A potvrďte stav clusteru:
sudo crm status
Výstup vypadá podobně jako v následujícím příkladu:
Cluster Summary:
* Stack: corosync
* Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
* Last updated: Wed Nov 29 07:01:32 2023
* Last change: Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
* 3 nodes configured
* 1 resource instances configured
Node List:
* Online: [ ubuntu1 ubuntu2 ubuntu3 ]
Full List of Resources:
* fence-vm (stonith:fence_azure_arm): Started ubuntu1
Instalace SQL Serveru a nástrojů mssql
K instalaci SQL Serveru se používají následující příkazy:
Import klíčů GPG veřejného úložiště:
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
Zaregistrujte úložiště Ubuntu:
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
Spuštěním následujících příkazů nainstalujte SQL Server:
sudo apt-get update sudo apt-get install -y mssql-server
Po dokončení instalace balíčku spusťte
mssql-conf setup
a postupujte podle pokynů a nastavte heslo SA a zvolte edici. Připomínáme, že následující edice jsou volně licencované: Hodnocení, Vývojář a Express.sudo /opt/mssql/bin/mssql-conf setup
Po dokončení konfigurace ověřte, že je služba spuštěná:
systemctl status mssql-server --no-pager
Instalace nástrojů příkazového řádku SQL Serveru
Pokud chcete vytvořit databázi, musíte se připojit pomocí nástroje, který může spouštět příkazy jazyka Transact-SQL na SQL Serveru. Následující kroky nainstalují nástroje příkazového řádku SQL Serveru: sqlcmd a bcp.
Pomocí následujícího postupu nainstalujte mssql-tools18 na Ubuntu.
Poznámka:
- Ubuntu 18.04 se podporuje od SQL Serveru 2019 CU 3.
- Ubuntu 20.04 se podporuje od SQL Serveru 2019 CU 10.
- Ubuntu 22.04 se podporuje od SQL Serveru 2022 CU 10.
Přejděte do režimu superuživatele.
sudo su
Importujte klíče GPG veřejného úložiště.
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
Zaregistrujte úložiště Microsoft Ubuntu.
Pro Ubuntu 22.04 použijte následující příkaz:
curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
Pro Ubuntu 20.04 použijte následující příkaz:
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
Pro Ubuntu 18.04 použijte následující příkaz:
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
Pro Ubuntu 16.04 použijte následující příkaz:
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
Ukončete režim superuživatele.
exit
Aktualizujte seznam zdrojů a spusťte instalační příkaz pomocí vývojářského balíčku unixODBC.
sudo apt-get update sudo apt-get install mssql-tools18 unixodbc-dev
Poznámka:
Pokud chcete aktualizovat na nejnovější verzi nástroje mssql-tools, spusťte následující příkazy:
sudo apt-get update sudo apt-get install mssql-tools18
Volitelné: Přidejte
/opt/mssql-tools18/bin/
doPATH
proměnné prostředí bash.Pokud chcete, aby sqlcmd a bcp byly přístupné z prostředí Bash pro relace přihlášení, upravte soubor
~/.bash_profile
PATH
pomocí následujícího příkazu:echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
Pokud chcete, aby sqlcmd a bcp byly přístupné z prostředí Bash pro interaktivní relace nebo relace bez přihlášení, upravte
PATH
soubor~/.bashrc
následujícím příkazem:echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc source ~/.bashrc
Instalace agenta s vysokou dostupností SQL Serveru
Spuštěním následujícího příkazu na všech uzlech nainstalujte balíček agenta s vysokou dostupností pro SQL Server:
sudo apt-get install mssql-server-ha
Konfigurace skupiny dostupnosti
Pomocí následujícího postupu nakonfigurujte skupinu dostupnosti AlwaysOn SQL Serveru pro vaše virtuální počítače. Další informace najdete v tématu Konfigurace skupin dostupnosti AlwaysOn SQL Serveru pro zajištění vysoké dostupnosti v Linuxu.
Povolení skupin dostupnosti a restartování SQL Serveru
Povolte skupiny dostupnosti na každém uzlu, který je hostitelem instance SQL Serveru. Potom službu restartujte mssql-server
. Na každém uzlu spusťte následující příkazy:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
Vytvoření certifikátu
Microsoft nepodporuje ověřování Active Directory pro koncový bod skupiny dostupnosti. Proto musíte použít certifikát pro šifrování koncového bodu skupiny dostupnosti.
Připojení ke všem uzlům pomocí aplikace SQL Server Management Studio (SSMS) nebo sqlcmd. Spuštěním následujících příkazů povolte AlwaysOn_health relaci a vytvořte hlavní klíč:
Důležité
Pokud se ke své instanci SQL Serveru připojujete vzdáleně, budete muset mít na bráně firewall otevřený port 1433. Pro každý virtuální počítač budete také muset povolit příchozí připojení k portu 1433 ve skupině zabezpečení sítě. Další informace najdete v tématu Vytvoření pravidla zabezpečení pro vytvoření příchozího pravidla zabezpečení.
<MasterKeyPassword>
Nahraďte ho vlastním heslem.
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE = ON); GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>'; GO
Připojení k primární replice pomocí SSMS nebo sqlcmd. Následující příkazy vytvoří certifikát na
/var/opt/mssql/data/dbm_certificate.cer
primární replice SQL Serveru a privátní klíčvar/opt/mssql/data/dbm_certificate.pvk
:<PrivateKeyPassword>
Nahraďte ho vlastním heslem.
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm'; GO 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 = '<PrivateKeyPassword>' ); GO
Ukončete relaci sqlcmd spuštěním exit
příkazu a vraťte se zpět do relace SSH.
Zkopírujte certifikát do sekundárních replik a vytvořte certifikáty na serveru.
Zkopírujte dva soubory vytvořené do stejného umístění na všech serverech, které budou hostovat repliky dostupnosti.
Na primárním serveru spusťte následující
scp
příkaz, který zkopíruje certifikát na cílové servery:- Nahraďte
<username>
uživatelské jméno asles2
cílový název virtuálního počítače, který používáte. - Spusťte tento příkaz pro všechny sekundární repliky.
Poznámka:
Nemusíte spouštět
sudo -i
, což vám dává kořenové prostředí. Příkaz můžete spustitsudo
před každým příkazem.# The below command allows you to run commands in the root environment sudo -i
scp /var/opt/mssql/data/dbm_certificate.* <username>@sles2:/home/<username>
- Nahraďte
Na cílovém serveru spusťte následující příkaz:
- Nahraďte
<username>
svým uživatelským jménem. - Příkaz
mv
přesune soubory nebo adresář z jednoho místa do jiného. - Příkaz
chown
slouží ke změně vlastníka a skupiny souborů, adresářů nebo odkazů. - Spusťte tyto příkazy pro všechny sekundární repliky.
sudo -i mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/ cd /var/opt/mssql/data chown mssql:mssql dbm_certificate.*
- Nahraďte
Následující skript Transact-SQL vytvoří certifikát ze zálohy, kterou jste vytvořili na primární replice SQL Serveru. Aktualizujte skript silnými hesly. Dešifrovací heslo je stejné heslo, které jste použili k vytvoření souboru .pvk v předchozím kroku. Pokud chcete vytvořit certifikát, spusťte následující skript pomocí sqlcmd nebo SSMS na všech sekundárních serverech:
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 = '<PrivateKeyPassword>' ); GO
Vytvoření koncových bodů zrcadlení databáze na všech replikách
Ve všech instancích SQL Serveru pomocí sqlcmd nebo SSMS spusťte následující skript:
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
ROLE = ALL,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GO
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GO
Vytvoření skupiny dostupnosti
Připojení k instanci SQL Serveru, která je hostitelem primární repliky pomocí sqlcmd nebo SSMS. Spuštěním následujícího příkazu vytvořte skupinu dostupnosti:
- Nahraďte
ag1
požadovaným názvem skupiny dostupnosti. ubuntu1
Nahraďte hodnoty aubuntu2
ubuntu3
názvy instancí SYSTÉMU SQL Server, které hostují repliky.
CREATE AVAILABILITY
GROUP [ag1]
WITH (
DB_FAILOVER = ON,
CLUSTER_TYPE = EXTERNAL
)
FOR REPLICA
ON N'ubuntu1'
WITH (
ENDPOINT_URL = N'tcp://ubuntu1:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'ubuntu2'
WITH (
ENDPOINT_URL = N'tcp://ubuntu2:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'ubuntu3'
WITH (
ENDPOINT_URL = N'tcp://ubuntu3:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
GO
ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO
Vytvoření přihlášení k SQL Serveru pro Pacemaker
Ve všech instancích SQL Serveru vytvořte přihlášení k SQL Serveru pro Pacemaker. Následující transact-SQL vytvoří přihlášení.
- Nahraďte
<password>
vlastním složitým heslem.
USE [master]
GO
CREATE LOGIN [pacemakerLogin]
WITH PASSWORD = N'<password>';
GO
ALTER SERVER ROLE [sysadmin]
ADD MEMBER [pacemakerLogin];
GO
Ve všech instancích SQL Serveru uložte přihlašovací údaje použité pro přihlášení k SQL Serveru.
Vytvořte soubor:
sudo vi /var/opt/mssql/secrets/passwd
Do souboru přidejte následující dva řádky:
pacemakerLogin <password>
Pokud chcete ukončit editor vi , nejprve stiskněte klávesu Esc a pak zadejte příkaz
:wq
pro zápis souboru a ukončení.Nastavení souboru jen pro čtení pomocí kořenového adresáře:
sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwd
Připojení sekundárních replik ke skupině dostupnosti
Na sekundárních replikách spusťte následující příkazy, které je připojí ke skupině dostupnosti:
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; GO
Na primární replice a každé sekundární replice spusťte následující skript jazyka Transact-SQL:
GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemakerLogin; GO GRANT VIEW SERVER STATE TO pacemakerLogin; GO
Jakmile jsou sekundární repliky připojené, můžete je zobrazit v nástroji SSMS Průzkumník objektů rozbalením uzlu s vysokou dostupností AlwaysOn:
Přidání databáze do skupiny dostupnosti
Tato část se řídí článkem pro přidání databáze do skupiny dostupnosti.
V tomto kroku se používají následující příkazy jazyka Transact-SQL. Na primární replice spusťte tyto příkazy:
CREATE DATABASE [db1]; -- creates a database named db1
GO
ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery mode
GO
BACKUP DATABASE [db1] -- backs up the database to disk
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO
Ověřte, že je databáze vytvořená na sekundárních serverech.
Na každé sekundární replice SQL Serveru spusťte následující dotaz, abyste zjistili, jestli se databáze db1 vytvořila a je ve stavu SYNCHRONIZOVANÁ:
SELECT * FROM sys.databases
WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database',
synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
GO
Pokud jsou synchronization_state_desc
seznamy synchronizovány pro db1
, znamená to, že repliky jsou synchronizovány. Sekundární soubory se zobrazují db1
v primární replice.
Vytvoření prostředků skupiny dostupnosti v clusteru Pacemaker
Pokud chcete vytvořit prostředek skupiny dostupnosti v Pacemakeru, spusťte následující příkazy:
sudo crm
configure
primitive ag1_cluster \
ocf:mssql:ag \
params ag_name="ag1" \
meta failure-timeout=60s \
op start timeout=60s \
op stop timeout=60s \
op promote timeout=60s \
op demote timeout=10s \
op monitor timeout=60s interval=10s \
op monitor timeout=60s on-fail=demote interval=11s role="Master" \
op monitor timeout=60s interval=12s role="Slave" \
op notify timeout=60s
ms ms-ag1 ag1_cluster \
meta master-max="1" master-node-max="1" clone-max="3" \
clone-node-max="1" notify="true"
commit
Tento výše uvedený příkaz vytvoří prostředek ag1_cluster, tj. prostředek skupiny dostupnosti. Pak vytvoří prostředek ms-ag1 (primární/sekundární prostředek v Pacemakeru a pak do něj přidá prostředek skupiny dostupnosti. Tím se zajistí, že prostředek skupiny dostupnosti běží na všech třech uzlech v clusteru, ale pouze jeden z těchto uzlů je primární.)
Pokud chcete zobrazit prostředek skupiny dostupnosti a zkontrolovat stav clusteru:
sudo crm resource status ms-ag1
sudo crm status
Výstup vypadá podobně jako v následujícím příkladu:
resource ms-ag1 is running on: ubuntu1 Master
resource ms-ag1 is running on: ubuntu3
resource ms-ag1 is running on: ubuntu2
Výstup vypadá podobně jako v následujícím příkladu. Pokud chcete přidat omezení kolokace a povýšení, přečtěte si kurz : Konfigurace naslouchacího procesu skupiny dostupnosti na virtuálních počítačích s Linuxem.
Cluster Summary:
* Stack: corosync
* Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
* Last updated: Wed Nov 29 07:01:32 2023
* Last change: Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
* 3 nodes configured
* 4 resource instances configured
Node List:
* Online: [ ubuntu1 ubuntu2 ubuntu3 ]
Full List of Resources:
* Clone Set: ms-ag1 [ag1_cluster] (promotable):
* Masters: [ ubuntu1 ]
* Slaves : [ ubuntu2 ubuntu3 ]
* fence-vm (stonith:fence_azure_arm): Started ubuntu1
Spuštěním následujícího příkazu vytvořte prostředek skupiny, aby se omezení kolokace a povýšení použitá u naslouchacího procesu a nástroje pro vyrovnávání zatížení nemusela používat jednotlivě.
sudo crm configure group virtualip-group azure-load-balancer virtualip
Výstup crm status
bude vypadat podobně jako v následujícím příkladu:
Cluster Summary:
* Stack: corosync
* Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
* Last updated: Wed Nov 29 07:01:32 2023
* Last change: Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
* 3 nodes configured
* 6 resource instances configured
Node List:
* Online: [ ubuntu1 ubuntu2 ubuntu3 ]
Full List of Resources:
* Clone Set: ms-ag1 [ag1_cluster] (promotable):
* Masters: [ ubuntu1 ]
* Slaves : [ ubuntu2 ubuntu3 ]
* Resource Group: virtual ip-group:
* azure-load-balancer (ocf :: heartbeat:azure-lb): Started ubuntu1
* virtualip (ocf :: heartbeat: IPaddr2): Started ubuntu1
* fence-vm (stonith:fence_azure_arm): Started ubuntu1