Delen via


Zelfstudie: Beschikbaarheidsgroepen configureren voor SQL Server op virtuele RHEL-machines in Azure

Van toepassing op:SQL Server op Azure VM-

Opmerking

In deze zelfstudie gebruiken we SQL Server 2017 (14.x) met RHEL 7.6, maar het is mogelijk om SQL Server 2019 (15.x) te gebruiken in RHEL 7 of RHEL 8 om hoge beschikbaarheid te configureren. De opdrachten voor het configureren van de resources van het Pacemaker-cluster en de beschikbaarheidsgroep zijn gewijzigd in RHEL 8, en raden we aan het artikel Beschikbaarheidsgroep resource aanmaken en RHEL 8-resources te raadplegen voor meer informatie over de juiste opdrachten.

In deze handleiding leer je hoe je:

  • Een nieuwe resourcegroep, beschikbaarheidsset en virtuele Linux-machines (VM's) maken
  • Hoge beschikbaarheid (HA) inschakelen
  • Een Pacemaker-cluster maken
  • Een fencing-agent configureren door een STONITH-apparaat te maken
  • SQL Server en mssql-tools installeren op RHEL
  • AlwaysOn-beschikbaarheidsgroep voor SQL Server configureren
  • Beschikbaarheidsgroepbronnen (AG) configureren in het Pacemaker-cluster
  • Een failover en de fencing-agent testen

In deze zelfstudie wordt de Azure CLI gebruikt om resources te implementeren in Azure.

Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.

Vereiste voorwaarden

  • Voor dit artikel is versie 2.0.30 of hoger van de Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.

Een brongroep maken

Als u meer dan één abonnement hebt, het abonnement instellen waarop u deze resources wilt implementeren.

Gebruik de volgende opdracht om een resourcegroep te maken <resourceGroupName> in een regio. Vervang <resourceGroupName> door een naam van uw keuze. We gebruiken East US 2 in deze zelfstudie. Zie de volgende Quickstartvoor meer informatie.

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

Een beschikbaarheidsset maken

De volgende stap bestaat uit het maken van een beschikbaarheidsset. Voer de volgende opdracht uit in Azure Cloud Shell en vervang <resourceGroupName> door de naam van uw resourcegroep. Kies een naam voor <availabilitySetName>.

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

Als de opdracht is voltooid, krijgt u de volgende resultaten:

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

RHEL-VM's maken in de beschikbaarheidsset

Waarschuwing

Als u een RHEL-installatiekopie volgens het betalen-per-gebruik-principe kiest en hoge beschikbaarheid (HA) configureert, moet u mogelijk uw abonnement registreren. Dit kan ertoe leiden dat u twee keer betaalt voor het abonnement, omdat er kosten in rekening worden gebracht voor het Microsoft Azure RHEL-abonnement voor de virtuele machine en een abonnement op Red Hat. Zie Het abonnement beheren van de virtuele machine die is gestart vanuit Azure Marketplace voor meer informatie. Gebruik een RHEL HA-image bij het maken van de Azure VM om te voorkomen dat er dubbel gefactureerd wordt. Afbeeldingen die worden aangeboden als RHEL-HA zijn ook betalen-per-gebruik afbeeldingen, met vooraf ingeschakelde HA-repository.

  1. Een lijst met afbeeldingen van virtuele machines verzamelen die RHEL met HA bieden:

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

    De volgende resultaten worden weergegeven.

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

    Voor deze zelfstudie kiezen we de afbeelding RedHat:RHEL-HA:7.6:7.6.2019062019 voor het RHEL 7-voorbeeld en kiezen we RedHat:RHEL-HA:8.1:8.1.2020021914 voor het RHEL 8-voorbeeld.

    Belangrijk

    Computernamen moeten uit minder dan 15 tekens bestaan om een beschikbaarheidsgroep in te stellen. De gebruikersnaam mag geen hoofdletters bevatten en wachtwoorden moeten meer dan 12 tekens bevatten.

  2. We willen drie VM's maken in de beschikbaarheidsset. Vervang deze waarden in de volgende opdracht:

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> - Een voorbeeld is 'Standard_D16_v3'
    • <username>
    • <password>
    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 "<password>" \
             --authentication-type all \
             --generate-ssh-keys
    done
    

Met de bovenstaande opdracht worden de VM's gemaakt en wordt er een standaard virtueel netwerk voor deze VM's gemaakt. Zie het artikel az vm create voor meer informatie over de verschillende configuraties.

Als de opdracht voor elke VIRTUELE machine is voltooid, krijgt u resultaten die er ongeveer als volgt uitzien:

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

Belangrijk

De standaard-image die met de bovenstaande opdracht wordt gemaakt, bevat standaard een 32GB OS-schijf. U kunt mogelijk geen ruimte meer hebben met deze standaardinstallatie. U kunt de volgende parameter gebruiken die is toegevoegd aan de bovenstaande az vm create opdracht om een besturingssysteemschijf te maken met 128 GB als voorbeeld: --os-disk-size-gb 128.

U kunt vervolgens LVM (Logical Volume Manager) configureren als u de juiste mapvolumes moet uitvouwen om ruimte te bieden aan uw installatie.

Verbinding met de gemaakte VM's testen

Maak verbinding met VM1 of de andere VM's met behulp van de volgende opdracht in Azure Cloud Shell. Als u uw VM-IP-adressen niet kunt vinden, volg dan deze snelstartgids in Azure Cloud Shell.

ssh <username>@publicipaddress

Als de verbinding is geslaagd, ziet u de volgende uitvoer die de Linux-terminal vertegenwoordigt:

[<username>@<VM1> ~]$

Typ exit om de SSH-sessie te verlaten.

Hoge beschikbaarheid inschakelen

Belangrijk

Als u dit gedeelte van de zelfstudie wilt voltooien, moet u een abonnement hebben voor RHEL en de invoegtoepassing voor hoge beschikbaarheid. Als u een afbeelding gebruikt die wordt aanbevolen in de vorige sectie, hoeft u geen ander abonnement te registreren.

Maak verbinding met elk VM-knooppunt en volg deze handleiding om hoge beschikbaarheid in te schakelen. Zie Voor meer informatie het inschakelen van een abonnement op hoge beschikbaarheid voor RHEL.

Aanbeveling

Het is eenvoudiger als u een SSH-sessie tegelijk opent naar elk van de VIRTUELE machines als dezelfde opdrachten moeten worden uitgevoerd op elke VIRTUELE machine in het hele artikel.

Als u meerdere sudo opdrachten kopieert en plakt en om een wachtwoord wordt gevraagd, worden de extra opdrachten niet uitgevoerd. Voer elke opdracht afzonderlijk uit.

  1. Voer de volgende opdrachten uit op elke VIRTUELE machine om de Pacemaker-firewallpoorten te openen:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    
  2. Werk Pacemaker-pakketten op alle knooppunten bij en installeer deze met behulp van de volgende opdrachten:

    Opmerking

    nmap wordt geïnstalleerd als onderdeel van dit opdrachtblok als hulpprogramma om beschikbare IP-adressen in uw netwerk te vinden. U hoeft nmap niet te installeren, maar dit is later in deze zelfstudie handig.

    sudo yum update -y
    sudo yum install -y pacemaker pcs fence-agents-all resource-agents fence-agents-azure-arm nmap
    sudo reboot
    
  3. Stel het wachtwoord in voor de standaardgebruiker die wordt gemaakt bij het installeren van Pacemaker-pakketten. Gebruik hetzelfde wachtwoord op alle knooppunten.

    sudo passwd hacluster
    
  4. Gebruik de onderstaande opdracht om het hostbestand te openen en hostname-resolutie in te stellen. Zie AG configureren voor meer informatie over het configureren van het hosts-bestand.

    sudo vi /etc/hosts
    

    Voer in de vi-editor tekst i in en voeg op een lege regel het privé-IP-adres van de bijbehorende VIRTUELE machine toe. Voeg vervolgens de naam van de VIRTUELE machine toe na een spatie naast het IP-adres. Elke regel moet een afzonderlijke vermelding hebben.

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

    Belangrijk

    U wordt aangeraden uw privé-IP-adres in het vorige voorbeeld te gebruiken. Als u het openbare IP-adres in deze configuratie gebruikt, mislukt de installatie en wordt het afgeraden uw VIRTUELE machine beschikbaar te maken voor externe netwerken.

    Als u de vi editor wilt afsluiten, drukt u eerst op de toets Esc en voert u de opdracht in :wq om het bestand te schrijven en af te sluiten.

Het Pacemaker-cluster maken

In deze sectie schakelt u de pcsd-service in en start u deze en configureert u het cluster. Voor SQL Server in Linux worden de clusterbronnen niet automatisch gemaakt. U moet de Pacemaker-resources handmatig inschakelen en maken. Voor meer informatie, zie het artikel over het configureren van een exemplaar van een failovercluster voor RHEL.

Pcsd-service en Pacemaker inschakelen en starten

  1. Voer de opdrachten uit op alle knooppunten. Met deze opdrachten kunnen de knooppunten opnieuw deelnemen aan het cluster nadat elk knooppunt opnieuw is opgestart.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  2. Verwijder alle bestaande clusterconfiguraties van alle knooppunten. Voer de volgende opdracht uit:

    sudo pcs cluster destroy
    sudo systemctl enable pacemaker
    
  3. Voer op het primaire knooppunt de volgende opdrachten uit om het cluster in te stellen.

    • Wanneer u de pcs cluster auth opdracht uitvoert om de clusterknooppunten te verifiëren, wordt u om een wachtwoord gevraagd. Voer het wachtwoord in voor de haclustergebruiker die u eerder hebt gemaakt.

    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

    Voor RHEL 8 moet u de knooppunten afzonderlijk verifiëren. Voer handmatig de gebruikersnaam en het wachtwoord voor hacluster in wanneer hierom wordt gevraagd.

    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. Voer de volgende opdracht uit om te controleren of alle knooppunten online zijn.

    sudo pcs status
    

    RHEL 7

    Als alle knooppunten online zijn, ziet u uitvoer die lijkt op het volgende voorbeeld:

    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. Stel verwachte stemmen in het livecluster in op 3. Deze opdracht is alleen van invloed op het livecluster en wijzigt de configuratiebestanden niet.

    Stel op alle knooppunten de verwachte stemmen in met de volgende opdracht:

    sudo pcs quorum expected-votes 3
    

De agent voor fencing configureren

Als u een fencing-agent wilt configureren, worden de volgende instructies voor deze handleiding gewijzigd. Zie Een STONITH-apparaat maken voor meer informatie.

Controleer de versie van de Azure Fence-agent om ervoor te zorgen dat deze wordt bijgewerkt. Gebruik de volgende opdracht:

sudo yum info fence-agents-azure-arm

U zou een vergelijkbare uitvoer moeten zien als in het onderstaande voorbeeld.

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.

Een nieuwe toepassing registreren in Microsoft Entra-id

Voer de volgende stappen uit om een nieuwe toepassing te registreren in Microsoft Entra ID (voorheen Azure Active Directory):

  1. Ga naar https://portal.azure.com.
  2. Open het deelvenster Eigenschappen van Microsoft Entra-id en noteer het Tenant ID.
  3. Selecteer App-registraties.
  4. Selecteer Nieuwe registratie.
  5. Voer een naam in, zoals <resourceGroupName>-app. Voor ondersteunde accounttypen selecteert u alleen Accounts in deze organisatiemap (alleen Microsoft - Één tenant).
  6. Selecteer Web voor omleidings-URI en voer een URL in (bijvoorbeeld http://localhost) en selecteer Toevoegen. De aanmeldings-URL kan elke geldige URL zijn. Als u klaar bent, selecteert u Registreren.
  7. Kies Certificaten en geheimen voor uw nieuwe app-registratie en selecteer vervolgens Nieuw clientgeheim.
  8. Voer een beschrijving in voor een nieuwe sleutel (clientgeheim) en selecteer Vervolgens Toevoegen.
  9. Noteer de waarde van het geheim. Het wordt gebruikt als het wachtwoord voor de service-principal.
  10. Selecteer Overzicht. Noteer de toepassings-id. Deze wordt gebruikt als de gebruikersnaam (aanmeldings-id in de volgende stappen) van de service-principal.

Een aangepaste rol maken voor de fence agent

Volg de zelfstudie voor het maken van een aangepaste Azure-rol met behulp van Azure CLI.

Uw JSON-bestand moet er ongeveer uitzien als in het volgende voorbeeld:

  • Vervang door <username> een naam van uw keuze. Dit is om duplicatie te voorkomen bij het maken van deze roldefinitie.
  • Vervang <subscriptionId> door uw Azure-abonnements-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>"
  ]
}

Voer de volgende opdracht uit om de rol toe te voegen:

  • Vervang door <filename> de naam van het bestand.
  • Als u de opdracht uitvoert vanaf een ander pad dan de map waarnaar het bestand is opgeslagen, neemt u het mappad van het bestand op in de opdracht.
az role definition create --role-definition "<filename>.json"

U ziet nu de volgende uitvoer:

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

De aangepaste rol toewijzen aan de service-principal

Wijs de aangepaste rol Linux Fence Agent Role-<username> toe die in de laatste stap is gemaakt aan de service-principal. Gebruik de rol Eigenaar niet meer.

  1. Ga naar de Azure-portal
  2. Het deelvenster Alle resources openen
  3. Selecteer de virtuele machine van het eerste clusterknooppunt
  4. Selecteer Toegangsbeheer (IAM)
  5. Selecteer Een roltoewijzing toevoegen
  6. Selecteer de rol Linux Fence Agent Role-<username> uit de Rol lijst
  7. Voer in de lijst Selecteren de naam in van de toepassing die u eerder hebt gemaakt. <resourceGroupName>-app
  8. Selecteer Opslaan
  9. Herhaal deze stappen voor alle clusterknooppunten.

De STONITH-apparaten maken

Voer de volgende opdrachten uit op knooppunt 1:

  • Vervang de <ApplicationID> waarde door de id-waarde van uw toepassingsregistratie.
  • Vervang de <password> waarde door de waarde van het clientgeheim.
  • Vervang de <resourceGroupName> door de resourcegroep uit uw abonnement die voor deze zelfstudie wordt gebruikt.
  • Vervang het <tenantID> en het <subscriptionId> van uw Azure-abonnement.
sudo pcs property set stonith-timeout=900
sudo pcs stonith create rsc_st_azure fence_azure_arm login="<ApplicationID>" passwd="<password>" resourceGroup="<resourceGroupName>" tenantId="<tenantID>" subscriptionId="<subscriptionId>" power_timeout=240 pcmk_reboot_timeout=900

Omdat we al een regel aan onze firewall hebben toegevoegd om de HA-service (--add-service=high-availability) toe te staan, hoeft u de volgende firewallpoorten niet te openen op alle knooppunten: 2224, 3121, 21064, 5405. Als u echter enige netwerkproblemen ondervindt met HA, gebruikt u de volgende opdracht om de poorten te openen die aan HA zijn gekoppeld.

Aanbeveling

U kunt eventueel alle poorten in deze zelfstudie tegelijk toevoegen om tijd te besparen. De poorten die moeten worden geopend, worden uitgelegd in de relevante secties die volgen. Als u nu alle poorten wilt toevoegen, voegt u de extra poorten toe: 1433 en 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

SQL Server en mssql-tools installeren

Opmerking

Als u de VM's met SQL Server 2019 (15.x) vooraf hebt geïnstalleerd op RHEL8-HA, kunt u de onderstaande stappen overslaan om SQL Server en mssql-hulpprogramma's te installeren en de sectie Een beschikbaarheidsgroep configureren te starten nadat u het sa-wachtwoord hebt ingesteld op alle VM's door de opdracht sudo /opt/mssql/bin/mssql-conf set-sa-password uit te voeren op alle VM's.

Gebruik de onderstaande sectie om SQL Server en mssql-tools op de VM's te installeren. U kunt een van de onderstaande voorbeelden kiezen om SQL Server 2017 (14.x) te installeren op RHEL 7 of SQL Server 2019 (15.x) op RHEL 8. Voer elk van deze acties uit op alle knooppunten. Zie quickstart: SQL Server installeren en een database maken in Red Hat voor meer informatie.

SQL Server installeren op de VM's

De volgende opdrachten worden gebruikt om SQL Server te installeren:

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

Open firewallpoort 1433 voor externe verbindingen

U moet poort 1433 op de virtuele machine openen om extern verbinding te kunnen maken. Gebruik de volgende opdrachten om poort 1433 te openen in de firewall van elke VIRTUELE machine:

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

SQL Server-opdrachtregelhulpmiddelen installeren

De volgende opdrachten worden gebruikt om opdrachtregelprogramma's voor SQL Server te installeren. Zie de opdrachtregelprogramma's van SQL Server installeren voor meer informatie.

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

Voor het gemak voegt u deze toe /opt/mssql-tools/bin/ aan uw PATH omgevingsvariabele. Hiermee kunt u de hulpprogramma's uitvoeren zonder het volledige pad op te geven. Voer de volgende opdrachten uit om de PATH voor zowel aanmeldingssessies als interactieve/niet-aanmeldingssessies te wijzigen:

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

Controleer de status van de SQL Server

Zodra u klaar bent met de configuratie, kunt u de status van SQL Server controleren en controleren of deze wordt uitgevoerd:

systemctl status mssql-server --no-pager

U ziet nu de volgende uitvoer:

● 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

Een beschikbaarheidsgroep configureren

Gebruik de volgende stappen om een SQL Server AlwaysOn-beschikbaarheidsgroep voor uw VM's te configureren. Zie Sql Server AlwaysOn-beschikbaarheidsgroepen configureren voor hoge beschikbaarheid op Linuxvoor meer informatie.

AlwaysOn-beschikbaarheidsgroepen inschakelen en mssql-server opnieuw starten

Schakel AlwaysOn-beschikbaarheidsgroepen in op elk knooppunt dat als host fungeert voor een SQL Server-exemplaar. Start vervolgens mssql-server opnieuw op. Voer het volgende script uit:

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

Een certificaat maken

Momenteel bieden we geen ondersteuning voor AD-verificatie voor het AG-eindpunt. Daarom moeten we een certificaat gebruiken voor AG-eindpuntversleuteling.

  1. Maak verbinding met alle knooppunten met behulp van SQL Server Management Studio (SSMS) of sqlcmd. Voer de volgende opdrachten uit om een AlwaysOn_health sessie in te schakelen en een hoofdsleutel te maken:

    Belangrijk

    Als u extern verbinding maakt met uw SQL Server-exemplaar, moet poort 1433 zijn geopend op uw firewall. U moet ook binnenkomende verbindingen met poort 1433 in uw NSG toestaan voor elke VIRTUELE machine. Zie Een beveiligingsregel maken voor het maken van een binnenkomende beveiligingsregel voor meer informatie.

    • Vervang de <password> door uw eigen wachtwoord.
    ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE = ON);
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
    
  2. Maak verbinding met de primaire replica met behulp van SSMS of sqlcmd. Met de volgende opdrachten maakt u een certificaat op /var/opt/mssql/data/dbm_certificate.cer en een persoonlijke sleutel op var/opt/mssql/data/dbm_certificate.pvk uw primaire SQL Server-replica:

    • Vervang de <password> door uw eigen wachtwoord.
    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 = '<password>'
    );
    GO
    

Sluit de sqlcmd sessie af door de opdracht exit uit te voeren en terug te keren naar uw SSH-sessie.

Kopieer het certificaat naar de secundaire replica's en maak de certificaten op de server

  1. Kopieer de twee bestanden die zijn gemaakt op dezelfde locatie op alle servers waarop beschikbaarheidsreplica's worden gehost.

    Voer op de primaire server de volgende scp opdracht uit om het certificaat naar de doelservers te kopiëren:

    • Vervang <username> en <VM2> door de gebruikersnaam en doel-VM-naam die u gebruikt.
    • Voer deze opdracht uit voor alle secundaire replica's.

    Opmerking

    U hoeft sudo -iniet uit te voeren, waardoor u de hoofdomgeving krijgt. U kunt de sudo opdracht gewoon vóór elke opdracht uitvoeren, zoals we eerder in deze zelfstudie hebben gedaan.

    # 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. Voer op de doelserver de volgende opdracht uit:

    • Vervang <username> door uw gebruikersnaam.
    • Met de opdracht mv worden de bestanden of map van de ene naar de andere locatie verplaatst.
    • De opdracht chown wordt gebruikt om de eigenaar en groep bestanden, mappen of koppelingen te wijzigen.
    • Voer deze opdrachten uit voor alle secundaire replica's.
    sudo -i
    mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/
    cd /var/opt/mssql/data
    chown mssql:mssql dbm_certificate.*
    
  3. Met het volgende Transact-SQL script wordt een certificaat gemaakt op basis van de back-up die u hebt gemaakt op de primaire SQL Server-replica. Werk het script bij met sterke wachtwoorden. Het ontsleutelingswachtwoord is hetzelfde wachtwoord dat u in de vorige stap hebt gebruikt om het PVK-bestand te maken. Als u het certificaat wilt maken, voert u het volgende script uit met behulp van sqlcmd of SSMS op alle secundaire servers:

    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 = '<password>'
    );
    GO
    

De eindpunten voor databasespiegeling maken op alle replica's

Voer het volgende script uit op alle SQL Server-exemplaren met behulp van sqlcmd of 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

De beschikbaarheidsgroep maken

Maak verbinding met het SQL Server-exemplaar dat als host fungeert voor de primaire replica met behulp van sqlcmd of SSMS. Voer de volgende opdracht uit om de beschikbaarheidsgroep te maken:

  • Vervang door ag1 de gewenste naam van de beschikbaarheidsgroep.
  • Vervang de waarden <VM1>, <VM2>en <VM3> door de namen van de SQL Server-exemplaren die als host fungeren voor de replica's.
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

Een SQL Server-aanmelding maken voor Pacemaker

Maak op alle SQL Server-exemplaren een SQL Server-aanmelding voor Pacemaker. Met de volgende Transact-SQL wordt een inlog gecreëerd.

  • Vervang <password> door uw eigen complexe wachtwoord.
USE [master];
GO

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

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

Sla op alle SQL Server-exemplaren de inloggegevens op die worden gebruikt voor de SQL Server-inlog.

  1. Maak het bestand:

    sudo vi /var/opt/mssql/secrets/passwd
    
  2. Voeg de volgende regels toe aan het bestand:

    pacemakerLogin
    <password>
    

    Als u de vi editor wilt afsluiten, drukt u eerst op de toets Esc en voert u de opdracht in :wq om het bestand te schrijven en af te sluiten.

  3. Maak het bestand alleen leesbaar voor de rootgebruiker.

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

Secundaire replica's toevoegen aan de beschikbaarheidsgroep

  1. Als u de secundaire replica's wilt toevoegen aan de beschikbaarheidsgroep, moet u voor alle servers poort 5022 op de firewall openen. Voer de volgende opdracht uit in uw SSH-sessie:

    sudo firewall-cmd --zone=public --add-port=5022/tcp --permanent
    sudo firewall-cmd --reload
    
  2. Voer op je secundaire replica's de volgende opdrachten uit om ze aan de AG toe te voegen:

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  3. Voer het volgende Transact-SQL script uit op de primaire replica en elke secundaire replica:

    GRANT ALTER, CONTROL, VIEW DEFINITION
        ON AVAILABILITY GROUP::ag1 TO pacemakerLogin;
    GO
    
    GRANT VIEW SERVER STATE TO pacemakerLogin;
    GO
    
  4. Zodra de secundaire replica's zijn gekoppeld, kunt u deze zien in SSMS Object Explorer door het knooppunt AlwaysOn High Availability uit te vouwen:

    Schermopname toont de primaire en secundaire beschikbaarheidsreplica's.

Een database toevoegen aan de beschikbaarheidsgroep

We volgen het artikel over het configureren van een beschikbaarheidsgroep waarin een database wordt toegevoegd.

In deze stap worden de volgende Transact-SQL opdrachten gebruikt. Voer deze opdrachten uit op de primaire replica:

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

Controleer of de database is gemaakt op de secundaire servers

Voer op elke secundaire SQL Server-replica de volgende query uit om te zien of de db1-database is gemaakt en de status GESYNCHRONISEERD heeft:

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;

Als de synchronization_state_desc GESYNCHRONISEERD voor db1vermeldt, betekent dit dat de replica's worden gesynchroniseerd. De secundaire bestanden worden weergegeven db1 in de primaire replica.

Maak bronnen voor beschikbaarheidsgroepen in het Pacemaker-cluster

We volgen de handleiding om resources voor de beschikbaarheidsgroep in het Pacemaker-cluster te maken.

Opmerking

Dit artikel bevat verwijzingen naar de term slave, een term die Microsoft niet meer gebruikt. Wanneer de term uit de software wordt verwijderd, wordt deze uit dit artikel verwijderd.

Maak de AG-clusterresource aan

  1. Gebruik een van de volgende opdrachten op basis van de eerder gekozen omgeving om de resource ag_cluster in de beschikbaarheidsgroep ag1te maken.

    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. Zorg ervoor dat uw resources online zijn voordat u doorgaat met behulp van de volgende opdracht:

    sudo pcs resource
    

    U ziet nu de volgende uitvoer:

    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)
    

Een virtuele IP-resource maken

  1. Gebruik een beschikbaar statisch IP-adres van uw netwerk om een virtuele IP-resource te maken. U kunt er een vinden met behulp van het opdrachtprogramma 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. Stel de eigenschap stonith-enabled in op false.

    sudo pcs property set stonith-enabled=false
    
  3. Maak de virtuele IP-resource met behulp van de volgende opdracht. Vervang door <availableIP> een ongebruikt IP-adres.

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

Beperkingen toevoegen

  1. Om ervoor te zorgen dat het IP-adres en de AG-resource op hetzelfde knooppunt worden uitgevoerd, moet er een colocatiebeperking worden geconfigureerd. Voer de volgende opdracht uit:

    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. Maak een volgorde beperking om ervoor te zorgen dat de AG-resource operationeel is voordat het IP-adres beschikbaar is. Hoewel de colocatiebeperking een bestelbeperking impliceert, wordt dit afgedwongen.

    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. Voer de volgende opdracht uit om de beperkingen te controleren:

    sudo pcs constraint list --full
    

    U ziet nu de volgende uitvoer:

    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:
    

stonith opnieuw inschakelen

We zijn klaar om te testen. Schakel stonith opnieuw in het cluster in door de volgende opdracht uit te voeren op Node 1:

sudo pcs property set stonith-enabled=true

De clusterstatus controleren

U kunt de status van uw clusterbronnen controleren met behulp van de volgende opdracht:

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

Failover testen

Om ervoor te zorgen dat de configuratie tot nu toe is geslaagd, testen we een failover. Zie AlwaysOn-beschikbaarheidsgroepfailover in Linux voor meer informatie.

  1. Voer de volgende opdracht uit om handmatig een failover van de primaire replica naar <VM2> uit te voeren. Vervang <VM2> door de waarde van uw servernaam.

    RHEL 7

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

    RHEL 8

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

    U kunt ook een extra optie opgeven, zodat de tijdelijke beperking die is gemaakt om de resource naar een gewenst knooppunt te verplaatsen, automatisch wordt uitgeschakeld en u hoeft stap 2 en 3 niet uit te voeren in de volgende instructies.

    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
    

    Een ander alternatief voor het automatiseren van stap 2 en 3, waardoor de tijdelijke beperking in de opdracht voor het verplaatsen van resources zelf wordt gewist, is door meerdere opdrachten op één regel te combineren.

    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. Als u de beperkingen opnieuw controleert, ziet u dat er een andere beperking is toegevoegd vanwege de handmatige failover:

    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. Verwijder de beperking met id cli-prefer-ag_cluster-master met behulp van de volgende opdracht:

    RHEL 7

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    

    RHEL 8

    sudo pcs constraint remove cli-prefer-ag_cluster-clone
    
  4. Controleer uw clusterbronnen met behulp van de opdracht sudo pcs resourceen u ziet dat het primaire exemplaar nu <VM2>is.

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

Fencing testen

U kunt fencing testen door de volgende opdracht uit te voeren. Probeer het onderstaande commando uit te voeren vanaf <VM1> voor <VM3>.

sudo pcs stonith fence <VM3> --debug

Opmerking

Standaard schakelt de omheiningsactie het knooppunt uit en vervolgens weer in. Als u het knooppunt alleen offline wilt brengen, gebruikt u de optie --off in de opdracht.

U moet de volgende uitvoer krijgen:

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

Zie Een fence-apparaat testen vanuit Red Hat voor meer informatie over het testen van een hekapparaat.

Volgende stap