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
  • 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

  • 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ě

  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.

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

  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 --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.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ž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:

  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 ohraničení

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. Jako typ aplikace vyberte Web, zadejte http://localhost jako přihlašovací adresu URL 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 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.
  8. 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

  1. Pro každý virtuální počítač v clusteru vyberte v boční nabídce řízení přístupu (IAM).
  2. Vyberte Přidat přiřazení role (použijte klasické prostředí).
  3. Vyberte dříve vytvořenou roli.
  4. 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:

  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 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
    
  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 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.
  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é: Přidejte /opt/mssql-tools18/bin/ do PATH 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_profilePATH 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.

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

  1. 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 a sles2 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 spustit sudo 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ř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.
  • ubuntu1Nahraďte hodnoty a ubuntu2ubuntu3 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 pak 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 jazyka 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 nástroji SSMS Průzkumník objektů rozbalením uzlu s vysokou dostupností AlwaysOn:

    Screenshot shows the primary and secondary availability replicas.

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

Další krok