Dela via


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

gäller för:SQL Server på virtuella Azure-datorer

Anmärkning

Vi använder SQL Server 2022 (16.x) med SUSE Linux Enterprise Server (SLES) v15 i den här självstudien, men det går att använda SQL Server 2019 (15.x) med SLES v12 eller SLES v15 för att konfigurera hög tillgänglighet.

I den här tutorialen lär du dig följande:

  • 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å SLES
  • Konfigurera SQL Server AlwaysOn-tillgänglighetsgrupp
  • Konfigurera tillgänglighetsgruppresurser (AG) i Pacemaker-klustret
  • Testa en redundansväxling och fäktningsagenten

Den här handledningen 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

  • 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. I den här handledningen används East US 2. Mer information hittas i det följande Quickstart.

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 ett virtuellt nätverk och undernät

  1. Skapa ett namngivet undernät med ett förtilldelat IP-adressintervall. Ersätt dessa värden i följande kommando:

    • <resourceGroupName>
    • <vNetName>
    • <subnetName>
    az network vnet create \
        --resource-group <resourceGroupName> \
        --name <vNetName> \
        --address-prefix 10.1.0.0/16 \
        --subnet-name <subnetName> \
        --subnet-prefix 10.1.1.0/24
    

    Föregående kommando skapar ett virtuellt nätverk och ett undernät som innehåller ett anpassat IP-intervall.

Skapa SLES-VM i en tillgänglighetsuppsättning

  1. Hämta en lista över avbildningar av virtuella datorer som erbjuder SLES v15 SP4 med BYOS (ta med din egen prenumeration). Du kan också använda SUSE Enterprise Linux 15 SP4 + Patching VM (sles-15-sp4-basic).

    az vm image list --all --offer "sles-15-sp3-byos"
    # if you want to search the basic offers you could search using the command below
    az vm image list --all --offer "sles-15-sp3-basic"
    

    Du bör se följande resultat när du söker efter BYOS-bilderna:

    [
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen1",
          "urn": "SUSE:sles-15-sp3-byos:gen1:2022.05.05",
          "version": "2022.05.05"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen1",
          "urn": "SUSE:sles-15-sp3-byos:gen1:2022.07.19",
          "version": "2022.07.19"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen1",
          "urn": "SUSE:sles-15-sp3-byos:gen1:2022.11.10",
          "version": "2022.11.10"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen2",
          "urn": "SUSE:sles-15-sp3-byos:gen2:2022.05.05",
          "version": "2022.05.05"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen2",
          "urn": "SUSE:sles-15-sp3-byos:gen2:2022.07.19",
          "version": "2022.07.19"
       },
       {
          "offer": "sles-15-sp3-byos",
          "publisher": "SUSE",
          "sku": "gen2",
          "urn": "SUSE:sles-15-sp3-byos:gen2:2022.11.10",
          "version": "2022.11.10"
       }
    ]
    

    I den här handledningen används SUSE:sles-15-sp3-byos:gen1:2022.11.10.

    Viktigt!

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

  2. 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_D16s_v3"
    • <username>
    • <adminPassword>
    • <vNetName>
    • <subnetName>
    for i in `seq 1 3`; do
        az vm create \
           --resource-group <resourceGroupName> \
           --name <VM-basename>$i \
           --availability-set <availabilitySetName> \
           --size "<VM-Size>" \
           --os-disk-size-gb 128 \
           --image "SUSE:sles-15-sp3-byos:gen1:2022.11.10" \
           --admin-username "<username>" \
           --admin-password "<adminPassword>" \
           --authentication-type all \
           --generate-ssh-keys \
           --vnet-name "<vNetName>" \
           --subnet "<subnetName>" \
           --public-ip-sku Standard \
           --public-ip-address ""
        done
    

Föregående kommando skapar de virtuella datorerna med det tidigare definierade virtuella nätverket. Mer information om de olika konfigurationerna finns i artikeln az vm create.

Kommandot innehåller även parametern --os-disk-size-gb för att skapa en anpassad operativsystemenhetsstorlek på 128 GB. Om du ökar den här storleken senare, expanderar du lämpliga mappvolymer för att passa installationen, och konfigurerar då Logical Volume Manager (LVM).

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

Testa anslutningen till de skapade virtuella datorerna

Anslut till var och en av de virtuella datorerna med följande kommando i Azure Cloud Shell. Om du inte kan hitta dina VM-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>@sles1 ~]$

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

Registrera dig med SUSEAnslut och installera paket med hög tillgänglighet

För att kunna slutföra den här självstudien måste dina virtuella datorer registreras med SUSEConnect för att få uppdateringar och support. Du kan sedan installera modulen för tillägg för hög tillgänglighet, eller mönster, som är en uppsättning paket som aktiverar HA.

Det är enklare att öppna en SSH-session på var och en av de virtuella datorerna (noderna) samtidigt, eftersom 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.

Anslut till varje vm-nod för att köra följande steg.

Registrera den virtuella datorn med SUSEConnect

Om du vill registrera din VM-nod med SUSEConnect ersätter du dessa värden i följande kommando på alla noder:

  • <subscriptionEmailAddress>
  • <registrationCode>
sudo SUSEConnect
    --url=https://scc.suse.com
    -e <subscriptionEmailAddress> \
    -r <registrationCode>

Installera tillägg för hög tillgänglighet

Om du vill installera tillägget för hög tillgänglighet kör du följande kommando på alla noder:

sudo SUSEConnect -p sle-ha/15.3/x86_64 -r <registration code for Partner Subscription for High Availability Extension>

Konfigurera lösenordsfri SSH-åtkomst mellan noder

Med lösenordslös SSH-åtkomst kan dina virtuella datorer kommunicera med varandra med hjälp av offentliga SSH-nycklar. Du måste konfigurera SSH-nycklar på varje nod och kopiera dessa nycklar till varje nod.

Generera nya SSH-nycklar

Den nödvändiga SSH-nyckelstorleken är 4 096 bitar. På varje virtuell dator ändrar du till mappen /root/.ssh och kör följande kommando:

ssh-keygen -t rsa -b 4096

Under det här steget kan du uppmanas att skriva över en befintlig SSH-fil. Du måste godkänna den här uppmaningen. Du behöver inte ange en lösenfras.

Kopiera de offentliga SSH-nycklarna

På varje virtuell dator måste du kopiera den offentliga nyckeln från den nod som du nyss skapade med hjälp av kommandot ssh-copy-id. Om du vill ange målkatalogen på den virtuella måldatorn kan du använda parametern -i.

I följande kommando kan <username>-kontot vara samma konto som du konfigurerade för varje nod när du skapade den virtuella datorn. Du kan också använda root-kontot, men det rekommenderas inte i en produktionsmiljö.

sudo ssh-copy-id <username>@sles1
sudo ssh-copy-id <username>@sles2
sudo ssh-copy-id <username>@sles3

Verifiera lösenordslös åtkomst från varje nod

Om du vill bekräfta att den offentliga SSH-nyckeln kopierades till varje nod använder du kommandot ssh från varje nod. Om du kopierade nycklarna korrekt uppmanas du inte att ange något lösenord och anslutningen lyckas.

I det här exemplet ansluter vi till den andra och tredje noderna från den första virtuella datorn (sles1). <username> Återigen kan kontot vara samma konto som du konfigurerade för varje nod när du skapade den virtuella datorn

ssh <username>@sles2
ssh <username>@sles3

Upprepa den här processen från alla tre noderna så att varje nod kan kommunicera med de andra utan att kräva lösenord.

Konfigurera namnupplösning

Du kan konfigurera namnmatchning med antingen DNS eller genom att redigera etc/hosts filen manuellt på varje nod.

Mer information om DNS och Active Directory finns i Ansluta SQL Server på en Linux-värd till en Active Directory-domän.

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 gör den virtuella datorn tillgänglig för externa nätverk.

De virtuella datorerna och deras IP-adress som används i det här exemplet visas på följande sätt:

  • sles1: 10.0.0.85
  • sles2: 10.0.0.86
  • sles3: 10.0.0.87

Konfigurera klustret

I den här självstudien är den första virtuella datorn (sles1) nod 1, den andra virtuella datorn (sles2) är nod 2 och den tredje virtuella datorn (sles3) är nod 3. Mer information om klusterinstallation finns i Konfigurera Pacemaker på SUSE Linux Enterprise Server i Azure.

Klusterinstallation

  1. Kör följande kommando för att installera ha-cluster-bootstrap paketet på nod 1 och starta sedan om noden. I det här exemplet är det den sles1 virtuella datorn.

    sudo zypper install ha-cluster-bootstrap
    

    När noden har startats om kör du följande kommando för att distribuera klustret:

    sudo crm cluster init --name sqlcluster
    

    Du ser ett liknande utdata som i följande exempel:

    Do you want to continue anyway (y/n)? y
      Generating SSH key for root
      The user 'hacluster' will have the login shell configuration changed to /bin/bash
    Continue (y/n)? y
      Generating SSH key for hacluster
      Configuring csync2
      Generating csync2 shared key (this may take a while)...done
      csync2 checking files...done
      Detected cloud platform: microsoft-azure
    
    Configure Corosync (unicast):
      This will configure the cluster messaging layer.  You will need
      to specify a network address over which to communicate (default
      is eth0's network, but you can use the network address of any
      active interface).
    
      Address for ring0 [10.0.0.85]
      Port for ring0 [5405]
    
    Configure SBD:
      If you have shared storage, for example a SAN or iSCSI target,
      you can use it avoid split-brain scenarios by configuring SBD.
      This requires a 1 MB partition, accessible to all nodes in the
      cluster.  The device path must be persistent and consistent
      across all nodes in the cluster, so /dev/disk/by-id/* devices
      are a good choice.  Note that all data on the partition you
      specify here will be destroyed.
    
    Do you wish to use SBD (y/n)? n
    WARNING: Not configuring SBD - STONITH will be disabled.
      Hawk cluster interface is now running. To see cluster status, open:
        https://10.0.0.85:7630/
      Log in with username 'hacluster', password 'linux'
    WARNING: You should change the hacluster password to something more secure!
      Waiting for cluster..............done
      Loading initial cluster configuration
    
    Configure Administration IP Address:
      Optionally configure an administration virtual IP
      address. The purpose of this IP address is to
      provide a single IP that can be used to interact
      with the cluster, rather than using the IP address
      of any specific cluster node.
    
    Do you wish to configure a virtual IP address (y/n)? y
      Virtual IP []10.0.0.89
      Configuring virtual IP (10.0.0.89)....done
    
    Configure Qdevice/Qnetd:
      QDevice participates in quorum decisions. With the assistance of
      a third-party arbitrator Qnetd, it provides votes so that a cluster
      is able to sustain more node failures than standard quorum rules
      allow. It is recommended for clusters with an even number of nodes
      and highly recommended for 2 node clusters.
    
    Do you want to configure QDevice (y/n)? n
    Done (log saved to /var/log/crmsh/ha-cluster-bootstrap.log)
    
  2. Kontrollera statusen för klustret på nod 1 med följande kommando:

    sudo crm status
    

    Dina utdata bör innehålla följande text om den lyckades:

    1 node configured
    1 resource instance configured
    
  3. alla noder ändrar du lösenordet för hacluster till något säkrare med hjälp av följande kommando. Du måste också ändra användarlösenordet root :

    sudo passwd hacluster
    
    sudo passwd root
    
  4. Kör följande kommando på nod 2 och nod 3 för att först installera crmsh paketet:

    sudo zypper install crmsh
    

    Kör nu kommandot för att ansluta till klustret:

    sudo crm cluster join
    

    Här är några av de interaktioner som du kan förvänta dig:

    Join This Node to Cluster:
    You will be asked for the IP address of an existing node, from which
    configuration will be copied.  If you have not already configured
    passwordless ssh between nodes, you will be prompted for the root
    password of the existing node.
    
      IP address or hostname of existing node (e.g.: 192.168.1.1) []10.0.0.85
      Configuring SSH passwordless with root@10.0.0.85
      root@10.0.0.85's password:
      Configuring SSH passwordless with hacluster@10.0.0.85
      Configuring csync2...done
    Merging known_hosts
    WARNING: scp to sles2 failed (Exited with error code 1, Error output: The authenticity of host 'sles2 (10.1.1.5)' can't be established.
    ECDSA key fingerprint is SHA256:UI0iyfL5N6X1ZahxntrScxyiamtzsDZ9Ftmeg8rSBFI.
    Are you sure you want to continue connecting (yes/no/[fingerprint])?
    lost connection
    ), known_hosts update may be incomplete
    Probing for new partitions...done
      Address for ring0 [10.0.0.86]
    
    Hawk cluster interface is now running. To see cluster status, open:
        https://10.0.0.86:7630/
      Log in with username 'hacluster', password 'linux'
    WARNING: You should change the hacluster password to something more secure!
    Waiting for cluster.....done
    Reloading cluster configuration...done
      Done (log saved to /var/log/crmsh/ha-cluster-bootstrap.log)
    
  5. När du har anslutit alla datorer till klustret kontrollerar du resursen för att se om alla virtuella datorer är online:

    sudo crm status
    

    Du bör se följande utdata:

    Stack: corosync
     Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
     Last updated: Mon Mar  6 18:01:17 2023
     Last change:  Mon Mar  6 17:10:09 2023 by root via cibadmin on sles1
    
    3 nodes configured
    1 resource instance configured
    
    Online: [ sles1 sles2 sles3 ]
    
    Full list of resources:
    
     admin-ip       (ocf::heartbeat:IPaddr2):       Started sles1
    
  6. Installera klusterresurskomponenten. Kör följande kommando på alla noder.

    sudo zypper in socat
    
  7. Installera komponenten azure-lb . Kör följande kommando på alla noder.

    sudo zypper in resource-agents
    
  8. Konfigurera operativsystemet. Gå igenom följande steg på alla noder.

    1. Redigera konfigurationsfilen:

      sudo vi /etc/systemd/system.conf
      
    2. Ändra värdet för DefaultTasksMax till 4096:

      #DefaultTasksMax=512
      DefaultTasksMax=4096
      
    3. Spara och avsluta vi-redigeraren .

    4. Om du vill aktivera den här inställningen kör du följande kommando:

      sudo systemctl daemon-reload
      
    5. Testa om ändringen lyckades:

      sudo systemctl --no-pager show | grep DefaultTasksMax
      
  9. Minska storleken på den smutsiga cachen. Gå igenom följande steg på alla noder.

    1. Redigera systemkontrollkonfigurationsfilen:

      sudo vi /etc/sysctl.conf
      
    2. Lägg till följande två rader i filen:

      vm.dirty_bytes = 629145600
      vm.dirty_background_bytes = 314572800
      
    3. Spara och avsluta vi-redigeraren .

  10. Installera Azure Python SDK på alla noder med följande kommandon:

    sudo zypper install fence-agents
    # Install the Azure Python SDK on SLES 15 or later:
    # You might need to activate the public cloud extension first. In this example, the SUSEConnect command is for SLES 15 SP1
    SUSEConnect -p sle-module-public-cloud/15.1/x86_64
    sudo zypper install python3-azure-mgmt-compute
    sudo zypper install python3-azure-identity
    

Konfigurera stängslingsagent

En STONITH-enhet tillhandahåller en fäktningsagent. Anvisningarna nedan har ändrats för denna handledning. Mer information finns i Skapa en Azure Fence Agent STONITH-enhet.

Kontrollera versionen av Azure Fence-agenten för att se till att den uppdateras. Använd följande kommando:

sudo zypper info resource-agents

Du bör se ett resultat som liknar exemplet nedan.

Information for package resource-agents:
----------------------------------------
Repository     : SLE-Product-HA15-SP3-Updates
Name           : resource-agents
Version        : 4.8.0+git30.d0077df0-150300.8.37.1
Arch           : x86_64
Vendor         : SUSE LLC <https://www.suse.com/>
Support Level  : Level 3
Installed Size : 2.5 MiB
Installed      : Yes (automatically)
Status         : up-to-date
Source package : resource-agents-4.8.0+git30.d0077df0-150300.8.37.1.src
Upstream URL   : http://linux-ha.org/
Summary        : HA Reusable Cluster Resource Scripts
Description    : A set of scripts to interface with several services
                 to operate in a High Availability environment for both
                 Pacemaker and rgmanager service managers.

Registrera 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 stegen nedan) för tjänstprincipal.

Skapa en anpassad roll för stängselagenten

Följ självstudien för att skapa en anpassad Azure-roll med 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. Upprepa de här stegen för alla noder.

Varning

Använd inte rollen Ägare från och med nu.

  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 rolltilldelningar
  6. Välj rollen Linux Fence Agent Role-<username> i listan Roll
  7. Lämna Tilldela åtkomst till som standard Users, group, or service principal.
  8. I listan Välj anger du namnet på det program som du skapade tidigare, till exempel <resourceGroupName>-app.
  9. Välj Spara.

Skapa STONITH-enheterna

  1. 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.
  2. Kör crm configure för att öppna crm-prompten :

    sudo crm configure
    
  3. I crm-prompten kör du följande kommando för att konfigurera resursegenskaperna, vilket skapar resursen anropad rsc_st_azure enligt följande exempel:

    primitive rsc_st_azure stonith:fence_azure_arm params subscriptionId="subscriptionID" resourceGroup="ResourceGroup_Name" tenantId="TenantID" login="ApplicationID" passwd="servicePrincipalPassword" pcmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="sles1:sles1;sles2:sles2;sles3:sles3" op monitor interval=3600 timeout=120
    commit
    quit
    
  4. Kör följande kommandon för att konfigurera fäktningsagenten:

    sudo crm configure property stonith-timeout=900
    sudo crm configure property stonith-enabled=true
    sudo crm configure property concurrent-fencing=true
    
  5. Kontrollera statusen för klustret för att se att STONITH har aktiverats:

    sudo crm status
    

    Du bör se utdata som liknar följande text:

    Stack: corosync
     Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
     Last updated: Mon Mar  6 18:20:17 2023
     Last change:  Mon Mar  6 18:10:09 2023 by root via cibadmin on sles1
    
    3 nodes configured
    2 resource instances configured
    
    Online: [ sles1 sles2 sles3 ]
    
    Full list of resources:
    
    admin-ip       (ocf::heartbeat:IPaddr2):       Started sles1
    rsc_st_azure   (stonith:fence_azure_arm):      Started sles2
    

Installera SQL Server och mssql-tools

Använd avsnittet nedan för att installera SQL Server och mssql-tools. Mer information finns i Installera SQL Server på SUSE Linux Enterprise Server.

Utför de här stegen på alla noder i det här avsnittet.

Installera SQL Server på de virtuella datorerna

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

  1. Ladda ned konfigurationsfilen för Microsoft SQL Server 2019 SLES-lagringsplatsen:

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/15/mssql-server-2022.repo
    
  2. Uppdatera dina lagringsplatser.

    sudo zypper --gpg-auto-import-keys refresh
    

    Använd följande kommando för att importera nyckeln för att säkerställa att Microsoft-paketsigneringsnyckeln är installerad på systemet:

    sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
    
  3. Kör följande kommandon för att installera SQL Server:

    sudo zypper install -y mssql-server
    
  4. När paketinstallationen är klar kör du mssql-conf setup och följer anvisningarna för att ange SA-lösenordet och välja din utgåva.

    sudo /opt/mssql/bin/mssql-conf setup
    

    Anmärkning

    Se till att ange ett starkt lösenord för SA-kontot (minsta längd på 8 tecken, inklusive versaler och gemener, bas 10 siffror och/eller icke-alfanumeriska symboler).

  5. När konfigurationen är klar kontrollerar du att tjänsten körs:

    systemctl status mssql-server
    

Installera kommandoradsverktyg för SQL Server

Följande steg installerar kommandoradsverktygen för SQL Server, nämligen sqlcmd och bcp.

  1. Lägg till Microsoft SQL Server-lagringsplatsen i Zypper.

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/15/prod.repo
    
  2. Uppdatera dina lagringsplatser.

    sudo zypper --gpg-auto-import-keys refresh
    
  3. Installera mssql-tools med unixODBC utvecklarpaketet. Mer information finns i Installera Microsoft ODBC-drivrutinen för SQL Server (Linux).

    sudo zypper install -y mssql-tools unixODBC-devel
    

För enkelhetens skull kan du lägga till /opt/mssql-tools/bin/ i din PATH miljövariabel. 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

Installera SQL Server-agent med hög tillgänglighet

Kör följande kommando på alla noder för att installera agentpaketet med hög tillgänglighet för SQL Server:

sudo zypper install mssql-server-ha

Öppna portar för tjänster med hög tillgänglighet

  1. Du kan öppna följande brandväggsportar på alla noder för SQL Server- och HA-tjänster: 1433, 2224, 3121, 5022, 5405, 21064.

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

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 tillgänglighetsgrupper och starta om SQL Server

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

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

Skapa ett certifikat

Microsoft stöder inte Active Directory-autentisering till ag-slutpunkten. Därför måste du använda ett certifikat för AG-slutpunktskryptering.

  1. Anslut alla noder till 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 regel för inkommande säkerhet.

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

    • Ersätt <PrivateKeyPassword> 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 = '<PrivateKeyPassword>'
            );
    GO
    

Avsluta den sqlcmd--sessionen genom att köra kommandot exit 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 sles2 med det användarnamn och måldatornamn som du använder.
    • Kör det här kommandot för alla sekundära repliker.

    Anmärkning

    Du behöver inte köra sudo -i, vilket ger dig rotmiljön. Du kan köra kommandot sudo framför varje kommando i stället.

    # The below command allows you to run commands in the root environment
    sudo -i
    
    scp /var/opt/mssql/data/dbm_certificate.* <username>@sles2:/home/<username>
    
  2. 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 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 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 = '<PrivateKeyPassword>'
    );
    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 hjälp av sqlcmd eller SSMS. Kör följande kommando för att skapa tillgänglighetsgruppen:

  • Ersätt ag1 med önskat ag-namn.
  • Ersätt värdena sles1, sles2och sles3 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'sles1'
WITH (
        ENDPOINT_URL = N'tcp://sles1:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'sles2'
WITH (
        ENDPOINT_URL = N'tcp://sles2:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'sles3'
WITH (
        ENDPOINT_URL = N'tcp://sles3: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 två rader i filen:

    pacemakerLogin
    <password>
    

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

  3. Gör filen endast läsbar för Root.

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

Anslut sekundära repliker till tillgänglighetsgruppen

  1. 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
    
  2. 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
    
  3. När de sekundära replikerna har anslutits kan du se dem i SSMS Object Explorer genom att 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

Det här avsnittet följer artikeln om för att lägga till en databas i en tillgänglighetsgrupp.

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

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

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

Anmärkning

Biasfri kommunikation

Den här artikeln innehåller referenser till termen slave, en term som Microsoft anser vara stötande när den används i den här kontexten. 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.

Den här artikeln refererar till guiden för att skapa tillgänglighetsgruppens resurser i ett Pacemaker-kluster.

Aktivera Pacemaker

Aktivera Pacemaker så att den startas automatiskt.

Kör följande kommando på alla noder i klustret.

sudo systemctl enable pacemaker

Skapa ag-klusterresursen

  1. Kör crm configure för att öppna crm-prompten :

    sudo crm configure
    
  2. I crm-prompten kör du följande kommando för att konfigurera resursegenskaperna. Följande kommandon skapar resursen ag_cluster i tillgänglighetsgruppen ag1.

    primitive ag_cluster ocf:mssql:ag params ag_name="ag1" meta failure-timeout=60s op start timeout=60s op stop timeout=60s op promote timeout=60s op demote timeout=10s op monitor timeout=60s interval=10s op monitor timeout=60s interval=11s role="Master" op monitor timeout=60s interval=12s role="Slave" op notify timeout=60s ms ms-ag_cluster ag_cluster meta master-max="1" master-node-max="1" clone-max="3" clone-node-max="1" notify="true"
    commit
    quit
    

    Tips/Råd

    Skriv quit för att avsluta crm-prompten .

  3. Ange samplaceringsvillkoret för den virtuella IP-adressen så att den körs på samma nod som den primära noden.

    sudo crm configure
    colocation vip_on_master inf: admin-ip ms-ag_cluster: Master
    commit
    quit
    
  4. Lägg till ordningsbegränsningen för att förhindra att IP-adressen tillfälligt pekar på noden med den sekundära före övergången. Kör följande kommando för att skapa ordningsbegränsning:

    sudo crm configure
    order ag_first inf: ms-ag_cluster:promote admin-ip:start
    commit
    quit
    
  5. Kontrollera statusen för klustret med kommandot :

    sudo crm status
    

    Utdata bör likna följande exempel:

    Cluster Summary:
      * Stack: corosync
      * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
      * Last updated: Mon Mar  6 18:38:17 2023
      * Last change:  Mon Mar  6 18:38:09 2023 by root via cibadmin on sles1
      * 3 nodes configured
      * 5 resource instances configured
    
    Node List:
      * Online: [ sles1 sles2 sles3 ]
    
    Full List of Resources:
      * admin-ip    (ocf::heartbeat:IPaddr2):                Started sles1
      * rsc_st_azure        (stonith:fence_azure_arm):       Started sles2
      * Clone Set: ms-ag_cluster [ag_cluster] (promotable):
        * Masters: [ sles1 ]
        * Slaves: [ sles2 sles3 ]
    
  6. Kör följande kommando för att granska begränsningarna:

    sudo crm configure show
    

    Utdata bör likna följande exempel:

    node 1: sles1
    node 2: sles2
    node 3: sles3
    primitive admin-ip IPaddr2 \
            params ip=10.0.0.93 \
            op monitor interval=10 timeout=20
    primitive ag_cluster ocf:mssql:ag \
            params ag_name=ag1 \
            meta failure-timeout=60s \
            op start timeout=60s interval=0 \
            op stop timeout=60s interval=0 \
            op promote timeout=60s interval=0 \
            op demote timeout=10s interval=0 \
            op monitor timeout=60s interval=10s \
            op monitor timeout=60s interval=11s role=Master \
            op monitor timeout=60s interval=12s role=Slave \
            op notify timeout=60s interval=0
    primitive rsc_st_azure stonith:fence_azure_arm \
            params subscriptionId=xxxxxxx resourceGroup=amvindomain tenantId=xxxxxxx login=xxxxxxx passwd="******" cmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="sles1:sles1;les2:sles2;sles3:sles3" \
            op monitor interval=3600 timeout=120
    ms ms-ag_cluster ag_cluster \
            meta master-max=1 master-node-max=1 clone-max=3 clone-node-max=1 notify=true
    order ag_first Mandatory: ms-ag_cluster:promote admin-ip:start
    colocation vip_on_master inf: admin-ip ms-ag_cluster:Master
    property cib-bootstrap-options: \
            have-watchdog=false \
            dc-version="2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712" \
            cluster-infrastructure=corosync \
            cluster-name=sqlcluster \
            stonith-enabled=true \
            concurrent-fencing=true \
            stonith-timeout=900
    rsc_defaults rsc-options: \
            resource-stickiness=1 \
            migration-threshold=3
    op_defaults op-options: \
            timeout=600 \
            record-pending=true
    

Testa övergång till reservsystem

Testa en redundansväxling för att säkerställa att konfigurationen har slutförts hittills. Mer information finns i AlwaysOn-tillgänglighetsgruppens redundansväxling i Linux.

  1. Kör följande kommando för att manuellt byta över den primära repliken till sles2. Ersätt sles2 med värdet för servernamnet.

    sudo crm resource move ag_cluster sles2
    

    Utdata bör likna följande exempel:

    INFO: Move constraint created for ms-ag_cluster to sles2
    INFO: Use `crm resource clear ms-ag_cluster` to remove this constraint
    
  2. Kontrollera status för klustret:

    sudo crm status
    

    Utdata bör likna följande exempel:

    Cluster Summary:
      * Stack: corosync
      * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
      * Last updated: Mon Mar  6 18:40:02 2023
      * Last change:  Mon Mar  6 18:39:53 2023 by root via crm_resource on sles1
      * 3 nodes configured
      * 5 resource instances configured
    
    Node List:
      * Online: [ sles1 sles2 sles3 ]
    
    Full List of Resources:
      * admin-ip    (ocf::heartbeat:IPaddr2):                Stopped
      * rsc_st_azure        (stonith:fence_azure_arm):       Started sles2
      * Clone Set: ms-ag_cluster [ag_cluster] (promotable):
        * Slaves: [ sles1 sles2 sles3 ]
    
  3. Efter en tid är den sles2 virtuella datorn nu den primära och de andra två virtuella datorerna är sekundärdatorer. Kör sudo crm status igen och granska utdata, vilket liknar följande exempel:

    Cluster Summary:
      * Stack: corosync
      * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum
      * Last updated: Tue Mar  6 22:00:44 2023
      * Last change:  Mon Mar  6 18:42:59 2023 by root via cibadmin on sles1
      * 3 nodes configured
      * 5 resource instances configured
    
    Node List:
      * Online: [ sles1 sles2 sles3 ]
    
    Full List of Resources:
      * admin-ip    (ocf::heartbeat:IPaddr2):                Started sles2
      * rsc_st_azure        (stonith:fence_azure_arm):       Started sles2
      * Clone Set: ms-ag_cluster [ag_cluster] (promotable):
        * Masters: [ sles2 ]
        * Slaves: [ sles1 sles3 ]
    
  4. Kontrollera begränsningarna igen med hjälp av crm config show. Observera att en annan begränsning har lagts till på grund av den manuella övergången.

  5. Ta bort villkoret med ID cli-prefer-ag_clustermed hjälp av följande kommando:

    crm configure
    delete cli-prefer-ms-ag_cluster
    commit
    

Fäktningstest

Du kan testa STONITH genom att köra följande kommando. Prova att köra kommandot nedan från sles1 för sles3.

sudo crm node fence sles3

Nästa steg