Självstudie: Konfigurera tillgänglighetsgrupper för SQL Server på virtuella RHEL-datorer i Azure

Gäller för:SQL Server på en virtuell Azure-dator

Kommentar

Vi använder SQL Server 2017 (14.x) med RHEL 7.6 i den här självstudien, men det går att använda SQL Server 2019 (15.x) i RHEL 7 eller RHEL 8 för att konfigurera hög tillgänglighet. Kommandona för att konfigurera Pacemaker-klustret och tillgänglighetsgruppens resurser har ändrats i RHEL 8 och du vill titta på artikeln Skapa resurs för tillgänglighetsgrupp och RHEL 8-resurser för mer information om rätt kommandon.

I den här självstudien lär du dig att:

  • Skapa en ny resursgrupp, en tillgänglighetsuppsättning och virtuella Linux-datorer (VM)
  • Aktivera hög tillgänglighet (HA)
  • Skapa ett Pacemaker-kluster
  • Konfigurera en fäktningsagent genom att skapa en STONITH-enhet
  • Installera SQL Server och mssql-tools på RHEL
  • Konfigurera SQL Server AlwaysOn-tillgänglighetsgrupp
  • Konfigurera tillgänglighetsgruppresurser (AG) i Pacemaker-klustret
  • Testa en redundansväxling och fäktningsagenten

I den här självstudien används Azure CLI för att distribuera resurser i Azure.

Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.

Förutsättningar

  • Den här artikeln kräver version 2.0.30 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.

Skapa en resursgrupp

Om du har fler än en prenumeration anger du den prenumeration som du vill distribuera resurserna till.

Använd följande kommando för att skapa en resursgrupp <resourceGroupName> i en region. Ersätt <resourceGroupName> med ett valfritt namn. Vi använder East US 2 för den här självstudien. Mer information finns i följande snabbstart.

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

Skapa en tillgänglighetsuppsättning

Nästa steg är att skapa en tillgänglighetsuppsättning. Kör följande kommando i Azure Cloud Shell och ersätt <resourceGroupName> med resursgruppens namn. Välj ett namn för <availabilitySetName>.

az vm availability-set create \
    --resource-group <resourceGroupName> \
    --name <availabilitySetName> \
    --platform-fault-domain-count 2 \
    --platform-update-domain-count 2

Du bör få följande resultat när kommandot har slutförts:

{
  "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": []
}

Skapa virtuella RHEL-datorer i tillgänglighetsuppsättningen

Varning

Om du väljer en Pay-As-You-Go(PAYG) RHEL-avbildning och konfigurerar hög tillgänglighet (HA) kan du behöva registrera din prenumeration. Detta kan göra att du betalar två gånger för prenumerationen eftersom du debiteras för Microsoft Azure RHEL-prenumerationen för den virtuella datorn och en prenumeration på Red Hat. Mer information finns i https://access.redhat.com/solutions/2458541.

Om du vill undvika att bli "dubbelfakturerad" använder du en RHEL HA-avbildning när du skapar den virtuella Azure-datorn. Bilder som erbjuds som RHEL-HA-avbildningar är också PAYG-avbildningar med HA-lagringsplats föraktiverad.

  1. Hämta en lista över avbildningar av virtuella datorer som erbjuder RHEL med HA:

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

    Du bör se följande resultat:

    [
      {
    "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"
           }
    ]
    

    I den här självstudien väljer vi avbildningen RedHat:RHEL-HA:7.6:7.6.2019062019 för RHEL 7-exemplet och väljer RedHat:RHEL-HA:8.1:8.1.2020021914 för RHEL 8-exemplet.

    Du kan också välja SQL Server 2019 (15.x) förinstallerat på RHEL8-HA-avbildningar. Kör följande kommando för att hämta listan över dessa avbildningar:

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

    Du bör se följande resultat:

    [
       {
          "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"
       }
    ]
    

    Om du använder någon av ovanstående avbildningar för att skapa de virtuella datorerna är SQL Server 2019 (15.x) förinstallerat. Hoppa över avsnittet Installera SQL Server och mssql-tools enligt beskrivningen i den här artikeln.

    Viktigt!

    Datornamn måste vara mindre än 15 tecken för att konfigurera tillgänglighetsgrupp. Användarnamn får inte innehålla versaler och lösenord måste innehålla fler än 12 tecken.

  2. Vi vill skapa tre virtuella datorer i tillgänglighetsuppsättningen. Ersätt dessa värden i följande kommando:

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> – Ett exempel skulle vara "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
    

Kommandot ovan skapar de virtuella datorerna och skapar ett standard virtuellt nätverk för dessa virtuella datorer. Mer information om de olika konfigurationerna finns i artikeln az vm create .

Du bör få resultat som liknar följande när kommandot har slutförts för varje virtuell dator:

{
  "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": ""
}

Viktigt!

Standardavbildningen som skapas med kommandot ovan skapar som standard en 32GB OS-disk. Du kan eventuellt få slut på utrymme med den här standardinstallationen. Du kan använda följande parameter som lagts till i kommandot ovan az vm create för att skapa en OS-disk med 128 GB som exempel: --os-disk-size-gb 128.

Du kan sedan konfigurera Logical Volume Manager (LVM) om du behöver utöka lämpliga mappvolymer för att hantera installationen.

Testa anslutningen till de skapade virtuella datorerna

Anslut till VM1 eller andra virtuella datorer med följande kommando i Azure Cloud Shell. Om du inte kan hitta dina VM-IP-adresser följer du den här snabbstarten i Azure Cloud Shell.

ssh <username>@publicipaddress

Om anslutningen lyckas bör du se följande utdata som representerar Linux-terminalen:

[<username>@<VM1> ~]$

Skriv exit för att lämna SSH-sessionen.

Aktivera hög tillgänglighet

Viktigt!

För att kunna slutföra den här delen av självstudien måste du ha en prenumeration för RHEL och tillägget hög tillgänglighet. Om du använder en avbildning som rekommenderas i föregående avsnitt behöver du inte registrera en annan prenumeration.

Anslut till varje VM-nod och följ den här guiden för att aktivera HA. Mer information finns i aktivera en prenumeration med hög tillgänglighet för RHEL.

Dricks

Det blir enklare om du öppnar en SSH-session för var och en av de virtuella datorerna samtidigt som samma kommandon måste köras på varje virtuell dator i artikeln.

Om du kopierar och klistrar in flera sudo kommandon och uppmanas att ange ett lösenord körs inte de ytterligare kommandona. Kör varje kommando separat.

  1. Öppna Pacemaker-brandväggsportarna genom att köra följande kommandon på varje virtuell dator:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    
  2. Uppdatera och installera Pacemaker-paket på alla noder med hjälp av följande kommandon:

    Kommentar

    nmap installeras som en del av det här kommandoblocket som ett verktyg för att hitta tillgängliga IP-adresser i nätverket. Du behöver inte installera nmap, men det kommer att vara användbart senare i den här självstudien.

    sudo yum update -y
    sudo yum install -y pacemaker pcs fence-agents-all resource-agents fence-agents-azure-arm nmap
    sudo reboot
    
  3. Ange lösenordet för standardanvändaren som skapas när du installerar Pacemaker-paket. Använd samma lösenord på alla noder.

    sudo passwd hacluster
    
  4. Använd följande kommando för att öppna värdfilen och konfigurera värdnamnsmatchning. Mer information finns i Konfigurera tillgänglighetsgruppen för att konfigurera värdfilen.

    sudo vi /etc/hosts
    

    I vi-redigeraren anger du i för att infoga text och lägger till den privata IP-adressen för motsvarande virtuella dator på en tom rad. Lägg sedan till namnet på den virtuella datorn efter ett blanksteg bredvid IP-adressen. Varje rad bör ha en separat post.

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

    Viktigt!

    Vi rekommenderar att du använder din privata IP-adress i föregående exempel. Om du använder den offentliga IP-adressen i den här konfigurationen misslyckas installationen och vi rekommenderar inte att du exponerar den virtuella datorn för externa nätverk.

    Om du vill avsluta vi-redigeraren trycker du först på Esc-tangentenoch anger sedan kommandot :wq för att skriva filen och avsluta.

Skapa Pacemaker-klustret

I det här avsnittet aktiverar och startar du pcsd-tjänsten och konfigurerar sedan klustret. För SQL Server på Linux skapas inte klusterresurserna automatiskt. Du måste aktivera och skapa Pacemaker-resurserna manuellt. Mer information finns i artikeln om hur du konfigurerar en redundansklusterinstans för RHEL.

Aktivera och starta pcsd-tjänsten och Pacemaker

  1. Kör kommandona på alla noder. Med de här kommandona kan noderna återansluta till klustret när varje nod har startats om.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  2. Ta bort alla befintliga klusterkonfigurationer från alla noder. Kör följande kommando:

    sudo pcs cluster destroy
    sudo systemctl enable pacemaker
    
  3. På den primära noden kör du följande kommandon för att konfigurera klustret.

    • När du kör pcs cluster auth kommandot för att autentisera klusternoderna uppmanas du att ange ett lösenord. Ange lösenordet för den hacluster-användare som skapades tidigare.

    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

    För RHEL 8 måste du autentisera noderna separat. Ange användarnamnet och lösenordet för hacluster manuellt när du uppmanas att göra det.

    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. Kör följande kommando för att kontrollera att alla noder är online.

    sudo pcs status
    

    RHEL 7

    Om alla noder är online visas utdata som liknar följande exempel:

    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. Ange förväntade röster i liveklustret till 3. Det här kommandot påverkar bara det aktiva klustret och ändrar inte konfigurationsfilerna.

    På alla noder anger du de förväntade rösterna med följande kommando:

    sudo pcs quorum expected-votes 3
    

Konfigurera fäktningsagenten

För att konfigurera en fäktningsagent ändras följande instruktioner för den här självstudien. Mer information finns i skapa en STONITH-enhet.

Kontrollera versionen av Azure Fence Agent för att se till att den uppdateras. Ange följande kommando:

sudo yum info fence-agents-azure-arm

Du bör se ett liknande utdata som exemplet nedan.

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.

Registrera ett nytt program i Microsoft Entra-ID

Om du vill registrera ett nytt program i Microsoft Entra-ID (tidigare Azure Active Directory) följer du dessa steg:

  1. Gå till https://portal.azure.com.
  2. Öppna fönstret Egenskaper för Microsoft Entra-ID och skriv ned Tenant ID.
  3. Välj Appregistreringar.
  4. Välj Ny registrering.
  5. Ange ett namn som <resourceGroupName>-app. För kontotyper som stöds väljer du Endast Konton i den här organisationskatalogen (endast Microsoft – enskild klient).
  6. Välj Webb för Omdirigerings-URI och ange en URL (till exempel http://localhost) och välj Lägg till. Inloggnings-URL:en kan vara valfri giltig URL. När du är klar väljer du Registrera.
  7. Välj Certifikat och hemligheter för din nya appregistrering och välj sedan Ny klienthemlighet.
  8. Ange en beskrivning för en ny nyckel (klienthemlighet) och välj sedan Lägg till.
  9. Skriv ned hemlighetens värde. Det används som lösenord för tjänstens huvudnamn.
  10. Välj Översikt. Skriv ned program-ID:t. Det används som användarnamn (inloggnings-ID i följande steg) för tjänstens huvudnamn.

Skapa en anpassad roll för stängselagenten

Följ självstudien för att skapa en anpassad Azure-roll med Hjälp av Azure CLI.

JSON-filen bör se ut ungefär som i följande exempel:

  • Ersätt <username> med ett valfritt namn. Detta för att undvika duplicering när du skapar den här rolldefinitionen.
  • Ersätt <subscriptionId> med ditt Azure-prenumerations-ID.
{
  "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>"
  ]
}

Om du vill lägga till rollen kör du följande kommando:

  • Ersätt <filename> med namnet på filen.
  • Om du kör kommandot från en annan sökväg än den mapp som filen sparas till ska du inkludera mappsökvägen för filen i kommandot .
az role definition create --role-definition "<filename>.json"

Du bör se följande utdata:

{
  "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"
}

Tilldela den anpassade rollen till tjänstens huvudnamn

Tilldela den anpassade roll Linux Fence Agent Role-<username> som skapades i det senaste steget till tjänstens huvudnamn. Använd inte rollen Ägare längre.

  1. Gå till https://portal.azure.com
  2. Öppna fönstret Alla resurser
  3. Välj den virtuella datorn för den första klusternoden
  4. Välj Åtkomstkontroll (IAM)
  5. Välj Lägg till en rolltilldelning
  6. Välj rollen Linux Fence Agent Role-<username> i listan Roll
  7. I listan Välj anger du namnet på det program som du skapade tidigare. <resourceGroupName>-app
  8. Välj Spara
  9. Upprepa de här stegen för alla klusternoder.

Skapa STONITH-enheterna

Kör följande kommandon på nod 1:

  • <ApplicationID> Ersätt med ID-värdet från programregistreringen.
  • <servicePrincipalPassword> Ersätt med värdet från klienthemligheten.
  • <resourceGroupName> Ersätt med resursgruppen från din prenumeration som används för den här självstudien.
  • <tenantID> Ersätt och <subscriptionId> från din Azure-prenumeration.
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

Eftersom vi redan har lagt till en regel i brandväggen för att tillåta HA-tjänsten (--add-service=high-availability) behöver du inte öppna följande brandväggsportar på alla noder: 2224, 3121, 21064, 5405. Men om du har någon typ av anslutningsproblem med HA använder du följande kommando för att öppna dessa portar som är associerade med HA.

Dricks

Du kan också lägga till alla portar i den här självstudien samtidigt för att spara lite tid. De portar som måste öppnas förklaras i relevanta avsnitt som följer. Om du vill lägga till alla portar nu lägger du till ytterligare portar: 1433 och 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

Installera SQL Server och mssql-tools

Kommentar

Om du har skapat de virtuella datorerna med SQL Server 2019 (15.x) förinstallerat på RHEL8-HA kan du hoppa över stegen nedan för att installera SQL Server och mssql-tools och starta avsnittet Konfigurera en tillgänglighetsgrupp när du har konfigurerat sa-lösenordet på alla virtuella datorer genom att köra kommandot sudo /opt/mssql/bin/mssql-conf set-sa-password på alla virtuella datorer.

Använd avsnittet nedan för att installera SQL Server och mssql-tools på de virtuella datorerna. Du kan välja något av exemplen nedan för att installera SQL Server 2017 (14.x) på RHEL 7 eller SQL Server 2019 (15.x) på RHEL 8. Utför var och en av dessa åtgärder på alla noder. Mer information finns i Installera SQL Server på en virtuell Red Hat-dator.

Installera SQL Server på de virtuella datorerna

Följande kommandon används för att installera SQL Server:

RHEL 7 med SQL Server 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 med SQL Server 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

Öppna brandväggsport 1433 för fjärranslutningar

Du måste öppna port 1433 på den virtuella datorn för att kunna ansluta via fjärranslutning. Använd följande kommandon för att öppna port 1433 i brandväggen för varje virtuell dator:

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

Installera kommandoradsverktyg för SQL Server

Följande kommandon används för att installera SQL Server-kommandoradsverktyg. Mer information finns i installera kommandoradsverktygen för SQL Server.

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

Kommentar

Lägg till /opt/mssql-tools/bin/ i path-miljövariabeln för enkelhetens skull. På så sätt kan du köra verktygen utan att ange den fullständiga sökvägen. Kör följande kommandon för att ändra PATH för både inloggningssessioner och interaktiva/icke-inloggningssessioner:

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

Kontrollera status för SQL Server

När du är klar med konfigurationen kan du kontrollera statusen för SQL Server och kontrollera att den körs:

systemctl status mssql-server --no-pager

Du bör se följande utdata:

● 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

Konfigurera en tillgänglighetsgrupp

Använd följande steg för att konfigurera en SQL Server AlwaysOn-tillgänglighetsgrupp för dina virtuella datorer. Mer information finns i Konfigurera SQL Server AlwaysOn-tillgänglighetsgrupper för hög tillgänglighet i Linux.

Aktivera AlwaysOn-tillgänglighetsgrupper och starta om mssql-server

Aktivera AlwaysOn-tillgänglighetsgrupper på varje nod som är värd för en SQL Server-instans. Starta sedan om mssql-server. Kör följande skript:

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

Skapa ett certifikat

Vi stöder för närvarande inte AD-autentisering till AG-slutpunkten. Därför måste vi använda ett certifikat för AG-slutpunktskryptering.

  1. Anslut till alla noder med SQL Server Management Studio (SSMS) eller sqlcmd. Kör följande kommandon för att aktivera en AlwaysOn_health session och skapa en huvudnyckel:

    Viktigt!

    Om du ansluter via fjärranslutning till SQL Server-instansen måste du ha port 1433 öppen i brandväggen. Du måste också tillåta inkommande anslutningar till port 1433 i din NSG för varje virtuell dator. Mer information finns i Skapa en säkerhetsregel för att skapa en inkommande säkerhetsregel.

    • <Master_Key_Password> Ersätt med ditt eget lösenord.
    ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
    GO
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';
    
  2. Anslut till den primära repliken med hjälp av SSMS eller sqlcmd. Följande kommandon skapar ett certifikat på /var/opt/mssql/data/dbm_certificate.cer och en privat nyckel på var/opt/mssql/data/dbm_certificate.pvk din primära SQL Server-replik:

    • <Private_Key_Password> Ersätt med ditt eget lösenord.
    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
    

Avsluta sqlcmd-sessionen genom att exit köra kommandot och återgå till SSH-sessionen.

Kopiera certifikatet till de sekundära replikerna och skapa certifikaten på servern

  1. Kopiera de två filer som skapades till samma plats på alla servrar som ska vara värdar för tillgänglighetsrepliker.

    På den primära servern kör du följande scp kommando för att kopiera certifikatet till målservrarna:

    • Ersätt <username> och <VM2> med det användarnamn och måldatornamn som du använder.
    • Kör det här kommandot för alla sekundära repliker.

    Kommentar

    Du behöver inte köra sudo -i, vilket ger dig rotmiljön. Du kan bara köra sudo kommandot framför varje kommando som vi gjorde tidigare i den här självstudien.

    # 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. Kör följande kommando på målservern:

    • Ersätt <username> med ditt användarnamn.
    • Kommandot mv flyttar filerna eller katalogen från en plats till en annan.
    • Kommandot chown används för att ändra ägare och grupp av filer, kataloger eller länkar.
    • Kör dessa kommandon för alla sekundära repliker.
    sudo -i
    mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/
    cd /var/opt/mssql/data
    chown mssql:mssql dbm_certificate.*
    
  3. Följande Transact-SQL-skript skapar ett certifikat från den säkerhetskopia som du skapade på den primära SQL Server-repliken. Uppdatera skriptet med starka lösenord. Dekrypteringslösenordet är samma lösenord som du använde för att skapa .pvk-filen i föregående steg. Skapa certifikatet genom att köra följande skript med sqlcmd eller SSMS på alla sekundära servrar:

    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
    

Skapa databasspeglingsslutpunkter på alla repliker

Kör följande skript på alla SQL Server-instanser med sqlcmd eller 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

Skapa tillgänglighetsgruppen

Anslut till SQL Server-instansen som är värd för den primära repliken med sqlcmd eller SSMS. Kör följande kommando för att skapa tillgänglighetsgruppen:

  • Ersätt ag1 med önskat namn på tillgänglighetsgrupp.
  • <VM1>Ersätt värdena , <VM2>och <VM3> med namnen på de SQL Server-instanser som är värdar för replikerna.
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

Skapa en SQL Server-inloggning för Pacemaker

På alla SQL Server-instanser skapar du en SQL Server-inloggning för Pacemaker. Följande Transact-SQL skapar en inloggning.

  • Ersätt <password> med ditt eget komplexa lösenord.
USE [master]
GO

CREATE LOGIN [pacemakerLogin] with PASSWORD= N'<password>';
GO

ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
GO

Spara de autentiseringsuppgifter som används för SQL Server-inloggningen på alla SQL Server-instanser.

  1. Skapa filen:

    sudo vi /var/opt/mssql/secrets/passwd
    
  2. Lägg till följande rader i filen:

    pacemakerLogin
    <password>
    

    Om du vill avsluta vi-redigeraren trycker du först på Esc-tangentenoch anger sedan kommandot :wq för att skriva filen och avsluta.

  3. Gör filen endast läsbar med rot:

    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

Koppla sekundära repliker till tillgänglighetsgruppen

  1. För att kunna ansluta de sekundära replikerna till tillgänglighetsgruppen måste du öppna port 5022 i brandväggen för alla servrar. Kör följande kommando i SSH-sessionen:

    sudo firewall-cmd --zone=public --add-port=5022/tcp --permanent
    sudo firewall-cmd --reload
    
  2. På dina sekundära repliker kör du följande kommandon för att ansluta dem till tillgänglighetsgruppen:

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  3. Kör följande Transact-SQL-skript på den primära repliken och varje sekundär replik:

    GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemakerLogin;
    GO
    
    GRANT VIEW SERVER STATE TO pacemakerLogin;
    GO
    
  4. När de sekundära replikerna har anslutits kan du se dem i SSMS Object Explorer genom att expandera noden Always On High Availability :

    Screenshot shows the primary and secondary availability replicas.

Lägga till en databas i tillgänglighetsgruppen

Vi följer artikeln konfigurera tillgänglighetsgrupp om att lägga till en databas.

Följande Transact-SQL-kommandon används i det här steget. Kör följande kommandon på den primära repliken:

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

Kontrollera att databasen har skapats på de sekundära servrarna

På varje sekundär SQL Server-replik kör du följande fråga för att se om databasen db1 skapades och är i ett SYNKRONISERAT tillstånd:

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;

synchronization_state_desc Om listorna SYNKRONISERAS för db1innebär det att replikerna synkroniseras. Sekundärfilerna visas db1 i den primära repliken.

Skapa resurser för tillgänglighetsgrupp i Pacemaker-klustret

Vi följer guiden för att skapa resurser för tillgänglighetsgrupp i Pacemaker-klustret.

Kommentar

Fördomsfri kommunikation

Den här artikeln innehåller referenser till termen slav, en term som Microsoft anser vara stötande när den används i det här sammanhanget. Termen visas i den här artikeln eftersom den för närvarande visas i programvaran. När termen tas bort från programvaran tar vi bort den från artikeln.

Skapa ag-klusterresursen

  1. Använd något av följande kommandon baserat på den miljö som valdes tidigare för att skapa resursen ag_cluster i tillgänglighetsgruppen ag1.

    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. Kontrollera att dina resurser är online innan du fortsätter med följande kommando:

    sudo pcs resource
    

    Du bör se följande utdata:

    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)
    

Skapa en virtuell IP-resurs

  1. Använd en tillgänglig statisk IP-adress från nätverket för att skapa en virtuell IP-resurs. Du hittar en med hjälp av kommandoverktyget 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. Ange egenskapen stonith-aktiverad till false:

    sudo pcs property set stonith-enabled=false
    
  3. Skapa den virtuella IP-resursen med hjälp av följande kommando. Ersätt <availableIP> med en oanvänd IP-adress.

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

Lägg till begränsningar

  1. För att säkerställa att IP-adressen och tillgänglighetsgruppens resurs körs på samma nod måste en samlokaliseringsbegränsning konfigureras. Kör följande kommando:

    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. Skapa en beställningsbegränsning för att säkerställa att tillgänglighetsgruppens resurs är igång före IP-adressen. Även om samlokaliseringsbegränsningen innebär en ordningsbegränsning, framtvingar detta den.

    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. Kontrollera begränsningarna genom att köra följande kommando:

    sudo pcs constraint list --full
    

    Du bör se följande utdata:

    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:
    

Återaktivera stonit

Vi är redo för testning. Återaktivera stonith i klustret genom att köra följande kommando på Nod 1:

sudo pcs property set stonith-enabled=true

Kontrollera klusterstatus

Du kan kontrollera statusen för dina klusterresurser med hjälp av följande kommando:

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

Redundanstest

För att säkerställa att konfigurationen har lyckats hittills testar vi en redundansväxling. Mer information finns i AlwaysOn-tillgänglighetsgruppens redundansväxling i Linux.

  1. Kör följande kommando för att manuellt redundansväxla den primära repliken till <VM2>. Ersätt <VM2> med värdet för servernamnet.

    RHEL 7

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

    RHEL 8

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

    Du kan också ange ytterligare ett alternativ så att den tillfälliga begränsning som skapades för att flytta resursen till en önskad nod inaktiveras automatiskt och du inte behöver utföra steg 2 och 3 i följande instruktioner.

    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
    

    Ett annat alternativ för att automatisera steg 2 och 3, som rensar den tillfälliga begränsningen i själva resursflyttkommandot, är att kombinera flera kommandon på en enda rad.

    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. Om du kontrollerar dina begränsningar igen ser du att en annan begränsning har lagts till på grund av den manuella redundansväxlingen:

    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. Ta bort villkoret med ID cli-prefer-ag_cluster-master med hjälp av följande kommando:

    RHEL 7

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    

    RHEL 8

    sudo pcs constraint remove cli-prefer-ag_cluster-clone
    
  4. Kontrollera dina klusterresurser med kommandot sudo pcs resourceoch du bör se att den primära instansen nu <VM2>är .

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

Testa fäktning

Du kan testa fäktning genom att köra följande kommando. Prova att köra kommandot nedan från <VM1> för <VM3>.

sudo pcs stonith fence <VM3> --debug

Kommentar

Som standard inaktiverar och aktiverar stängselåtgärden noden. Om du bara vill koppla från noden använder du alternativet --off i kommandot .

Du bör se följande utdata:

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

Mer information om hur du testar en stängselenhet finns i följande Red Hat-artikel .

Gå vidare