Sdílet prostřednictvím


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
  • Nakonfigurujte agenta ve fencování vytvořením zařízení STONITH
  • Instalace SQL Serveru a nástrojů mssql-tools na Ubuntu
  • Konfigurovat skupinu dostupnosti Always On pro SQL Server
  • Konfigurujte prostředky skupiny dostupnosti (AG) v clusteru Pacemaker
  • Otestujte převzetí služeb při selhání a fencovacího agenta

Poznámka:

Tento článek obsahuje odkazy na termín slave (podřízený) , což je termín, který už Microsoft nepoužívá. Když se termín odebere ze softwaru, odebereme ho z tohoto č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

  • 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é, do kterého chcete tyto prostředky nasadit.

Pomocí následujícího příkazu vytvořte skupinu prostředků <resourceGroupName> v oblasti. Nahraďte <resourceGroupName> názvem podle vašeho výběru. Tento tutoriál používá East US 2. Další informace najdete v následujícím Rychlý Start.

az group create --name <resourceGroupName> --location eastus2

Vytvořte skupinu dostupnosti

Dalším krokem je vytvoření sady pro dostupnost. V Azure Cloud Shellu spusťte následující příkaz a nahraďte <resourceGroupName> názvem vaší skupiny prostředků. Zvolte název <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ě

  1. 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

  1. Získejte seznam imagí virtuálních počítačů, které nabízejí operační systém založený na Ubuntu v Azure z Canonicalu.

     az vm image list --all --publisher "Canonical"
    

    Tento tutoriál používá Ubuntu 20.04.

    Důležité

    Názvy počítačů musí mít délku méně 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ů.

  2. 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 také parametr --os-disk-size-gb pro vytvoření vlastní jednotky operačního systému o velikosti 128 GB. Pokud tuto velikost později zvětšíte, rozbalte příslušné svazky složek tak, aby vyhovovaly vaší instalaci, nakonfigurujteSprá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

Ke každému virtuálnímu počítači se připojte 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 počítači přejděte do složky /root/.ssh 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 ssh-copy-id zkopírovat veřejný klíč z právě vytvořeného uzlu. Pokud chcete zadat cílový adresář na cílovém virtuálním počítači, můžete použít parametr -i.

V následujícím příkazu může být účet <username> stejný účet, který jste nakonfigurovali pro každý uzel při vytváření virtuálního počítače. Můžete také použít účet root, 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 příkaz ssh 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 <username> může být opět 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 názvů

Překlad názvů můžete nakonfigurovat pomocí DNS nebo ruční úpravou souboru etc/hosts 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.85
  • ubuntu2: 10.0.0.86
  • ubuntu3: 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žňují 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 na umístění /etc/corosync/authkey. 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
}

Zkopírujte soubor corosync.conf 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

Nastavení agenta oplocení

Nakonfigurujte ohraničení v clusteru. fencingu je izolace uzlu, který selhal 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:

  1. Registrace nové aplikace v Microsoft Entra ID a vytvoření tajného kódu
  2. Vytvoření vlastní role ze souboru JSON v PowerShellu nebo rozhraní příkazového řádku
  3. Přiřazení role a aplikace k virtuálním počítačům v clusteru
  4. Nastavení vlastností agenta oplocení

Registrace nové aplikace v Microsoft Entra ID a vytvoření tajného kódu

  1. Na portálu přejděte na ID Microsoft Entra a poznamenejte si ID tenanta.
  2. V nabídce na levé straně vyberte Registrace aplikací a pak vyberte Nová registrace.
  3. Zadejte název a pak vyberte Účty pouze v tomto adresáři organizace.
  4. Pro typ aplikacevyberte Web, zadejte http://localhost jako URL pro přihlášení, a pak vyberte Zaregistrovat.
  5. V nabídce na levé straně vyberte Certifikáty a tajné kódy a pak vyberte Nový tajný klíč klienta.
  6. Zadejte popis a vyberte období vypršení platnosti.
  7. Poznamenejte si hodnotu tajemství, použije se jako následující heslo, a ID tajemství se použije jako následující uživatelské jméno.
  8. Vyberte Přehled a poznamenejte si ID aplikace. Používá se jako následující přihlášení.

Vytvořte soubor JSON s názvem fence-agent-role.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

  1. Pro každý virtuální počítač v clusteru vyberte řízení přístupu (IAM) z boční nabídky.
  2. Vyberte Přidat přiřazení role (použijte klasické rozhraní).
  3. Vyberte dříve vytvořenou roli.
  4. V seznamu Vybrat zadejte název aplikace vytvořené dříve.

Nyní můžeme vytvořit prostředek agenta pro fencing 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 oplocení

Spusťte následující příkazy pro nastavení vlastností fencing agenta:

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:

  1. 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
    
  2. Zaregistrujte úložiště Ubuntu:

    sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
    
  3. Spuštěním následujících příkazů nainstalujte SQL Server:

    sudo apt-get update
    sudo apt-get install -y mssql-server
    
  4. Po dokončení instalace balíčku spusťte mssql-conf setup a podle pokynů nastavte heslo SA a zvolte svoji 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
    
  5. Po dokončení konfigurace ověřte, že je služba spuštěná:

    systemctl status mssql-server --no-pager
    
  6. 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 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.
  1. Přejděte do režimu superuživatele.

    sudo su
    
  2. 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
    
  3. 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
      
  4. Ukončete režim superuživatele.

    exit
    
  5. 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
    
  6. Volitelné: Do proměnné prostředí /opt/mssql-tools18/bin/ v bash shellu přidejte PATH.

    Pokud chcete zpřístupnit sqlcmd a bcp z prostředí Bash pro relace přihlášení, upravte PATH v souboru ~/.bash_profile následujícím příkazem:

    echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
    

    Pokud chcete sqlcmd a bcp zpřístupnit z shellu bash pro interaktivní nebo nepřihlašovací relace, upravte PATH v souboru ~/.bashrc pomocí tohoto příkazu:

    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 Always On dostupnostních skupin SQL Serveru pro zajištění vysoké dostupnosti na Linuxu.

Povolení skupin dostupnosti a restartování SQL Serveru

Povolte skupiny dostupnosti na každém uzlu, který je hostitelem instance SQL Serveru. Potom restartujte službu 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 AG.

  1. Připojte se ke všechny uzly 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. Také budete muset povolit příchozí připojení k portu 1433 ve skupině zabezpečení sítě (NSG) pro každý virtuální počítač. Další informace najdete v tématu Vytvoření pravidla zabezpečení pro vytvoření příchozího pravidla zabezpečení.

    • Nahraďte <MasterKeyPassword> vlastním heslem.
    ALTER EVENT SESSION AlwaysOn_health ON SERVER
    WITH (STARTUP_STATE = ON);
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>';
    GO
    
  2. Připojte se k primární replice pomocí SSMS nebo sqlcmd. Následující příkazy vytvoří certifikát na /var/opt/mssql/data/dbm_certificate.cer a privátní klíč na var/opt/mssql/data/dbm_certificate.pvk na primární replice SQL Serveru:

    • Nahraďte <PrivateKeyPassword> 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 příkazu exit 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.

  1. Zkopírujte dva vytvořené soubory do stejného umístění na všech serverech, které budou hostovat dostupnostní repliky.

    Na primárním serveru spusťte následující příkaz scp, který zkopíruje certifikát na cílové servery:

    • Nahraďte <username> a sles2 uživatelským jménem a cílovým názvem 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, který vám poskytuje kořenové prostředí. Příkaz sudo můžete spustit 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>
    
  2. 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.*
    
  3. 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řte koncové body pro zrcadlení databáze na všech replikách

Na všech instancích SQL Serveru spusťte následující skript pomocí sqlcmd nebo SSMS:

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řipojte se 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 AG.
  • Nahraďte hodnoty ubuntu1, ubuntu2a 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.

  1. Vytvořte soubor:

    sudo vi /var/opt/mssql/secrets/passwd
    
  2. Do souboru přidejte následující dva řádky:

    pacemakerLogin
    <password>
    

    Pokud chcete ukončit editor vi, nejprve stiskněte klávesu Esc a potom zadejte příkaz :wq pro zápis souboru a ukončení.

  3. 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

  1. 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
    
  2. Na primární replice a každé sekundární replice spusťte následující skript Transact-SQL:

    GRANT ALTER, CONTROL, VIEW DEFINITION
        ON AVAILABILITY GROUP::ag1 TO pacemakerLogin;
    GO
    
    GRANT VIEW SERVER STATE TO pacemakerLogin;
    GO
    
  3. Jakmile jsou sekundární repliky připojené, můžete je zobrazit v Průzkumníku objektů SSMS rozbalením vysoké dostupnosti AlwaysOn uzlu:

    Snímek obrazovky ukazuje repliky primární a sekundární dostupnosti.

Přidání databáze do skupiny dostupnosti

Tato část navazuje na článek o přidání databáze do skupiny dostupnosti.

V tomto kroku se používají následující příkazy 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 synchronization_state_desc obsahuje seznam SYNCHRONIZOVANÝCH pro db1, znamená to, že repliky se synchronizují. Sekundární soubory zobrazují db1 v primární replice.

Vytvoření zdrojů 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í.)

Chcete-li zobrazit prostředek skupiny AG 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 propagace, přečtěte si téma Kurz: Konfigurace naslouchacího procesu pro skupinu 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 promoce použitá u naslouchacího 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

Další krok