Dela via


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

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

  • Skapa virtuella datorer, placera dem i tillgänglighetsuppsättningen
  • 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å Ubuntu
  • Konfigurera SQL Server AlwaysOn-tillgänglighetsgrupp
  • Konfigurera tillgänglighetsgruppresurser (AG) i Pacemaker-klustret
  • Testa en redundansväxling och fäktningsagenten

Kommentar

Fördomsfri kommunikation

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

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

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

Förutsättningar

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

Skapa en resursgrupp

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

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

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

Skapa en tillgänglighetsuppsättning

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

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

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

{
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
  "location": "eastus2",
  "name": "<availabilitySetName>",
  "platformFaultDomainCount": 2,
  "platformUpdateDomainCount": 2,
  "proximityPlacementGroup": null,
  "resourceGroup": "<resourceGroupName>",
  "sku": {
    "capacity": null,
    "name": "Aligned",
    "tier": null
  },
  "statuses": null,
  "tags": {},
  "type": "Microsoft.Compute/availabilitySets",
  "virtualMachines": []
}

Skapa ett virtuellt nätverk och ett 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 virtuella Ubuntu-datorer i tillgänglighetsuppsättningen

  1. Hämta en lista över avbildningar av virtuella datorer som erbjuder Ubuntu-baserat operativsystem i Azure.

     az vm image list --all --offer "sql2022-ubuntupro2004"
    

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

    [
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "enterprise_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "enterprise_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "enterprise_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:enterprise_upro:16.0.230808",
        "version": "16.0.230808"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "sqldev_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "sqldev_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "sqldev_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:sqldev_upro:16.0.230808",
        "version": "16.0.230808"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "standard_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "standard_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "standard_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:standard_upro:16.0.230808",
        "version": "16.0.230808"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "web_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.221108",
        "version": "16.0.221108"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "web_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.230207",
        "version": "16.0.230207"
      },
      {
        "architecture": "x64",
        "offer": "sql2022-ubuntupro2004",
        "publisher": "MicrosoftSQLServer",
        "sku": "web_upro",
        "urn": "MicrosoftSQLServer:sql2022-ubuntupro2004:web_upro:16.0.230808",
        "version": "16.0.230808"
      }
    ]
    

    I den här självstudien används Ubuntu 20.04.

    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 "Canonical:0001-com-ubuntu-server-jammy:20_04-lts-gen2:latest" \
           --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 installationen och konfigurerar LVM (Logical Volume Manager).

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/ubuntu1",
  "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 hjälp av följande kommando i Azure Cloud Shell. Om du inte kan hitta dina VM-IP-adresser följer du den här snabbstarten i Azure Cloud Shell.

ssh <username>@<publicIPAddress>

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

[<username>@ubuntu1 ~]$

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

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 /root/.ssh mappen 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 ssh-copy-id kommandot . Om du vill ange målkatalogen på den virtuella måldatorn kan du använda parametern -i .

I följande kommando <username> kan 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 här alternativet rekommenderas inte i en produktionsmiljö.

sudo ssh-copy-id <username>@ubuntu1
sudo ssh-copy-id <username>@ubuntu2
sudo ssh-copy-id <username>@ubuntu3

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 ssh kommandot 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 (ubuntu1). <username> Återigen kan kontot vara samma konto som du konfigurerade för varje nod när du skapade den virtuella datorn.

ssh <username>@ubuntu2
ssh <username>@ubuntu3

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 namnmatchning

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:

  • ubuntu1: 10.0.0.85
  • ubuntu2: 10.0.0.86
  • ubuntu3: 10.0.0.87

Aktivera hög tillgänglighet

Använd ssh för att ansluta till var och en av de tre virtuella datorerna och när du är ansluten kör du följande kommandon för att aktivera hög tillgänglighet.

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

Installera och konfigurera Pacemaker-kluster

För att komma igång med att konfigurera Pacemaker-kluster måste du installera de paket och resursagenter som krävs. Kör kommandona nedan på var och en av dina virtuella datorer:

sudo apt-get install -y pacemaker pacemaker-cli-utils crmsh resource-agents fence-agents csync2 python3-azure

Fortsätt nu med att skapa autentiseringsnyckeln på den primära servern:

sudo corosync-keygen

Authkey genereras på /etc/corosync/authkey plats. Kopiera authkey till sekundära servrar på den här platsen: /etc/corosync/authkey

sudo scp /etc/corosync/authkey username@ubuntu2:~
sudo scp /etc/corosync/authkey username@ubuntu3:~

Flytta authkey från hemkatalogen till /etc/corosync.

sudo mv authkey /etc/corosync/authkey

Fortsätt att skapa klustret med hjälp av följande kommandon:

cd /etc/corosync/
sudo vi corosync.conf

Redigera Corosync-filen för att visa innehållet på följande sätt:

totem {
    version: 2
    secauth: off
    cluster_name: demo
    transport: udpu
}

nodelist {
    node {
        ring0_addr: 10.0.0.85
        name: ubuntu1
        nodeid: 1
    }
    node {
        ring0_addr: 10.0.0.86
        name: ubuntu2
        nodeid: 2
    }
    node {
        ring0_addr: 10.0.0.87
        name: ubuntu3
        nodeid: 3
    }
}

quorum {
    provider: corosync_votequorum
    two_node: 0
}

qb {
    ipc_type: native
}

logging {
    fileline: on
    to_stderr: on
    to_logfile: yes
    logfile: /var/log/corosync/corosync.log
    to_syslog: no
    debug: off
}

corosync.conf Kopiera filen till andra noder till /etc/corosync/corosync.conf:

sudo scp /etc/corosync/corosync.conf username@ubuntu2:~
sudo scp /etc/corosync/corosync.conf username@ubuntu3:~
sudo mv corosync.conf /etc/corosync/

Starta om Pacemaker och Corosync och bekräfta statusen:

sudo systemctl restart pacemaker corosync
sudo crm status

Utdata ser ut ungefär som i följande exempel:

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by hacluster via crmd on ubuntu1
  * 3 nodes configured
  * 0 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * No resources

Konfigurera fäktningsagent

Konfigurera fäktning i klustret. Fäktning är isoleringen av en misslyckad nod i ett kluster. Den startar om den misslyckade noden, låter den gå ned, återställa och komma tillbaka och ansluta till klustret igen.

Utför följande åtgärder för att konfigurera fäktning:

  1. Registrera ett nytt program i Microsoft Entra-ID och skapa en hemlighet
  2. Skapa en anpassad roll från json-filen i powershell/CLI
  3. Tilldela rollen och programmet till de virtuella datorerna i klustret
  4. Ange egenskaperna för fäktningsagenten

Registrera ett nytt program i Microsoft Entra-ID och skapa en hemlighet

  1. Gå till Microsoft Entra-ID i portalen och anteckna klientorganisations-ID:t.
  2. Välj Appregistreringar på menyn till vänster och välj sedan Ny registrering.
  3. Ange ett namn och välj sedan Endast Konton i den här organisationskatalogen.
  4. För Programtyp väljer du Webb, anger http://localhost som en inloggnings-URL och väljer sedan Registrera.
  5. Välj Certifikat och hemligheter på menyn till vänster och välj sedan Ny klienthemlighet.
  6. Ange en beskrivning och välj en förfalloperiod.
  7. Anteckna hemlighetens värde, det används som följande lösenord och hemligt ID. Det används som följande användarnamn.
  8. Välj "Översikt" och anteckna program-ID:t. Den används som följande inloggning.

Skapa en JSON-fil med namnet fence-agent-role.json och lägg till följande (lägga till ditt prenumerations-ID):

{
  "Name": "Linux Fence Agent Role-ap-server-01-fence-agent",
  "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/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
  ]
}

Skapa en anpassad roll från JSON-filen i PowerShell/CLI

az role definition create --role-definition fence-agent-role.json

Tilldela rollen och programmet till de virtuella datorerna i klustret

  1. För var och en av de virtuella datorerna i klustret väljer du Åtkomstkontroll (IAM) på sidomenyn.
  2. Välj Lägg till en rolltilldelning (använd den klassiska upplevelsen).
  3. Välj den roll som skapades tidigare.
  4. I listan Välj anger du namnet på programmet som skapades tidigare.

Nu kan vi skapa fäktningsagentresursen med hjälp av tidigare värden och ditt prenumerations-ID:

  sudo crm configure primitive fence-vm stonith:fence_azure_arm \
params \
action=reboot \
resourceGroup="resourcegroupname" \
resourceGroup="$resourceGroup" \
username="$secretId" \
login="$applicationId" \
passwd="$password" \
tenantId="$tenantId" \
subscriptionId="$subscriptionId" \
pcmk_reboot_timeout=900 \
power_timeout=60 \
op monitor \
interval=3600 \
timeout=120

Ange egenskaperna för fäktningsagenten

Kör följande kommandon för att ange egenskaperna för fäktningsagenten:

sudo crm configure property cluster-recheck-interval=2min
sudo crm configure property start-failure-is-fatal=true
sudo crm configure property stonith-timeout=900
sudo crm configure property concurrent-fencing=true
sudo crm configure property stonith-enabled=true

Och bekräfta klusterstatusen:

  sudo crm status

Utdata ser ut ungefär som i följande exempel:

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
  * 3 nodes configured
  * 1 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * fence-vm     (stonith:fence_azure_arm):                        Started ubuntu1

Installera SQL Server och mssql-tools

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

  1. Importera GPG-nycklar för den offentliga lagringsplatsen:

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  2. Registrera Ubuntu-lagringsplatsen:

    sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
    
  3. Kör följande kommandon för att installera SQL Server:

    sudo apt-get update
    sudo apt-get install -y mssql-server
    
  4. När paketinstallationen är klar kör mssql-conf setup du och följer anvisningarna för att ange SA-lösenordet och välja din utgåva. Som en påminnelse licensieras följande utgåvor fritt: Utvärdering, Utvecklare och Express.

    sudo /opt/mssql/bin/mssql-conf setup
    
  5. När konfigurationen är klar kontrollerar du att tjänsten körs:

    systemctl status mssql-server --no-pager
    
  6. Installera kommandoradsverktygen för SQL Server

Om du vill skapa en databas måste du ansluta med ett verktyg som kan köra Transact-SQL-instruktioner på SQL Server. Följande steg installerar kommandoradsverktygen för SQL Server: sqlcmd och bcp.

Använd följande steg för att installera mssql-tools18 på Ubuntu.

Kommentar

  • Ubuntu 18.04 stöds från och med SQL Server 2019 CU 3.
  • Ubuntu 20.04 stöds från och med SQL Server 2019 CU 10.
  • Ubuntu 22.04 stöds från och med SQL Server 2022 CU 10.
  1. Ange superanvändarläge.

    sudo su
    
  2. Importera GPG-nycklar för den offentliga lagringsplatsen.

    curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
    
  3. Registrera Microsoft Ubuntu-lagringsplatsen.

    • För Ubuntu 22.04 använder du följande kommando:

      curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • För Ubuntu 20.04 använder du följande kommando:

      curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Använd följande kommando för Ubuntu 18.04:

      curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • För Ubuntu 16.04 använder du följande kommando:

      curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
  4. Avsluta superanvändarläget.

    exit
    
  5. Uppdatera källlistan och kör installationskommandot med unixODBC-utvecklarpaketet.

    sudo apt-get update
    sudo apt-get install mssql-tools18 unixodbc-dev
    

    Kommentar

    Om du vill uppdatera till den senaste versionen av mssql-tools kör du följande kommandon:

    sudo apt-get update  
    sudo apt-get install mssql-tools18
    
  6. Valfritt: Lägg till PATH /opt/mssql-tools18/bin/ i miljövariabeln i ett bash-gränssnitt.

    Om du vill göra sqlcmd och bcp tillgängliga från bash-gränssnittet för inloggningssessioner ändrar du din PATH i ~/.bash_profile filen med följande kommando:

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

    Om du vill göra sqlcmd och bcp tillgängliga från bash-gränssnittet för interaktiva/icke-inloggningssessioner ändrar du PATH i ~/.bashrc filen med följande kommando:

    echo 'export PATH="$PATH:/opt/mssql-tools18/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 apt-get install mssql-server-ha

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 till alla noder med SQL Server Management Studio (SSMS) eller sqlcmd. Kör följande kommandon för att aktivera en AlwaysOn_health session och skapa en huvudnyckel:

    Viktigt!

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

    • <MasterKeyPassword> Ersätt med ditt eget lösenord.
    ALTER EVENT SESSION AlwaysOn_health ON SERVER
        WITH (STARTUP_STATE = ON);
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>';
    GO
    
  2. Anslut till den primära repliken med hjälp av 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 din primära SQL Server-replik:

    • <PrivateKeyPassword> Ersätt med ditt eget lösenord.
    CREATE CERTIFICATE dbm_certificate
        WITH SUBJECT = 'dbm';
    GO
    
    BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
            FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
            ENCRYPTION BY PASSWORD = '<PrivateKeyPassword>'
            );
    GO
    

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

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

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

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

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

    Kommentar

    Du behöver inte köra sudo -i, vilket ger dig rotmiljön. Du kan köra sudo kommandot 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 den säkerhetskopia som du skapade på den primära SQL Server-repliken. Uppdatera skriptet med starka lösenord. Dekrypteringslösenordet är samma lösenord som du använde för att skapa .pvk-filen i föregående steg. Skapa certifikatet genom att köra följande skript med sqlcmd eller SSMS på alla sekundära servrar:

    CREATE CERTIFICATE dbm_certificate
        FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
        WITH PRIVATE KEY (
        FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
        DECRYPTION BY PASSWORD = '<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 sqlcmd eller SSMS. Kör följande kommando för att skapa tillgänglighetsgruppen:

  • Ersätt ag1 med önskat ag-namn.
  • ubuntu1Ersätt värdena , ubuntu2och ubuntu3 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'ubuntu1'
WITH (
        ENDPOINT_URL = N'tcp://ubuntu1:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'ubuntu2'
WITH (
        ENDPOINT_URL = N'tcp://ubuntu2:5022',
        AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
        FAILOVER_MODE = EXTERNAL,
        SEEDING_MODE = AUTOMATIC
        ),
    N'ubuntu3'
WITH (
        ENDPOINT_URL = N'tcp://ubuntu3: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å Esc-tangenten och anger sedan kommandot :wq för att skriva filen och avsluta.

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

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

Koppla sekundära repliker till tillgänglighetsgruppen

  1. 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 :

    Screenshot shows the primary and secondary availability replicas.

Lägga till en databas i tillgänglighetsgruppen

Det här avsnittet följer artikeln om hur du lägger 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 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 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

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

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

Kör följande kommandon för att skapa resursen för tillgänglighetsgrupp i Pacemaker:

sudo crm

configure

primitive ag1_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 on-fail=demote interval=11s role="Master" \
op monitor timeout=60s interval=12s role="Slave" \
op notify timeout=60s

ms ms-ag1 ag1_cluster \
meta master-max="1" master-node-max="1" clone-max="3" \
clone-node-max="1" notify="true"

commit

Det här kommandot ovan skapar den ag1_cluster resursen, d.v.s. resursen för tillgänglighetsgruppen. Sedan skapar den ms-ag1-resursen (primär/sekundär resurs i Pacemaker och lägger sedan till ag-resursen i den. Detta säkerställer att tillgänglighetsgruppens resurs körs på alla tre noderna i klustret, men endast en av dessa noder är primär.)

Så här visar du gruppresursen för tillgänglighetsgruppen och kontrollerar status för klustret:

sudo crm resource status ms-ag1
sudo crm status

Utdata ser ut ungefär som i följande exempel:

resource ms-ag1 is running on: ubuntu1 Master
resource ms-ag1 is running on: ubuntu3
resource ms-ag1 is running on: ubuntu2

Utdata ser ut ungefär som i följande exempel. Information om hur du lägger till begränsningar för samlokalisering och befordran finns i Självstudie: Konfigurera en lyssnare för tillgänglighetsgrupper på virtuella Linux-datorer.

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
  * 3 nodes configured
  * 4 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * Clone Set: ms-ag1 [ag1_cluster] (promotable):
  * Masters: [ ubuntu1 ]
  * Slaves : [ ubuntu2 ubuntu3 ]
  * fence-vm     (stonith:fence_azure_arm):                        Started ubuntu1

Kör följande kommando för att skapa en gruppresurs, så att begränsningarna för samlokalisering och befordran som tillämpas på lyssnaren och lastbalanseraren inte behöver tillämpas individuellt.

sudo crm configure group virtualip-group azure-load-balancer virtualip

Utdata crm status för ser ut ungefär som i följande exempel:

Cluster Summary:
  * Stack: corosync
  * Current DC: ubuntu1 (version 2.0.3-4b1f869f0f) - partition with quorum
  * Last updated: Wed Nov 29 07:01:32 2023
  * Last change:  Sun Nov 26 17:00:26 2023 by root via cibadmin on ubuntu1
  * 3 nodes configured
  * 6 resource instances configured

Node List:
  * Online: [ ubuntu1 ubuntu2 ubuntu3 ]

Full List of Resources:
  * Clone Set: ms-ag1 [ag1_cluster] (promotable):
    * Masters: [ ubuntu1 ]
    * Slaves : [ ubuntu2 ubuntu3 ]
  * Resource Group:  virtual ip-group:
    * azure-load-balancer  (ocf  :: heartbeat:azure-lb):           Started ubuntu1     
    * virtualip     (ocf :: heartbeat: IPaddr2):                   Started ubuntu1
  * fence-vm     (stonith:fence_azure_arm):                        Started ubuntu1

Gå vidare