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

GÄLLER FÖR: SQL Server på virtuella Azure-datorer

Anteckning

Vi använder SQL Server 2017 med RHEL 7.6 i den här självstudien, men det är möjligt att använda SQL Server 2019 i RHEL 7 eller RHEL 8 för att konfigurera hög tillgänglighet. Kommandona för att konfigurera pacemake-klustret och tillgänglighetsgruppresurserna har ändrats i RHEL 8, och du kan läsa artikeln Skapa tillgänglighetsgruppresurs och RHEL 8-resurser för mer information om rätt kommandon.

I den här guiden får du lära dig att:

  • Skapa en ny resursgrupp, tillgänglighetsuppsättning och virtuella Linux-datorer (VM)
  • Aktivera hög tillgänglighet (HA)
  • Skapa ett pacemakerkluster
  • Konfigurera en avstängningsagent genom att skapa en STONITH-enhet
  • Installera SQL Server och mssql-tools på RHEL
  • Konfigurera SQL Server Always On-tillgänglighetsgrupp
  • Konfigurera tillgänglighetsgruppresurser (AG) i pacemakerklustret
  • Testa en redundans och avstängningsagenten

Den här självstudien använder Azure CLI för att distribuera resurser i Azure.

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

Förutsättningar

  • Använd bash-miljön i Azure Cloud Shell.

    Starta Cloud Shell i ett nytt fönster

  • Om du vill kan du i stället installera Azure CLI för att köra CLI-referenskommandon.

    • Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Fler inloggningsalternativ finns i Logga in med Azure CLI.

    • När du uppmanas till det installerar du Azure CLI-tillägg vid första användning. Mer information om tillägg finns i Använda tillägg med Azure CLI.

    • Kör az version om du vill hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.

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

Skapa en resursgrupp

Om du har mer ä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 val av namn. Vi använder för den East US 2 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 namnet på din resursgrupp. 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-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.

Undvik att bli "dubbelfakturerad" genom att använda en RHEL HA-avbildning när du skapar den virtuella Azure-datorn. Avbildningar som erbjuds som RHEL-HA-avbildningar är också PAYG-avbildningar med HA-lagringsplatsen 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 RedHat:RHEL-HA:7.6:7.6.2019062019 avbildningen för RHEL 7-exemplet och RedHat:RHEL-HA:8.1:8.1.2020021914 väljer RHEL 8-exemplet.

    Du kan också välja SQL Server 2019 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 en av avbildningarna ovan för att skapa de virtuella datorerna har den SQL Server 2019 förinstallerad. Hoppa över avsnittet SQL Server och mssql-tools enligt beskrivningen i den här artikeln.

    Viktigt

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

  2. Vi vill skapa 3 virtuella datorer i tillgänglighetsuppsättningen. Ersätt följande i kommandot nedan:

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> – Ett exempel är "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-VNet 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 en 32 GB OS-disk som standard. 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 för att skapa en az vm create OS-disk med 128 GB som exempel: --os-disk-size-gb 128 .

Du kan sedan konfigurera Logisk volymhanterare (LVM) om du behöver expandera lämpliga mappvolymer för 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 VIRTUELLA IP-adresser följer du den här snabbstarten på 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 på RHEL och tillägget för 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 guiden nedan för att aktivera HA. Mer information finns i Aktivera prenumeration med hög tillgänglighet för RHEL.

Tips

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 hela 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. Kör följande kommandon på varje virtuell dator för att öppna Firewall-portarna för Pacemaker:

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

    Anteckning

    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 är 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 pacemaker-paket installeras. 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 ag för konfiguration av värdfilen.

    sudo vi /etc/hosts
    

    I vi-redigeraren anger i du för att infoga text och på en tom rad lägger du till den privata IP-adressen för motsvarande virtuella dator. 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 ovan. 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-tangenten och anger sedan kommandot för att skriva filen och :wq avsluta.

Skapa pacemakerklustret

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

Aktivera och starta pcsd-tjänsten och Pacemaker

  1. Kör kommandona på alla noder. Dessa kommandon gör att noderna kan återansluta till klustret efter omstart.

    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. Kör följande kommandon på den primära noden 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 till 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:

    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 det direktsända klustret till 3. Det här kommandot påverkar bara det live-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 avstängningsagenten

En STONITH-enhet tillhandahåller en avstängningsagent. Anvisningarna nedan ändras 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 är uppdaterad. Ange följande kommando:

sudo yum info fence-agents-azure-arm

Du bör se utdata som liknar 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 Azure Active Directory

  1. Gå till https://portal.azure.com
  2. Öppna bladet Azure Active Directory . Gå till Egenskaper och skriv ned Katalog-ID. Det här är tenant ID
  3. Klicka på Appregistreringar
  4. Klicka på Ny registrering
  5. Ange ett namn som , välj Endast konton i den <resourceGroupName>-app här organisationskatalogen
  6. Välj Programtyp Webb, ange en inloggnings-URL (till exempel och http://localhost) klicka på Lägg till. Inloggnings-URL:en används inte och kan vara en giltig URL. När du är klar klickar du på Registrera
  7. Välj Certifikat och hemligheter för din nya appregistrering och klicka sedan på Ny klienthemlighet
  8. Ange en beskrivning för en ny nyckel (klienthemlighet), välj Upphör aldrig att gälla och klicka på Lägg till
  9. Skriv ned värdet för hemligheten. 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 stegen nedan) 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.

Din json-fil bör se ut ungefär så här:

  • 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>"
  ]
}

Kör följande kommando för att lägga till rollen:

  • 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 i 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 rollen 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 bladet Alla resurser
  3. Välj den virtuella datorn för den första klusternoden
  4. Klicka på Åtkomstkontroll (IAM)
  5. Klicka på 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 ovan. <resourceGroupName>-app
  8. Klicka på Spara
  9. Upprepa stegen ovan för alla klusternoder.

Skapa STONITH-enheterna

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

  • Ersätt med <ApplicationID> ID-värdet från din programregistrering.
  • Ersätt <servicePrincipalPassword> med värdet från klienthemligheten.
  • Ersätt med <resourceGroupName> resursgruppen från din prenumeration som används för den här självstudien.
  • Ersätt och <tenantID> från <subscriptionId> 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 ( ) behöver du inte öppna följande brandväggsportar på alla --add-service=high-availability 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 de portar som är associerade med HA.

Tips

Om du vill kan du lägga till alla portar i den här självstudien samtidigt för att spara tid. Portarna som måste öppnas beskrivs i deras relativa avsnitt nedan. 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

Anteckning

Om du har skapat de virtuella datorerna med SQL Server 2019 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 på alla virtuella sudo /opt/mssql/bin/mssql-conf set-sa-password datorer.

Använd avsnittet nedan för att 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 på RHEL 7 eller SQL Server 2019 på RHEL 8. Utför var och en av dessa åtgärder på alla noder. Mer information finns i Install SQL Server on a Red Hat VM.

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 fjärransluta. 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 SQL Server kommandoradsverktyg

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

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

Anteckning

För enkelhetens skull lägger du till /opt/mssql-tools/bin/ i path-miljövariabeln. 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 SQL Server 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://docs.microsoft.com/en-us/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 Always On-tillgänglighetsgrupp för dina virtuella datorer. Mer information finns i Configure SQL Server Always On availability groups for high availability on Linux (Konfigurera Always On-tillgänglighetsgrupper för hög tillgänglighet i Linux)

Aktivera Always On-tillgänglighetsgrupper och starta om mssql-server

Aktivera Always On-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 SQL CMD. Kör följande kommandon för att aktivera en AlwaysOn_health-session och skapa en huvudnyckel:

    Viktigt

    Om du fjärransluter till din SQL Server instans 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.

    • Ersätt med <Master_Key_Password> 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 SQL CMD. Kommandona nedan skapar ett certifikat på /var/opt/mssql/data/dbm_certificate.cer och en privat nyckel på på den primära SQL Server var/opt/mssql/data/dbm_certificate.pvk repliken:

    • Ersätt med <Private_Key_Password> 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 SQL CMD-session genom att köra exit kommandot och återgå till SSH-sessionen.

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

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

    Kör följande kommando på den primära servern scp för att kopiera certifikatet till målservrarna:

    • Ersätt <username> och <VM2> med användarnamnet och namnet på den virtuella måldatorn som du använder.
    • Kör det här kommandot för alla sekundära repliker.

    Anteckning

    Du behöver inte köra sudo -i , vilket ger dig rotmiljön. Du kan bara köra kommandot sudo 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 med 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 säkerhetskopian 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 hjälp SQL CMD 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 slutpunkter för databasspegling på alla repliker

Kör följande skript på alla SQL Server instanser med hjälp SQL CMD 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 den SQL Server som är värd för den primära repliken med hjälp SQL CMD eller SSMS. Kör följande kommando för att skapa tillgänglighetsgruppen:

  • Ersätt ag1 med önskat namn på tillgänglighetsgruppen.
  • Ersätt <VM1> värdena <VM2> , och med namnen på de SQL Server <VM3> instanserna 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

På alla SQL Server instanser sparar du de autentiseringsuppgifter som används för SQL Server inloggningen.

  1. Skapa filen:

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

    pacemakerLogin
    <password>
    

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

  3. Gör filen skrivskyddad efter 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 AG 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 koppla dem till ag:

    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 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 expandera noden Always On High Availability:

    Skärmbild som visar de primära och sekundära tillgänglighetsreplikerna.

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

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 db1-databasen har skapats och är i tillståndet SYNCHRONIZED:

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;

Om synchronization_state_desc listorna SYNKRONISERAS db1 för innebär det att replikerna synkroniseras. De andra replikerna visas db1 i den primära repliken.

Skapa tillgänglighetsgruppresurser i pacemakerklustret

Vi kommer att följa guiden för att skapa tillgänglighetsgruppens resurser i pacemakerklustret.

Anteckning

Den här artikeln innehåller referenser till termen "slave", en term som Microsoft inte längre använder. När termen tas bort från programvaran tar vi bort den från den här artikeln.

Skapa AG-klusterresursen

  1. Använd något av följande kommandon baserat på den miljö som valdes tidigare för att skapa ag_cluster resursen 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 resursen och se till att den ä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-enabled till false

    sudo pcs property set stonith-enabled=false
    
  3. Skapa den virtuella IP-resursen med hjälp av följande kommando:

    • Ersätt värdet <availableIP> nedan 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 AG-resursen körs på samma nod måste en begränsning för samlokalisering 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 ordningsbegränsning för att säkerställa att AG-resursen är igång före IP-adressen. Även om samlokaliseringsbegränsningen innebär en ordningsbegränsning, framtvings 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 stonith

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 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 redundans. Mer information finns i Always On-redundans för tillgänglighetsgrupp i Linux.

  1. Kör följande kommando för att manuellt växla över 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 skapas för att flytta resursen till en önskad nod inaktiveras automatiskt och du inte behöver utföra steg 2 och 3 nedan.

    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 nedan som rensar den tillfälliga begränsningen i själva resursflyttningskommandot ä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 begränsningarna igen ser du att en annan begränsning har lagts till på grund av den manuella redundansen:

    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 begränsningen 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 klusterresurserna med hjälp av kommandot sudo pcs resource , så bör du se att den primära instansen nu är <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>
    

Testa avstängning

Du kan testa STONITH 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

Anteckning

Som standard tar stängslet av noden och sedan på. Om du bara vill föra noden offline använder du --off alternativet 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.

Nästa steg

För att kunna använda en tillgänglighetsgruppslyssnare för dina SQL Server instanser måste du skapa och konfigurera en lastbalanserare.