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 (HA) 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 voor SQL Server configureren
  • Beschikbaarheidsgroepbronnen (AG) configureren in het Pacemaker-cluster
  • Een failover en de fencing-agent testen

Notitie

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

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

Als u nog geen abonnement op Azure hebt, maak dan een gratis account aan voordat u begint.

Benodigdheden

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

Een brongroep maken

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

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

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

Een beschikbaarheidsset maken

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

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

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

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

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 vanuit Canonical.

     az vm image list --all --publisher "Canonical"
    

    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 az vm create voor meer informatie over de verschillende configuraties.

De opdracht bevat ook de parameter --os-disk-size-gb om een aangepaste OS-schijfgrootte van 128 GB te creëren. Als u deze grootte later vergroot, vergroot u de juiste mapvolumes om uw installatie te ondersteunen, configureert u de LVM (Logical Volume Manager).

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

{
  "fqdns": "",
  "id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/ubuntu1",
  "location": "westus",
  "macAddress": "<Some MAC address>",
  "powerState": "VM running",
  "privateIpAddress": "<IP1>",
  "resourceGroup": "<resourceGroupName>",
  "zones": ""
}

Verbinding met de gemaakte VM's testen

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

ssh <username>@<publicIPAddress>

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

[<username>@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 map /root/.ssh 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. Je moet akkoord gaan met deze melding. 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 opdracht ssh-copy-id. Als u de doelmap op de doel-VM wilt opgeven, kunt u de parameter -i gebruiken.

In de volgende opdracht kan het <username>-account hetzelfde account zijn dat u voor elk knooppunt hebt geconfigureerd bij het 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 opdracht ssh 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 <username>-account kan opnieuw 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.

Naamresolutie configureren

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

Zie SQL Server op een Linux-host toevoegen aan een Active Directory-domeinvoor 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 bestand corosync.conf 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 in het cluster. Fencing is de isolatie van een mislukt knooppunt in een cluster. Het mislukte knooppunt start opnieuw op, zodat het kan uitvallen, resetten en weer opstarten om zich opnieuw bij het cluster aan te sluiten.

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 fencing-agent 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 de map van deze organisatie.
  4. Voor toepassingstypeselecteert u Web, voert u http://localhost in als aanmeldings-URL, en selecteert u vervolgens 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. Selecteer voor elk van de VM's in het cluster 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 fencing-agent 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-tools 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 u mssql-conf setup uit en volgt u de aanwijzingen om het SA-wachtwoord in te stellen en uw editie te kiezen. 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 dat Transact-SQL instructies op SQL Server kan uitvoeren. 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. Schakel over naar de supergebruikermodus.

    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. Optionele: voeg /opt/mssql-tools18/bin/ toe 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 de 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 SQL Server AlwaysOn-beschikbaarheidsgroep voor uw VM's te configureren. Zie Sql Server AlwaysOn-beschikbaarheidsgroepen configureren voor hoge beschikbaarheid op Linuxvoor 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. Maak verbinding met alle knooppunten met behulp van SQL Server Management Studio (SSMS) of sqlcmd. Voer de volgende opdrachten uit om een AlwaysOn_health sessie in te schakelen en een hoofdsleutel te maken:

    Belangrijk

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

    • Vervang de <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. Maak verbinding met 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 op uw primaire SQL Server-replica:

    • Vervang de <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 opdracht exit uit te voeren en terug te keren naar uw SSH-sessie.

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

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

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

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

    Notitie

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

    CREATE CERTIFICATE dbm_certificate
    FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
        FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
        DECRYPTION BY PASSWORD = '<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

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

  • Vervang ag1 door de gewenste AG-naam.
  • Vervang de waarden ubuntu1, ubuntu2en ubuntu3 door de namen van de SQL Server-exemplaren die als host fungeren voor de replica's.
CREATE AVAILABILITY
GROUP [ag1]
WITH (
        DB_FAILOVER = ON,
        CLUSTER_TYPE = EXTERNAL
        )
FOR REPLICA
    ON N'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 de volgende Transact-SQL wordt een inlog gecreëerd.

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

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

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

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

  1. Maak het bestand:

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

    pacemakerLogin
    <password>
    

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

  3. Maak het bestand alleen leesbaar voor de rootgebruiker.

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

Secundaire replica's toevoegen aan de beschikbaarheidsgroep

  1. Voer op je secundaire replica's de volgende opdrachten uit om ze aan de AG toe te voegen:

    ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    GO
    
  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. Zodra de secundaire replica's zijn gekoppeld, kunt u deze zien in SSMS Object Explorer door het knooppunt AlwaysOn High Availability uit te vouwen:

    Schermopname toont de primaire en secundaire beschikbaarheidsreplica's.

Een database toevoegen aan de beschikbaarheidsgroep

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

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

CREATE DATABASE [db1]; -- creates a database named db1
GO

ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery 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

Controleer of de database is gemaakt op de secundaire servers

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

SELECT * FROM sys.databases
WHERE name = 'db1';
GO

SELECT DB_NAME(database_id) AS 'database',
       synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
GO

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

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 als het volgende voorbeeld uit. Zie Zelfstudie: Een listener voor beschikbaarheidsgroepen configureren op virtuele Linux-machinesom 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 van crm status 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
  * 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