Delen via


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

In deze zelfstudie leert u het volgende:

  • Virtuele machines maken, deze in een beschikbaarheidsset plaatsen
  • Hoge beschikbaarheid inschakelen
  • Een Pacemaker-cluster maken
  • Een fencing-agent configureren door een STONITH-apparaat te maken
  • SQL Server en mssql-tools installeren in Ubuntu
  • AlwaysOn-beschikbaarheidsgroep in SQL Server configureren
  • Resources van de beschikbaarheidsgroep configureren in het Pacemaker-cluster
  • Een failover en de fencing-agent testen

Notitie

Oordeelloze communicatie

Dit artikel bevat verwijzingen naar de term slaaf, een term die Microsoft aanstootgevend acht wanneer deze in deze context wordt gebruikt. De term wordt weergegeven in dit artikel omdat deze momenteel in de software wordt weergegeven. Wanneer de term uit de software wordt verwijderd, wordt deze uit het artikel verwijderd.

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

Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

Vereisten

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

Een brongroep maken

Als u meerdere abonnementen hebt, stelt u het abonnement in waarvoor u deze resources wilt implementeren.

Gebruik de volgende opdracht om een resourcegroep <resourceGroupName> in een regio te maken. Vervang <resourceGroupName> door een naam van uw keuze. In deze zelfstudie wordt East US 2 gebruikt. Zie de volgende quickstart voor meer informatie.

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

Een beschikbaarheidsset maken

In de volgende stap gaat u een beschikbaarheidsset maken. Voer de volgende opdracht uit in Azure Cloud Shell en vervang <resourceGroupName> door de naam van de 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

Wanneer de opdracht is voltooid, zou u de volgende resultaten moeten hebben:

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

Een virtueel netwerk en een subnet maken

  1. Maak een benoemd subnet met een vooraf toegewezen IP-adresbereik. Vervang deze waarden in de volgende opdracht:

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

    Met de vorige opdracht maakt u een VNet en een subnet met een aangepast IP-bereik.

Ubuntu-VM's maken in de beschikbaarheidsset

  1. Haal een lijst op met installatiekopieën van virtuele machines die ubuntu-besturingssysteem in Azure bieden.

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

    U ziet de volgende resultaten wanneer u zoekt naar de BYOS-installatiekopieën:

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

    In deze zelfstudie wordt Ubuntu 20.04 gebruikt.

    Belangrijk

    Computernamen moeten minder dan 15 tekens lang zijn om een beschikbaarheidsgroep in te stellen. Gebruikersnamen mogen geen hoofdletters bevatten en wachtwoorden moeten tussen de 12 en 72 tekens bevatten.

  2. Maak drie VM's in de beschikbaarheidsset. Vervang deze waarden in de volgende opdracht:

    • <resourceGroupName>
    • <VM-basename>
    • <availabilitySetName>
    • <VM-Size> - Een voorbeeld is '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
    

Met de vorige opdracht worden de VM's gemaakt met behulp van het eerder gedefinieerde VNet. Zie het artikel over az vm create voor meer informatie over de verschillende configuraties.

De opdracht bevat ook de parameter voor het --os-disk-size-gb maken van een aangepaste grootte van het besturingssysteemstation van 128 GB. Als u deze grootte later vergroot, vouwt u de juiste mapvolumes uit om tegemoet te komen aan uw installatie, configureert u de LVM (Logical Volume Manager).

Wanneer de opdracht voor elke virtuele machine is voltooid, moet u ongeveer de volgende resultaten verkrijgen:

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

Verbinding met de gemaakte VM's testen

Verbinding maken naar elk van de VM's met behulp van de volgende opdracht in Azure Cloud Shell. Als u uw VM-IP-adressen niet kunt vinden, volgt u deze quickstart in Azure Cloud Shell.

ssh <username>@<publicIPAddress>

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

[<username>@ubuntu1 ~]$

Typ exit om de SSH-sessie te verlaten.

SSH-toegang zonder wachtwoord tussen knooppunten configureren

Met SSH-toegang zonder wachtwoord kunnen uw VM's met elkaar communiceren met behulp van openbare SSH-sleutels. U moet SSH-sleutels op elk knooppunt configureren en deze sleutels naar elk knooppunt kopiëren.

Nieuwe SSH-sleutels genereren

De vereiste SSH-sleutelgrootte is 4096 bits. Ga op elke VIRTUELE machine naar de /root/.ssh map en voer de volgende opdracht uit:

ssh-keygen -t rsa -b 4096

Tijdens deze stap wordt u mogelijk gevraagd een bestaand SSH-bestand te overschrijven. U moet akkoord gaan met deze prompt. U hoeft geen wachtwoordzin in te voeren.

De openbare SSH-sleutels kopiëren

Op elke virtuele machine moet u de openbare sleutel kopiëren van het knooppunt dat u zojuist hebt gemaakt, met behulp van de ssh-copy-id opdracht. Als u de doelmap op de doel-VM wilt opgeven, kunt u de -i parameter gebruiken.

In de volgende opdracht kan het account hetzelfde account zijn dat u voor elk knooppunt hebt geconfigureerd bij het <username> maken van de virtuele machine. U kunt ook het root account gebruiken, maar deze optie wordt niet aanbevolen in een productieomgeving.

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

Toegang zonder wachtwoord controleren vanaf elk knooppunt

Gebruik de ssh opdracht van elk knooppunt om te bevestigen dat de openbare SSH-sleutel naar elk knooppunt is gekopieerd. Als u de sleutels correct hebt gekopieerd, wordt u niet om een wachtwoord gevraagd en is de verbinding geslaagd.

In dit voorbeeld maken we verbinding met de tweede en derde knooppunten vanaf de eerste VM (ubuntu1). Het account kan opnieuw <username> hetzelfde account zijn dat u voor elk knooppunt hebt geconfigureerd bij het maken van de virtuele machine.

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

Herhaal dit proces van alle drie de knooppunten, zodat elk knooppunt met de andere kan communiceren zonder wachtwoorden.

Naamomzetting configureren

U kunt naamomzetting configureren met behulp van DNS of door het etc/hosts bestand handmatig op elk knooppunt te bewerken.

Zie Sql Server toevoegen op een Linux-host aan een Active Directory-domein voor meer informatie over DNS en Active Directory.

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 uw VIRTUELE machine blootgesteld aan externe netwerken.

De VM's en hun IP-adres die in dit voorbeeld worden gebruikt, worden als volgt weergegeven:

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

Hoge beschikbaarheid inschakelen

Gebruik ssh om verbinding te maken met elk van de 3 VM's en voer de volgende opdrachten uit om hoge beschikbaarheid in te schakelen.

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

Pacemaker-cluster installeren en configureren

Om aan de slag te gaan met het configureren van Pacemaker-cluster, moet u de vereiste pakketten en resourceagents installeren. Voer de onderstaande opdrachten uit op elk van uw VM's:

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

Ga nu verder met het maken van een verificatiesleutel op de primaire server:

sudo corosync-keygen

De verificatiesleutel wordt gegenereerd op /etc/corosync/authkey locatie. Kopieer de verificatiesleutel naar secundaire servers op deze locatie: /etc/corosync/authkey

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

Verplaats de verificatiesleutel van de basismap naar /etc/corosync.

sudo mv authkey /etc/corosync/authkey

Ga verder met het maken van het cluster met behulp van de volgende opdrachten:

cd /etc/corosync/
sudo vi corosync.conf

Bewerk het Corosync-bestand om de inhoud als volgt weer te geven:

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
}

Kopieer het corosync.conf bestand naar andere knooppunten naar /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/

Start Pacemaker en Corosync opnieuw en bevestig de status:

sudo systemctl restart pacemaker corosync
sudo crm status

De uitvoer ziet er ongeveer als volgt uit:

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

Fencing-agent configureren

Configureer fencing op het cluster. Fencing is de isolatie van een mislukt knooppunt in een cluster. Het mislukte knooppunt wordt opnieuw opgestart, waardoor het kan worden uitgeschakeld, opnieuw wordt ingesteld en opnieuw wordt opgestart, waarna het cluster opnieuw wordt gebruikt.

Voer de volgende acties uit om fencing te configureren:

  1. Een nieuwe toepassing registreren in Microsoft Entra-id en een geheim maken
  2. Een aangepaste rol maken op basis van een JSON-bestand in PowerShell/CLI
  3. De rol en toepassing toewijzen aan de VM's in het cluster
  4. De eigenschappen van de fencingagent instellen

Een nieuwe toepassing registreren in Microsoft Entra-id en een geheim maken

  1. Ga naar Microsoft Entra-id in de portal en noteer de tenant-id.
  2. Selecteer App-registraties in het menu aan de linkerkant en selecteer vervolgens Nieuwe registratie.
  3. Voer een naam in en selecteer vervolgens alleen Accounts in deze organisatiemap.
  4. Voor toepassingstype selecteert u Web, voert http://localhost u een aanmeldings-URL in en selecteert u Registreren.
  5. Selecteer Certificaten en geheimen in het menu aan de linkerkant en selecteer vervolgens Nieuw clientgeheim.
  6. Voer een beschrijving in en selecteer een verloopperiode.
  7. Noteer de waarde van het geheim, deze wordt gebruikt als het volgende wachtwoord en de geheime id. Deze wordt gebruikt als de volgende gebruikersnaam.
  8. Selecteer Overzicht en noteer de toepassings-id. Deze wordt gebruikt als de volgende aanmelding.

Maak een JSON-bestand met de naam fence-agent-role.json en voeg het volgende toe (uw abonnements-id toevoegen):

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

Een aangepaste rol maken op basis van een JSON-bestand in PowerShell/CLI

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

De rol en toepassing toewijzen aan de VM's in het cluster

  1. Voor elk van de VM's in het cluster selecteert u Toegangsbeheer (IAM) in het zijmenu.
  2. Selecteer Een roltoewijzing toevoegen (gebruik de klassieke ervaring).
  3. Selecteer de rol die u eerder hebt gemaakt.
  4. Voer in de lijst Selecteren de naam in van de toepassing die u eerder hebt gemaakt.

Nu kunnen we de fencing-agentresource maken met behulp van eerdere waarden en uw abonnements-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

De eigenschappen van de fencingagent instellen

Voer de volgende opdrachten uit om de eigenschappen van de fencing-agent in te stellen:

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

En bevestig de clusterstatus:

  sudo crm status

De uitvoer ziet er ongeveer als volgt uit:

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

SQL Server en MSSQL-hulpprogramma's installeren

De volgende opdrachten worden gebruikt om SQL Server te installeren:

  1. Importeer de GPG-sleutels voor de openbare opslagplaats:

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

    sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2022.list)"
    
  3. Voer de volgende opdrachten uit om SQL Server te installeren:

    sudo apt-get update
    sudo apt-get install -y mssql-server
    
  4. Nadat de installatie van het pakket is voltooid, voert mssql-conf setup u de aanwijzingen uit om het SA-wachtwoord in te stellen en kiest u uw editie. Ter herinnering: de volgende edities zijn vrij gelicentieerd: Evaluatie, Ontwikkelaar en Express.

    sudo /opt/mssql/bin/mssql-conf setup
    
  5. Zodra de configuratie is voltooid, controleert u of de service wordt uitgevoerd:

    systemctl status mssql-server --no-pager
    
  6. De opdrachtregelprogramma's van SQL Server installeren

Als u een database wilt maken, moet u verbinding maken met een hulpprogramma waarmee Transact-SQL-instructies op SQL Server kunnen worden uitgevoerd. Met de volgende stappen installeert u de opdrachtregelprogramma's van SQL Server: sqlcmd en bcp.

Gebruik de volgende stappen om de mssql-tools18 op Ubuntu te installeren.

Notitie

  • Ubuntu 18.04 wordt ondersteund vanaf SQL Server 2019 CU 3.
  • Ubuntu 20.04 wordt ondersteund vanaf SQL Server 2019 CU 10.
  • Ubuntu 22.04 wordt ondersteund vanaf SQL Server 2022 CU 10.
  1. Voer de superusermodus in.

    sudo su
    
  2. Importeer de GPG-sleutels voor de openbare opslagplaats.

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

    • Gebruik voor Ubuntu 22.04 de volgende opdracht:

      curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Gebruik voor Ubuntu 20.04 de volgende opdracht:

      curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Gebruik voor Ubuntu 18.04 de volgende opdracht:

      curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
    • Gebruik voor Ubuntu 16.04 de volgende opdracht:

      curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
      
  4. Superusermodus afsluiten.

    exit
    
  5. Werk de lijst met bronnen bij en voer de installatieopdracht uit met het unixODBC-ontwikkelaarspakket.

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

    Notitie

    Voer de volgende opdrachten uit om bij te werken naar de nieuwste versie van mssql-tools:

    sudo apt-get update  
    sudo apt-get install mssql-tools18
    
  6. Optioneel: Toevoegen /opt/mssql-tools18/bin/ aan uw PATH omgevingsvariabele in een bash-shell.

    Als u sqlcmd en bcp toegankelijk wilt maken vanuit de bash-shell voor aanmeldingssessies, wijzigt u uw PATH in het ~/.bash_profile bestand met de volgende opdracht:

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

    Als u sqlcmd en bcp toegankelijk wilt maken vanuit de bash-shell voor interactieve/niet-aanmeldingssessies, wijzigt u het PATH in het ~/.bashrc bestand met de volgende opdracht:

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

SQL Server-agent voor hoge beschikbaarheid installeren

Voer de volgende opdracht uit op alle knooppunten om het agentpakket voor hoge beschikbaarheid voor SQL Server te installeren:

sudo apt-get install mssql-server-ha

Een beschikbaarheidsgroep configureren

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

Beschikbaarheidsgroepen inschakelen en SQL Server opnieuw starten

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

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

Een certificaat maken

Microsoft biedt geen ondersteuning voor Active Directory-verificatie voor het AG-eindpunt. Daarom moet u een certificaat gebruiken voor AG-eindpuntversleuteling.

  1. Verbinding maken naar 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 voor elke VM binnenkomende verbindingen met poort 1433 in uw NSG toestaan. Zie Een beveiligingsregel maken voor informatie over het maken van een beveiligingsregel voor binnenkomend verkeer voor meer informatie.

    • Vervang het <MasterKeyPassword> door uw eigen wachtwoord.
    ALTER EVENT SESSION AlwaysOn_health ON SERVER
        WITH (STARTUP_STATE = ON);
    GO
    
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>';
    GO
    
  2. Verbinding maken naar de primaire replica met behulp van SSMS of sqlcmd. Met de onderstaande 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 het <PrivateKeyPassword> 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 = '<PrivateKeyPassword>'
            );
    GO
    

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

Het certificaat kopiëren naar de secundaire replica's en de certificaten maken op de server

  1. Kopieer de twee bestanden die op dezelfde locatie zijn gemaakt naar alle servers die de beschikbaarheidsreplica's zullen hosten.

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

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

    Notitie

    U hoeft sudo -i, voor het retourneren van de hoofdomgeving, niet uit te voeren. U kunt de sudo opdracht vóór elke opdracht uitvoeren.

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

    • Vervang <username> door uw gebruikersnaam.
    • Met de opdracht mv verplaatst u de bestanden of map van de ene locatie naar een andere.
    • De opdracht chown wordt gebruikt om de eigenaar en groep met 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 maakt u een certificaat vanuit de back-up die u op de primaire SQL Server-replica hebt gemaakt. Werk het script bij met sterke wachtwoorden. Het wachtwoord voor ontsleuteling is hetzelfde als het wachtwoord dat u hebt gebruikt voor het maken van het PVK-bestand in de vorige stap. 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 = '<PrivateKeyPassword>'
    );
    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

Verbinding maken naar 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 AG-naam.
  • Vervang de waarden van ubuntu1, ubuntu2 en ubuntu3 door de namen van de SQL Server-exemplaren die de replica's hosten.
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

Een SQL Server-aanmelding maken voor Pacemaker

Maak op alle SQL Server-exemplaren een SQL Server-aanmelding voor Pacemaker. Met het volgende Transact-SQL-script maakt u een aanmelding.

  • 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 referenties op die voor de SQL Server aanmelding worden gebruikt.

  1. Zo maakt u het bestand:

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

    pacemakerLogin
    <password>
    

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

  3. Zo maakt u het bestand alleen leesbaar voor de hoofdmap:

    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. Voer op de secundaire replica's de volgende opdrachten uit om ze toe te voegen aan de beschikbaarheidsgroep:

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  2. 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
    
  3. Wanneer de secundaire replica's zijn toegevoegd, kunt u ze bekijken in de Objectverkenner van SQL Server Management Studio door het knooppunt AlwaysOn hoge beschikbaarheid uit te vouwen:

    Screenshot shows the primary and secondary availability replicas.

Een database toevoegen aan de beschikbaarheidsgroep

Deze sectie volgt het artikel voor het toevoegen van een database aan een beschikbaarheidsgroep.

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

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

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

Als de synchronization_state_desc GESYNCHRONISEERD vermeldt voor db1, betekent dit dat de replica's zijn gesynchroniseerd. De secundaire replica's bevatten db1 in de primaire replica.

Resources voor beschikbaarheidsgroepen maken in Pacemaker-cluster

Voer de volgende opdrachten uit om de resource voor de beschikbaarheidsgroep in Pacemaker te maken:

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

Met deze bovenstaande opdracht maakt u de ag1_cluster resource, dat wil gezegd de resource van de beschikbaarheidsgroep. Vervolgens wordt er ms-ag1-resource gemaakt (primaire/secundaire resource in Pacemaker en vervolgens de AG-resource eraan toegevoegd. Dit zorgt ervoor dat de AG-resource wordt uitgevoerd op alle drie de knooppunten in het cluster, maar slechts één van deze knooppunten primair is.)

De resource van de AG-groep weergeven en de status van het cluster controleren:

sudo crm resource status ms-ag1
sudo crm status

De uitvoer ziet er ongeveer als volgt uit:

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

De uitvoer ziet er ongeveer uit als in het volgende voorbeeld. Zie Zelfstudie: Een listener voor beschikbaarheidsgroepen configureren op virtuele Linux-machines om colocatie- en promotiebeperkingen toe te voegen.

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

Voer de volgende opdracht uit om een groepsresource te maken, zodat de beperkingen voor colocatie en promotie die zijn toegepast op de listener en load balancer niet afzonderlijk hoeven te worden toegepast.

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

De uitvoer ziet crm status er ongeveer als volgt uit:

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

Volgende stap