Kurz: Konfigurace skupin dostupnosti pro SQL Server na virtuálních počítačích RHEL v Azure

Platí pro:SQL Server na virtuálním počítači Azure

Poznámka:

V tomto kurzu používáme SQL Server 2017 (14.x) s RHEL 7.6, ale ke konfiguraci vysoké dostupnosti je možné použít SQL Server 2019 (15.x) v RHEL 7 nebo RHEL 8. Příkazy pro konfiguraci clusteru Pacemaker a prostředků skupiny dostupnosti se v RHEL 8 změnily. Další informace o správných příkazech najdete v článku Vytvoření prostředku skupiny dostupnosti a prostředků RHEL 8.

V tomto kurzu se naučíte:

  • Vytvoření nové skupiny prostředků, skupiny dostupnosti a virtuálních počítačů s Linuxem
  • 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 RHEL
  • 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

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. Pro účely tohoto kurzu používáme 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ích počítačů RHEL v rámci skupiny dostupnosti

Upozorňující

Pokud zvolíte image RHEL s průběžným platbami (PAYG) a nakonfigurujete vysokou dostupnost (HA), možná budete muset zaregistrovat své předplatné. To může způsobit, že za předplatné platíte dvakrát, protože se vám bude účtovat předplatné Microsoft Azure RHEL pro virtuální počítač a předplatné Red Hatu. Další informace najdete na webu https://access.redhat.com/solutions/2458541.

Abyste se vyhnuli dvojitému účtování, při vytváření virtuálního počítače Azure použijte image RHEL HA. Image nabízené jako image RHEL-HA jsou také image s průběžnými platbami s předvoleným úložištěm HA.

  1. Získejte seznam imagí virtuálních počítačů, které nabízejí RHEL s vysokou dostupností:

    az vm image list --all --offer "RHEL-HA"
    

    Měly by se vám zobrazit následující výsledky:

    [
      {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "7.4",
    "urn": "RedHat:RHEL-HA:7.4:7.4.2019062021",
    "version": "7.4.2019062021"
       },
       {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "7.5",
    "urn": "RedHat:RHEL-HA:7.5:7.5.2019062021",
    "version": "7.5.2019062021"
        },
        {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "7.6",
    "urn": "RedHat:RHEL-HA:7.6:7.6.2019062019",
    "version": "7.6.2019062019"
         },
         {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "8.0",
    "urn": "RedHat:RHEL-HA:8.0:8.0.2020021914",
    "version": "8.0.2020021914"
         },
         {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "8.1",
    "urn": "RedHat:RHEL-HA:8.1:8.1.2020021914",
    "version": "8.1.2020021914"
          },
          {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "80-gen2",
    "urn": "RedHat:RHEL-HA:80-gen2:8.0.2020021915",
    "version": "8.0.2020021915"
           },
           {
    "offer": "RHEL-HA",
    "publisher": "RedHat",
    "sku": "81_gen2",
    "urn": "RedHat:RHEL-HA:81_gen2:8.1.2020021915",
    "version": "8.1.2020021915"
           }
    ]
    

    Pro účely tohoto kurzu vybíráme image RedHat:RHEL-HA:7.6:7.6.2019062019 pro příklad RHEL 7 a zvolíme RedHat:RHEL-HA:8.1:8.1.2020021914 příklad RHEL 8.

    Můžete také zvolit SQL Server 2019 (15.x) předinstalovaný na imagích RHEL8-HA. Pokud chcete získat seznam těchto imagí, spusťte následující příkaz:

    az vm image list --all --offer "sql2019-rhel8"
    

    Měly by se vám zobrazit následující výsledky:

    [
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "enterprise",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200317",
          "version": "15.0.200317"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "enterprise",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200512",
          "version": "15.0.200512"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "sqldev",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200317",
          "version": "15.0.200317"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "sqldev",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200512",
          "version": "15.0.200512"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "standard",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200317",
          "version": "15.0.200317"
       },
       {
          "offer": "sql2019-rhel8",
          "publisher": "MicrosoftSQLServer",
          "sku": "standard",
          "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200512",
          "version": "15.0.200512"
       }
    ]
    

    Pokud k vytvoření virtuálních počítačů použijete některou z výše uvedených imagí, má předinstalovaný SQL Server 2019 (15.x). Přeskočte část Install SQL Server and mssql-tools, jak je popsáno v tomto článku.

    Důležité

    Názvy počítačů musí být kratší než 15 znaků, aby bylo možné nastavit skupinu dostupnosti. Uživatelské jméno nesmí obsahovat velká písmena a hesla musí obsahovat více než 12 znaků.

  2. Chceme vytvořit 3 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_D16_v3"
    • <username>
    • <adminPassword>
    for i in `seq 1 3`; do
           az vm create \
             --resource-group <resourceGroupName> \
             --name <VM-basename>$i \
             --availability-set <availabilitySetName> \
             --size "<VM-Size>"  \
             --image "RedHat:RHEL-HA:7.6:7.6.2019062019" \
             --admin-username "<username>" \
             --admin-password "<adminPassword>" \
             --authentication-type all \
             --generate-ssh-keys
    done
    

Výše uvedený příkaz vytvoří virtuální počítače a vytvoří výchozí virtuální síť pro tyto virtuální počítače. Další informace o různých konfiguracích najdete v článku az vm create .

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/<VM1>",
  "location": "eastus2",
  "macAddress": "<Some MAC address>",
  "powerState": "VM running",
  "privateIpAddress": "<IP1>",
  "publicIpAddress": "",
  "resourceGroup": "<resourceGroupName>",
  "zones": ""
}

Důležité

Výchozí image vytvořená pomocí výše uvedeného příkazu ve výchozím nastavení vytvoří disk s operačním systémem o 32 GB. Při této výchozí instalaci by mohlo dojít k výpadku místa. Následující parametr přidaný do výše uvedeného az vm create příkazu můžete použít k vytvoření disku s operačním systémem s 128 GB jako příklad: --os-disk-size-gb 128.

Pokud potřebujete rozšířit příslušné svazky složek tak, aby vyhovovaly instalaci, můžete pak nakonfigurovat Správce logických svazků (LVM ).

Testování připojení k vytvořeným virtuálním počítačům

Připojení do virtuálního počítače 1 nebo jiných virtuálních počítačů 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>@<VM1> ~]$

Zadáním exit opustíte relaci SSH.

Povolení vysoké dostupnosti

Důležité

Abyste mohli dokončit tuto část kurzu, musíte mít předplatné pro RHEL a doplněk pro vysokou dostupnost. Pokud používáte obrázek doporučený v předchozí části, nemusíte registrovat jiné předplatné.

Připojení ke každému uzlu virtuálního počítače a podle tohoto průvodce povolte vysokou dostupnost. Další informace najdete v tématu povolení předplatného s vysokou dostupností pro RHEL.

Tip

Bude jednodušší, pokud otevřete relaci SSH pro každý virtuální počítač současně, protože stejné příkazy se budou muset spouštět na každém virtuálním počítači v celém článku.

Pokud kopírujete a vkládáte více sudo příkazů a zobrazí se výzva k zadání hesla, další příkazy se nespustí. Jednotlivé příkazy spusťte samostatně.

  1. Pokud chcete otevřít porty brány firewall Pacemaker, spusťte na každém virtuálním počítači následující příkazy:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    
  2. Pomocí následujících příkazů aktualizujte a nainstalujte balíčky Pacemaker na všechny uzly:

    Poznámka:

    Nmap se instaluje jako součást tohoto bloku příkazů jako nástroj pro vyhledání dostupných IP adres ve vaší síti. Nemusíte instalovat nmap, ale bude užitečné později v tomto kurzu.

    sudo yum update -y
    sudo yum install -y pacemaker pcs fence-agents-all resource-agents fence-agents-azure-arm nmap
    sudo reboot
    
  3. Nastavte heslo pro výchozího uživatele, který se vytvoří při instalaci balíčků Pacemaker. Na všech uzlech použijte stejné heslo.

    sudo passwd hacluster
    
  4. Pomocí následujícího příkazu otevřete soubor hostitelů a nastavte překlad názvů hostitelů. Další informace najdete v tématu Konfigurace skupiny dostupnosti při konfiguraci souboru hostitelů.

    sudo vi /etc/hosts
    

    V editoru vi zadejte i text a na prázdný řádek přidejte privátní IP adresu odpovídajícího virtuálního počítače. Potom přidejte název virtuálního počítače za mezeru vedle IP adresy. Každý řádek by měl mít samostatnou položku.

    <IP1> <VM1>
    <IP2> <VM2>
    <IP3> <VM3>
    

    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 nedoporučujeme vystavit virtuální počítač externím sítím.

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

Vytvoření clusteru Pacemaker

V této části povolíte a spustíte službu pcsd a pak nakonfigurujete cluster. Pro SQL Server v Linuxu se prostředky clusteru nevytvořily automaticky. Potřebujete povolit a vytvořit prostředky Pacemakeru ručně. Další informace najdete v článku o konfiguraci instance clusteru s podporou převzetí služeb při selhání pro RHEL.

Povolení a spuštění služby PCSD a Pacemakeru

  1. Spusťte příkazy na všech uzlech. Tyto příkazy umožňují uzlům po restartování každého uzlu znovu připojit cluster.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  2. Odeberte všechny existující konfigurace clusteru ze všech uzlů. Spusťte následující příkaz:

    sudo pcs cluster destroy
    sudo systemctl enable pacemaker
    
  3. Na primárním uzlu spusťte následující příkazy pro nastavení clusteru.

    • Při spuštění pcs cluster auth příkazu k ověření uzlů clusteru se zobrazí výzva k zadání hesla. Zadejte heslo pro uživatele hacluster vytvořeného dříve.

    RHEL7

    sudo pcs cluster auth <VM1> <VM2> <VM3> -u hacluster
    sudo pcs cluster setup --name az-hacluster <VM1> <VM2> <VM3> --token 30000
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    RHEL8

    V případě RHEL 8 je potřeba uzly ověřit samostatně. Po zobrazení výzvy ručně zadejte uživatelské jméno a heslo pro hacluster .

    sudo pcs host auth <node1> <node2> <node3>
    sudo pcs cluster setup <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    
  4. Spuštěním následujícího příkazu zkontrolujte, jestli jsou všechny uzly online.

    sudo pcs status
    

    RHEL 7

    Pokud jsou všechny uzly online, zobrazí se výstup podobný následujícímu příkladu:

    Cluster name: az-hacluster
    
    WARNINGS:
    No stonith devices and stonith-enabled is not false
    
    Stack: corosync
    Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
    Last updated: Fri Aug 23 18:27:57 2019
    Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2>
    
    3 nodes configured
    0 resources configured
    
    Online: [ <VM1> <VM2> <VM3> ]
    
    No resources
    
    Daemon Status:
          corosync: active/enabled
          pacemaker: active/enabled
          pcsd: active/enabled
    

    RHEL 8

    Cluster name: az-hacluster
    
    WARNINGS:
    No stonith devices and stonith-enabled is not false
    
    Cluster Summary:
      * Stack: corosync
      * Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
      * Last updated: Fri Aug 23 18:27:57 2019
      * Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2>
      * 3 nodes configured
      * 0 resource instances configured
    
    Node List:
      * Online: [ <VM1> <VM2> <VM3> ]
    
    Full List of Resources:
      * No resources
    
    Daemon Status:
      * corosync: active/enabled
      * pacemaker: active/enabled
      * pcsd: active/enabled
    
  5. Nastavte očekávané hlasy v živém clusteru na 3. Tento příkaz ovlivní pouze živý cluster a nezmění konfigurační soubory.

    Na všechuzch

    sudo pcs quorum expected-votes 3
    

Konfigurace agenta fencingu

Pokud chcete nakonfigurovat agenta fencingu, pro účely tohoto kurzu jsou upraveny následující pokyny. Další informace najdete v tématu vytvoření zařízení STONITH.

Zkontrolujte verzi agenta Azure Plot a ujistěte se, že je aktualizovaná. Použijte následující příkaz:

sudo yum info fence-agents-azure-arm

Měl by se zobrazit podobný výstup jako v následujícím příkladu.

Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
Name        : fence-agents-azure-arm
Arch        : x86_64
Version     : 4.2.1
Release     : 11.el7_6.8
Size        : 28 k
Repo        : installed
From repo   : rhel-ha-for-rhel-7-server-eus-rhui-rpms
Summary     : Fence agent for Azure Resource Manager
URL         : https://github.com/ClusterLabs/fence-agents
License     : GPLv2+ and LGPLv2+
Description : The fence-agents-azure-arm package contains a fence agent for Azure instances.

Registrace nové aplikace v Microsoft Entra ID

Pokud chcete zaregistrovat novou aplikaci v Microsoft Entra ID (dříve Azure Active Directory), postupujte takto:

  1. Umožňuje přejít na https://portal.azure.com.
  2. Otevřete podokno Vlastnosti ID Microsoft Entra a poznamenejte si .Tenant ID
  3. Vyberte Registrace aplikací.
  4. Vyberte Nová registrace.
  5. Zadejte název, například <resourceGroupName>-app. U podporovaných typů účtů vyberte Účty pouze v tomto organizačním adresáři (pouze Microsoft – jeden tenant).
  6. Vyberte web pro identifikátor URI přesměrování a zadejte adresu URL (například http://localhost) a vyberte Přidat. Přihlašovací adresa URL může být libovolná platná adresa URL. Po dokončení vyberte Zaregistrovat.
  7. Zvolte Certifikáty a tajné kódy pro novou registraci aplikace a pak vyberte Nový tajný klíč klienta.
  8. Zadejte popis nového klíče (tajný klíč klienta) a pak vyberte Přidat.
  9. Poznamenejte si hodnotu tajného kódu. Používá se jako heslo pro instanční objekt.
  10. Vyberte Přehled. Poznamenejte si ID aplikace. Používá se jako uživatelské jméno (přihlašovací ID v následujících krocích) instančního objektu.

Vytvoření vlastní role pro agenta plotu

Postupujte podle kurzu a vytvořte vlastní roli Azure pomocí Azure CLI.

Soubor JSON by měl vypadat podobně jako v následujícím příkladu:

  • Nahraďte <username> názvem podle svého výběru. Při vytváření této definice role se tím zabráníte duplicitám.
  • Nahraďte <subscriptionId> ID předplatného Azure.
{
  "Name": "Linux Fence Agent Role-<username>",
  "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/<subscriptionId>"
  ]
}

Pokud chcete přidat roli, spusťte následující příkaz:

  • Nahraďte <filename> názvem souboru.
  • Pokud provádíte příkaz z jiné cesty než ze složky, do které je soubor uložený, vložte do příkazu cestu ke složce souboru.
az role definition create --role-definition "<filename>.json"

Měl by se zobrazit následující výstup:

{
  "assignableScopes": [
    "/subscriptions/<subscriptionId>"
  ],
  "description": "Allows to power-off and start virtual machines",
  "id": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/roleDefinitions/<roleNameId>",
  "name": "<roleNameId>",
  "permissions": [
    {
      "actions": [
        "Microsoft.Compute/*/read",
        "Microsoft.Compute/virtualMachines/powerOff/action",
        "Microsoft.Compute/virtualMachines/start/action"
      ],
      "dataActions": [],
      "notActions": [],
      "notDataActions": []
    }
  ],
  "roleName": "Linux Fence Agent Role-<username>",
  "roleType": "CustomRole",
  "type": "Microsoft.Authorization/roleDefinitions"
}

Přiřazení vlastní role instančnímu objektu

Přiřaďte k instančnímu objektu vlastní roli Linux Fence Agent Role-<username> vytvořenou v posledním kroku. Už nepoužívejte roli Vlastník.

  1. Přejděte na https://portal.azure.com.
  2. Otevření podokna Všechny prostředky
  3. Výběr virtuálního počítače prvního uzlu clusteru
  4. Vyberte Řízení přístupu (IAM) .
  5. Vyberte Přidat přiřazení role.
  6. Výběr role Linux Fence Agent Role-<username> ze seznamu rolí
  7. V seznamu Vybrat zadejte název aplikace, kterou jste vytvořili dříve.<resourceGroupName>-app
  8. Zvolte Uložit.
  9. Tento postup opakujte pro všechny uzly clusteru.

Vytvoření zařízení STONITH

Na uzlu 1 spusťte následující příkazy:

  • <ApplicationID> Nahraďte hodnotou ID z registrace vaší aplikace.
  • <servicePrincipalPassword> Nahraďte hodnotou z tajného klíče klienta.
  • <resourceGroupName> Nahraďte skupinu prostředků z vašeho předplatného použitého pro účely tohoto kurzu.
  • <tenantID> Nahraďte předplatné Azure a <subscriptionId> z předplatného Azure.
sudo pcs property set stonith-timeout=900
sudo pcs stonith create rsc_st_azure fence_azure_arm login="<ApplicationID>" passwd="<servicePrincipalPassword>" resourceGroup="<resourceGroupName>" tenantId="<tenantID>" subscriptionId="<subscriptionId>" power_timeout=240 pcmk_reboot_timeout=900

Vzhledem k tomu, že jsme už do brány firewall přidali pravidlo, které službě HA umožní,--add-service=high-availability není nutné na všech uzlech otevírat následující porty brány firewall: 2224, 3121, 21064, 5405. Pokud ale máte nějaký typ problémů s připojením s vysokou dostupností, otevřete tyto porty přidružené k vysoké dostupnosti pomocí následujícího příkazu.

Tip

Volitelně můžete přidat všechny porty v tomto kurzu najednou, abyste ušetřili nějaký čas. Porty, které je potřeba otevřít, jsou vysvětlené v příslušných částech, které následují. Pokud chcete přidat všechny porty, přidejte další porty: 1433 a 5022.

sudo firewall-cmd --zone=public --add-port=2224/tcp --add-port=3121/tcp --add-port=21064/tcp --add-port=5405/tcp --permanent
sudo firewall-cmd --reload

Instalace SQL Serveru a nástrojů mssql

Poznámka:

Pokud jste vytvořili virtuální počítače s předinstalovaným sql Serverem 2019 (15.x) v RHEL8-HA, můžete přeskočit následující kroky k instalaci SQL Serveru a nástroje mssql-tools a spuštění části Konfigurace skupiny dostupnosti po nastavení hesla sa na všech virtuálních počítačích spuštěním příkazu sudo /opt/mssql/bin/mssql-conf set-sa-password na všech virtuálních počítačích.

K instalaci SQL Serveru a nástrojů mssql na virtuální počítače použijte následující část. Můžete zvolit jednu z následujících ukázek pro instalaci SQL Serveru 2017 (14.x) na RHEL 7 nebo SQL Server 2019 (15.x) na RHEL 8. Proveďte každou z těchto akcí na všech uzlech. Další informace najdete v tématu Instalace SQL Serveru na virtuální počítač s Red Hatem.

Instalace SQL Serveru na virtuální počítače

K instalaci SQL Serveru se používají následující příkazy:

RHEL 7 s SQL Serverem 2017

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha

RHEL 8 s SQL Serverem 2019

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha

Otevření portu brány firewall 1433 pro vzdálená připojení

Abyste se mohli vzdáleně připojit, musíte na virtuálním počítači otevřít port 1433. Pomocí následujících příkazů otevřete port 1433 v bráně firewall každého virtuálního počítače:

sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload

Instalace nástrojů příkazového řádku SQL Serveru

K instalaci nástrojů příkazového řádku SQL Serveru se používají následující příkazy. Další informace najdete v tématu instalace nástrojů příkazového řádku SQL Serveru.

RHEL 7

sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
sudo yum install -y mssql-tools unixODBC-devel

RHEL 8

sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum install -y mssql-tools unixODBC-devel

Poznámka:

Pro usnadnění přidejte do proměnné prostředí PATH /opt/mssql-tools/bin/. To vám umožní spouštět nástroje bez zadání úplné cesty. Spuštěnímnásledujícíchchch

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

Kontrola stavu SQL Serveru

Jakmile konfiguraci dokončíte, můžete zkontrolovat stav SQL Serveru a ověřit, že je spuštěný:

systemctl status mssql-server --no-pager

Měl by se zobrazit následující výstup:

● mssql-server.service - Microsoft SQL Server Database Engine
   Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2019-12-05 17:30:55 UTC; 20min ago
     Docs: https://learn.microsoft.com/sql/linux
 Main PID: 11612 (sqlservr)
   CGroup: /system.slice/mssql-server.service
           ├─11612 /opt/mssql/bin/sqlservr
           └─11640 /opt/mssql/bin/sqlservr

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 AlwaysOn a restartování serveru mssql

Povolte skupiny dostupnosti AlwaysOn na každém uzlu, který je hostitelem instance SQL Serveru. Pak restartujte mssql-server. Spusťte tento skript:

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server

Vytvoření certifikátu

V současné době nepodporujeme ověřování AD pro koncový bod skupiny dostupnosti. Proto musíme 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í.

    • <Master_Key_Password> Nahraďte ho vlastním heslem.
    ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';
    
  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 :

    • <Private_Key_Password> 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 = '<Private_Key_Password>'
           );
    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 <VM2> 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 před sudo každým příkazem, jak jsme to udělali dříve v tomto kurzu.

    # The below command allows you to run commands in the root environment
    sudo -i
    
    scp /var/opt/mssql/data/dbm_certificate.* <username>@<VM2>:/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 = '<Private_Key_Password>'
                );
    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.
  • <VM1>Nahraďte hodnoty a <VM2><VM3> 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'<VM1>'
          WITH (
             ENDPOINT_URL = N'tcp://<VM1>:5022',
             AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
             FAILOVER_MODE = EXTERNAL,
             SEEDING_MODE = AUTOMATIC
             ),
         N'<VM2>'
          WITH (
             ENDPOINT_URL = N'tcp://<VM2>:5022',
             AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
             FAILOVER_MODE = EXTERNAL,
             SEEDING_MODE = AUTOMATIC
             ),
         N'<VM3>'
         WITH(
            ENDPOINT_URL = N'tcp://<VM3>: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í řá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. Pokud chcete připojit sekundární repliky ke skupině dostupnosti, musíte otevřít port 5022 na bráně firewall pro všechny servery. V relaci SSH spusťte následující příkaz:

    sudo firewall-cmd --zone=public --add-port=5022/tcp --permanent
    sudo firewall-cmd --reload
    
  2. 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
    
  3. 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
    
  4. 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

Při přidávání databáze dodržujeme článek o konfiguraci 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 model
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;

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

Postupujte podle pokynů k vytvoření prostředků skupiny dostupnosti v clusteru Pacemaker.

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.

Vytvoření prostředku clusteru skupiny dostupnosti

  1. Pomocí jednoho z následujících příkazů založených na dříve zvoleném prostředí vytvořte prostředek ag_cluster ve skupině ag1dostupnosti .

    RHEL 7

    sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s master notify=true
    

    RHEL 8

    sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s promotable notify=true
    
  2. Než budete pokračovat, ujistěte se, že jsou vaše prostředky online, a to pomocí následujícího příkazu:

    sudo pcs resource
    

    Měl by se zobrazit následující výstup:

    RHEL 7

    [<username>@VM1 ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
    Masters: [ <VM1> ]
    Slaves: [ <VM2> <VM3> ]
    

    RHEL 8

    [<username>@VM1 ~]$ sudo pcs resource
    * Clone Set: ag_cluster-clone [ag_cluster] (promotable):
    * ag_cluster             (ocf::mssql:ag) :            Slave VMrhel3 (Monitoring)
    * ag_cluster             (ocf::mssql:ag) :            Master VMrhel1 (Monitoring)
    * ag_cluster             (ocf::mssql:ag) :            Slave VMrhel2 (Monitoring)
    

Vytvoření prostředku virtuální IP adresy

  1. K vytvoření virtuálního prostředku IP adresy použijte dostupnou statickou IP adresu z vaší sítě. Můžete ji najít pomocí příkazového nástroje nmap.

    nmap -sP <IPRange>
    # For example: nmap -sP 10.0.0.*
    # The above will scan for all IP addresses that are already occupied in the 10.0.0.x space.
    
  2. Nastavte vlastnost s povoleným stonith na false:

    sudo pcs property set stonith-enabled=false
    
  3. Pomocí následujícího příkazu vytvořte prostředek virtuální IP adresy. Nahraďte <availableIP> nepoužitou IP adresou.

    sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<availableIP>
    

Přidání omezení

  1. Pokud chcete zajistit, aby IP adresa a prostředek skupiny dostupnosti běžely na stejném uzlu, musí být nakonfigurované omezení kolokace. Spusťte následující příkaz:

    RHEL 7

    sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
    

    RHEL 8

     sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master
    
  2. Vytvořte omezení řazení, které zajistí, že je prostředek skupiny dostupnosti spuštěný před IP adresou. I když kolokační omezení znamená omezení řazení, vynutí ho.

    RHEL 7

    sudo pcs constraint order promote ag_cluster-master then start virtualip
    

    RHEL 8

    sudo pcs constraint order promote ag_cluster-clone then start virtualip
    
  3. Pokud chcete ověřit omezení, spusťte následující příkaz:

    sudo pcs constraint list --full
    

    Měl by se zobrazit následující výstup:

    RHEL 7

    Location Constraints:
    Ordering Constraints:
          promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
    Colocation Constraints:
          virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

    RHEL 8

    Location Constraints:
    Ordering Constraints:
            promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory)
    Colocation Constraints:
            virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY)
    Ticket Constraints:
    

Opětovné povolení stonith

Jsme připraveni na testování. Znovu povolte stonith v clusteru spuštěním následujícího příkazu na uzlu 1:

sudo pcs property set stonith-enabled=true

Kontrola stavu clusteru

Stav prostředků clusteru můžete zkontrolovat pomocí následujícího příkazu:

[<username>@VM1 ~]$ sudo pcs status
Cluster name: az-hacluster
Stack: corosync
Current DC: <VM3> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
Last updated: Sat Dec  7 00:18:38 2019
Last change: Sat Dec  7 00:18:02 2019 by root via cibadmin on VM1

3 nodes configured
5 resources configured

Online: [ <VM1> <VM2> <VM3> ]

Full list of resources:

 Master/Slave Set: ag_cluster-master [ag_cluster]
     Masters: [ <VM2> ]
     Slaves: [ <VM1> <VM3> ]
 virtualip      (ocf::heartbeat:IPaddr2):       Started <VM2>
 rsc_st_azure   (stonith:fence_azure_arm):      Started <VM1>

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Test převzetí služeb při selhání

Abychom zajistili, že konfigurace dosud proběhla úspěšně, otestujeme převzetí služeb při selhání. Další informace najdete v tématu Převzetí služeb při selhání skupiny dostupnosti AlwaysOn v Linuxu.

  1. Spuštěním následujícího příkazu ručně převezme služby při selhání primární repliky do <VM2>. Nahraďte <VM2> hodnotou názvu serveru.

    RHEL 7

    sudo pcs resource move ag_cluster-master <VM2> --master
    

    RHEL 8

    sudo pcs resource move ag_cluster-clone <VM2> --master
    

    Můžete také zadat další možnost, aby dočasné omezení vytvořené pro přesunutí prostředku do požadovaného uzlu bylo zakázáno automaticky a v následujících pokynech nemusíte provádět kroky 2 a 3.

    RHEL 7

    sudo pcs resource move ag_cluster-master <VM2> --master lifetime=30S
    

    RHEL 8

    sudo pcs resource move ag_cluster-clone <VM2> --master lifetime=30S
    

    Další alternativou k automatizaci kroků 2 a 3, která vymaže dočasné omezení samotného příkazu přesunu prostředku, je kombinování více příkazů na jednom řádku.

    RHEL 7

    sudo pcs resource move ag_cluster-master <VM2> --master && sleep 30 && pcs resource clear ag_cluster-master
    

    RHEL 8

    sudo pcs resource move ag_cluster-clone <VM2> --master && sleep 30 && pcs resource clear ag_cluster-clone
    
  2. Pokud znovu zkontrolujete svá omezení, uvidíte, že se kvůli ručnímu převzetí služeb při selhání přidalo další omezení:

    RHEL 7

    [<username>@VM1 ~]$ sudo pcs constraint list --full
    Location Constraints:
          Resource: ag_cluster-master
            Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-master)
    Ordering Constraints:
            promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
    Colocation Constraints:
            virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

    RHEL 8

    [<username>@VM1 ~]$ sudo pcs constraint list --full
    Location Constraints:
          Resource: ag_cluster-master
            Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-clone)
    Ordering Constraints:
            promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory)
    Colocation Constraints:
            virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY)
    Ticket Constraints:
    
  3. Pomocí následujícího příkazu odeberte omezení s ID cli-prefer-ag_cluster-master :

    RHEL 7

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    

    RHEL 8

    sudo pcs constraint remove cli-prefer-ag_cluster-clone
    
  4. Pomocí příkazu sudo pcs resourcezkontrolujte prostředky clusteru a měli byste vidět, že primární instance je nyní <VM2>.

    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
         ag_cluster (ocf::mssql:ag):        FAILED <VM1> (Monitoring)
         Masters: [ <VM2> ]
         Slaves: [ <VM3> ]
    virtualip      (ocf::heartbeat:IPaddr2):       Started <VM2>
    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
         Masters: [ <VM2> ]
         Slaves: [ <VM1> <VM3> ]
    virtualip      (ocf::heartbeat:IPaddr2):       Started <VM2>
    

Testovací šermování

Ohraničení můžete otestovat spuštěním následujícího příkazu. Zkuste spustit následující příkaz z <VM1> příkazu for <VM3>.

sudo pcs stonith fence <VM3> --debug

Poznámka:

Ve výchozím nastavení akce plotu vypne uzel a pak zapne. Pokud chcete uzel přenést jenom do režimu offline, použijte možnost --off v příkazu.

Měli byste získat následující výstup:

[<username>@<VM1> ~]$ sudo pcs stonith fence <VM3> --debug
Running: stonith_admin -B <VM3>
Return Value: 0
--Debug Output Start--
--Debug Output End--

Node: <VM3> fenced

Další informace o testování plotového zařízení najdete v následujícím článku o Red Hatu .

Další krok