Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server op Azure VM-
Opmerking
In deze zelfstudie gebruiken we SQL Server 2017 (14.x) met RHEL 7.6, maar het is mogelijk om SQL Server 2019 (15.x) te gebruiken in RHEL 7 of RHEL 8 om hoge beschikbaarheid te configureren. De opdrachten voor het configureren van de resources van het Pacemaker-cluster en de beschikbaarheidsgroep zijn gewijzigd in RHEL 8, en raden we aan het artikel Beschikbaarheidsgroep resource aanmaken en RHEL 8-resources te raadplegen voor meer informatie over de juiste opdrachten.
In deze handleiding leer je hoe je:
- Een nieuwe resourcegroep, beschikbaarheidsset en virtuele Linux-machines (VM's) maken
- Hoge beschikbaarheid (HA) inschakelen
- Een Pacemaker-cluster maken
- Een fencing-agent configureren door een STONITH-apparaat te maken
- SQL Server en mssql-tools installeren op RHEL
- AlwaysOn-beschikbaarheidsgroep voor SQL Server configureren
- Beschikbaarheidsgroepbronnen (AG) configureren in het Pacemaker-cluster
- Een failover en de fencing-agent testen
In deze zelfstudie wordt de Azure CLI gebruikt om resources te implementeren in Azure.
Als je geen Azure-abonnement hebt, maak dan een gratis account aan voordat je begint.
Vereiste voorwaarden
Gebruik de Bash-omgeving in Azure Cloud Shell. Zie Aan de slag met Azure Cloud Shell voor meer informatie.
Als je de voorkeur geeft aan het lokaal uitvoeren van CLI-referentiecommando's, installeer dan de Azure CLI. Als je op Windows of macOS werkt, overweeg dan om Azure CLI in een Docker-container te draaien. Voor meer informatie, zie Hoe u de Azure CLI in een Docker-container kunt uitvoeren.
Als u een lokale installatie gebruikt, meldt u zich aan bij Azure CLI met de opdracht az login. Om het authenticatieproces te voltooien, volgt u de stappen die op uw terminal worden weergegeven. Zie Verifiëren bij Azure met behulp van Azure CLI voor andere aanmeldingsopties.
Wanneer u daarom wordt gevraagd, installeer de Azure CLI-extensie bij het eerste gebruik. Zie Extensies gebruiken en beheren met de Azure CLIvoor meer informatie over extensies.
Voer az version uit om de geïnstalleerde versie en de afhankelijke bibliotheken te vinden. Voer az upgrade uit om naar de nieuwste versie te upgraden.
- Voor dit artikel is versie 2.0.30 of hoger van de Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie al geïnstalleerd.
Een brongroep maken
Als u meer dan één abonnement hebt, het abonnement instellen waarop u deze resources wilt implementeren.
Gebruik de volgende opdracht om een resourcegroep te maken <resourceGroupName> in een regio. Vervang <resourceGroupName> door een naam van uw keuze. We gebruiken East US 2 in deze zelfstudie. Zie de volgende Quickstartvoor meer informatie.
az group create --name <resourceGroupName> --location eastus2
Een beschikbaarheidsset maken
De volgende stap bestaat uit het maken van een beschikbaarheidsset. Voer de volgende opdracht uit in Azure Cloud Shell en vervang <resourceGroupName> door de naam van uw resourcegroep. Kies een naam voor <availabilitySetName>.
az vm availability-set create \
--resource-group <resourceGroupName> \
--name <availabilitySetName> \
--platform-fault-domain-count 2 \
--platform-update-domain-count 2
Als de opdracht is voltooid, krijgt u de volgende resultaten:
{
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
"location": "eastus2",
"name": "<availabilitySetName>",
"platformFaultDomainCount": 2,
"platformUpdateDomainCount": 2,
"proximityPlacementGroup": null,
"resourceGroup": "<resourceGroupName>",
"sku": {
"capacity": null,
"name": "Aligned",
"tier": null
},
"statuses": null,
"tags": {},
"type": "Microsoft.Compute/availabilitySets",
"virtualMachines": []
}
RHEL-VM's maken in de beschikbaarheidsset
Waarschuwing
Als u een RHEL-installatiekopie volgens het betalen-per-gebruik-principe kiest en hoge beschikbaarheid (HA) configureert, moet u mogelijk uw abonnement registreren. Dit kan ertoe leiden dat u twee keer betaalt voor het abonnement, omdat er kosten in rekening worden gebracht voor het Microsoft Azure RHEL-abonnement voor de virtuele machine en een abonnement op Red Hat. Zie Het abonnement beheren van de virtuele machine die is gestart vanuit Azure Marketplace voor meer informatie. Gebruik een RHEL HA-image bij het maken van de Azure VM om te voorkomen dat er dubbel gefactureerd wordt. Afbeeldingen die worden aangeboden als RHEL-HA zijn ook betalen-per-gebruik afbeeldingen, met vooraf ingeschakelde HA-repository.
Een lijst met afbeeldingen van virtuele machines verzamelen die RHEL met HA bieden:
az vm image list --all --offer "RHEL-HA"De volgende resultaten worden weergegeven.
[ { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "7.4", "urn": "RedHat:RHEL-HA:7.4:7.4.2019062021", "version": "7.4.2019062021" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "7.5", "urn": "RedHat:RHEL-HA:7.5:7.5.2019062021", "version": "7.5.2019062021" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "7.6", "urn": "RedHat:RHEL-HA:7.6:7.6.2019062019", "version": "7.6.2019062019" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "8.0", "urn": "RedHat:RHEL-HA:8.0:8.0.2020021914", "version": "8.0.2020021914" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "8.1", "urn": "RedHat:RHEL-HA:8.1:8.1.2020021914", "version": "8.1.2020021914" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "80-gen2", "urn": "RedHat:RHEL-HA:80-gen2:8.0.2020021915", "version": "8.0.2020021915" }, { "offer": "RHEL-HA", "publisher": "RedHat", "sku": "81_gen2", "urn": "RedHat:RHEL-HA:81_gen2:8.1.2020021915", "version": "8.1.2020021915" } ]Voor deze zelfstudie kiezen we de afbeelding
RedHat:RHEL-HA:7.6:7.6.2019062019voor het RHEL 7-voorbeeld en kiezen weRedHat:RHEL-HA:8.1:8.1.2020021914voor het RHEL 8-voorbeeld.Belangrijk
Computernamen moeten uit minder dan 15 tekens bestaan om een beschikbaarheidsgroep in te stellen. De gebruikersnaam mag geen hoofdletters bevatten en wachtwoorden moeten meer dan 12 tekens bevatten.
We willen drie VM's maken in de beschikbaarheidsset. Vervang deze waarden in de volgende opdracht:
<resourceGroupName><VM-basename><availabilitySetName>-
<VM-Size>- Een voorbeeld is 'Standard_D16_v3' <username><password>
for i in `seq 1 3`; do az vm create \ --resource-group <resourceGroupName> \ --name <VM-basename>$i \ --availability-set <availabilitySetName> \ --size "<VM-Size>" \ --image "RedHat:RHEL-HA:7.6:7.6.2019062019" \ --admin-username "<username>" \ --admin-password "<password>" \ --authentication-type all \ --generate-ssh-keys done
Met de bovenstaande opdracht worden de VM's gemaakt en wordt er een standaard virtueel netwerk voor deze VM's gemaakt. Zie het artikel az vm create voor meer informatie over de verschillende configuraties.
Als de opdracht voor elke VIRTUELE machine is voltooid, krijgt u resultaten die er ongeveer als volgt uitzien:
{
"fqdns": "",
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/<VM1>",
"location": "eastus2",
"macAddress": "<Some MAC address>",
"powerState": "VM running",
"privateIpAddress": "<IP1>",
"publicIpAddress": "",
"resourceGroup": "<resourceGroupName>",
"zones": ""
}
Belangrijk
De standaard-image die met de bovenstaande opdracht wordt gemaakt, bevat standaard een 32GB OS-schijf. U kunt mogelijk geen ruimte meer hebben met deze standaardinstallatie. U kunt de volgende parameter gebruiken die is toegevoegd aan de bovenstaande az vm create opdracht om een besturingssysteemschijf te maken met 128 GB als voorbeeld: --os-disk-size-gb 128.
U kunt vervolgens LVM (Logical Volume Manager) configureren als u de juiste mapvolumes moet uitvouwen om ruimte te bieden aan uw installatie.
Verbinding met de gemaakte VM's testen
Maak verbinding met VM1 of de andere VM's met behulp van de volgende opdracht in Azure Cloud Shell. Als u uw VM-IP-adressen niet kunt vinden, volg dan deze snelstartgids in Azure Cloud Shell.
ssh <username>@publicipaddress
Als de verbinding is geslaagd, ziet u de volgende uitvoer die de Linux-terminal vertegenwoordigt:
[<username>@<VM1> ~]$
Typ exit om de SSH-sessie te verlaten.
Hoge beschikbaarheid inschakelen
Belangrijk
Als u dit gedeelte van de zelfstudie wilt voltooien, moet u een abonnement hebben voor RHEL en de invoegtoepassing voor hoge beschikbaarheid. Als u een afbeelding gebruikt die wordt aanbevolen in de vorige sectie, hoeft u geen ander abonnement te registreren.
Maak verbinding met elk VM-knooppunt en volg deze handleiding om hoge beschikbaarheid in te schakelen. Zie Voor meer informatie het inschakelen van een abonnement op hoge beschikbaarheid voor RHEL.
Aanbeveling
Het is eenvoudiger als u een SSH-sessie tegelijk opent naar elk van de VIRTUELE machines als dezelfde opdrachten moeten worden uitgevoerd op elke VIRTUELE machine in het hele artikel.
Als u meerdere sudo opdrachten kopieert en plakt en om een wachtwoord wordt gevraagd, worden de extra opdrachten niet uitgevoerd. Voer elke opdracht afzonderlijk uit.
Voer de volgende opdrachten uit op elke VIRTUELE machine om de Pacemaker-firewallpoorten te openen:
sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reloadWerk Pacemaker-pakketten op alle knooppunten bij en installeer deze met behulp van de volgende opdrachten:
Opmerking
nmap wordt geïnstalleerd als onderdeel van dit opdrachtblok als hulpprogramma om beschikbare IP-adressen in uw netwerk te vinden. U hoeft nmap niet te installeren, maar dit is later in deze zelfstudie handig.
sudo yum update -y sudo yum install -y pacemaker pcs fence-agents-all resource-agents fence-agents-azure-arm nmap sudo rebootStel het wachtwoord in voor de standaardgebruiker die wordt gemaakt bij het installeren van Pacemaker-pakketten. Gebruik hetzelfde wachtwoord op alle knooppunten.
sudo passwd haclusterGebruik de onderstaande opdracht om het hostbestand te openen en hostname-resolutie in te stellen. Zie AG configureren voor meer informatie over het configureren van het hosts-bestand.
sudo vi /etc/hostsVoer in de vi-editor tekst
iin en voeg op een lege regel het privé-IP-adres van de bijbehorende VIRTUELE machine toe. Voeg vervolgens de naam van de VIRTUELE machine toe na een spatie naast het IP-adres. Elke regel moet een afzonderlijke vermelding hebben.<IP1> <VM1> <IP2> <VM2> <IP3> <VM3>Belangrijk
U wordt aangeraden uw privé-IP-adres in het vorige voorbeeld te gebruiken. Als u het openbare IP-adres in deze configuratie gebruikt, mislukt de installatie en wordt het afgeraden uw VIRTUELE machine beschikbaar te maken voor externe netwerken.
Als u de vi editor wilt afsluiten, drukt u eerst op de toets Esc en voert u de opdracht in
:wqom het bestand te schrijven en af te sluiten.
Het Pacemaker-cluster maken
In deze sectie schakelt u de pcsd-service in en start u deze en configureert u het cluster. Voor SQL Server in Linux worden de clusterbronnen niet automatisch gemaakt. U moet de Pacemaker-resources handmatig inschakelen en maken. Voor meer informatie, zie het artikel over het configureren van een exemplaar van een failovercluster voor RHEL.
Pcsd-service en Pacemaker inschakelen en starten
Voer de opdrachten uit op alle knooppunten. Met deze opdrachten kunnen de knooppunten opnieuw deelnemen aan het cluster nadat elk knooppunt opnieuw is opgestart.
sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemakerVerwijder alle bestaande clusterconfiguraties van alle knooppunten. Voer de volgende opdracht uit:
sudo pcs cluster destroy sudo systemctl enable pacemakerVoer op het primaire knooppunt de volgende opdrachten uit om het cluster in te stellen.
- Wanneer u de
pcs cluster authopdracht uitvoert om de clusterknooppunten te verifiëren, wordt u om een wachtwoord gevraagd. Voer het wachtwoord in voor de haclustergebruiker die u eerder hebt gemaakt.
RHEL7
sudo pcs cluster auth <VM1> <VM2> <VM3> -u hacluster sudo pcs cluster setup --name az-hacluster <VM1> <VM2> <VM3> --token 30000 sudo pcs cluster start --all sudo pcs cluster enable --allRHEL8
Voor RHEL 8 moet u de knooppunten afzonderlijk verifiëren. Voer handmatig de gebruikersnaam en het wachtwoord voor hacluster in wanneer hierom wordt gevraagd.
sudo pcs host auth <node1> <node2> <node3> sudo pcs cluster setup <clusterName> <node1> <node2> <node3> sudo pcs cluster start --all sudo pcs cluster enable --all- Wanneer u de
Voer de volgende opdracht uit om te controleren of alle knooppunten online zijn.
sudo pcs statusRHEL 7
Als alle knooppunten online zijn, ziet u uitvoer die lijkt op het volgende voorbeeld:
Cluster name: az-hacluster WARNINGS: No stonith devices and stonith-enabled is not false Stack: corosync Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum Last updated: Fri Aug 23 18:27:57 2019 Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2> 3 nodes configured 0 resources configured Online: [ <VM1> <VM2> <VM3> ] No resources Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabledRHEL 8
Cluster name: az-hacluster WARNINGS: No stonith devices and stonith-enabled is not false Cluster Summary: * Stack: corosync * Current DC: <VM2> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum * Last updated: Fri Aug 23 18:27:57 2019 * Last change: Fri Aug 23 18:27:56 2019 by hacluster via crmd on <VM2> * 3 nodes configured * 0 resource instances configured Node List: * Online: [ <VM1> <VM2> <VM3> ] Full List of Resources: * No resources Daemon Status: * corosync: active/enabled * pacemaker: active/enabled * pcsd: active/enabledStel verwachte stemmen in het livecluster in op 3. Deze opdracht is alleen van invloed op het livecluster en wijzigt de configuratiebestanden niet.
Stel op alle knooppunten de verwachte stemmen in met de volgende opdracht:
sudo pcs quorum expected-votes 3
De agent voor fencing configureren
Als u een fencing-agent wilt configureren, worden de volgende instructies voor deze handleiding gewijzigd. Zie Een STONITH-apparaat maken voor meer informatie.
Controleer de versie van de Azure Fence-agent om ervoor te zorgen dat deze wordt bijgewerkt. Gebruik de volgende opdracht:
sudo yum info fence-agents-azure-arm
U zou een vergelijkbare uitvoer moeten zien als in het onderstaande voorbeeld.
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
Name : fence-agents-azure-arm
Arch : x86_64
Version : 4.2.1
Release : 11.el7_6.8
Size : 28 k
Repo : installed
From repo : rhel-ha-for-rhel-7-server-eus-rhui-rpms
Summary : Fence agent for Azure Resource Manager
URL : https://github.com/ClusterLabs/fence-agents
License : GPLv2+ and LGPLv2+
Description : The fence-agents-azure-arm package contains a fence agent for Azure instances.
Een nieuwe toepassing registreren in Microsoft Entra-id
Voer de volgende stappen uit om een nieuwe toepassing te registreren in Microsoft Entra ID (voorheen Azure Active Directory):
- Ga naar https://portal.azure.com.
- Open het deelvenster Eigenschappen van Microsoft Entra-id en noteer het
Tenant ID. - Selecteer App-registraties.
- Selecteer Nieuwe registratie.
- Voer een naam in, zoals
<resourceGroupName>-app. Voor ondersteunde accounttypen selecteert u alleen Accounts in deze organisatiemap (alleen Microsoft - Één tenant). - Selecteer Web voor omleidings-URI en voer een URL in (bijvoorbeeld
http://localhost) en selecteer Toevoegen. De aanmeldings-URL kan elke geldige URL zijn. Als u klaar bent, selecteert u Registreren. - Kies Certificaten en geheimen voor uw nieuwe app-registratie en selecteer vervolgens Nieuw clientgeheim.
- Voer een beschrijving in voor een nieuwe sleutel (clientgeheim) en selecteer Vervolgens Toevoegen.
- Noteer de waarde van het geheim. Het wordt gebruikt als het wachtwoord voor de service-principal.
- Selecteer Overzicht. Noteer de toepassings-id. Deze wordt gebruikt als de gebruikersnaam (aanmeldings-id in de volgende stappen) van de service-principal.
Een aangepaste rol maken voor de fence agent
Volg de zelfstudie voor het maken van een aangepaste Azure-rol met behulp van Azure CLI.
Uw JSON-bestand moet er ongeveer uitzien als in het volgende voorbeeld:
- Vervang door
<username>een naam van uw keuze. Dit is om duplicatie te voorkomen bij het maken van deze roldefinitie. - Vervang
<subscriptionId>door uw Azure-abonnements-id.
{
"Name": "Linux Fence Agent Role-<username>",
"Id": null,
"IsCustom": true,
"Description": "Allows to power-off and start virtual machines",
"Actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/<subscriptionId>"
]
}
Voer de volgende opdracht uit om de rol toe te voegen:
- Vervang door
<filename>de naam van het bestand. - Als u de opdracht uitvoert vanaf een ander pad dan de map waarnaar het bestand is opgeslagen, neemt u het mappad van het bestand op in de opdracht.
az role definition create --role-definition "<filename>.json"
U ziet nu de volgende uitvoer:
{
"assignableScopes": [
"/subscriptions/<subscriptionId>"
],
"description": "Allows to power-off and start virtual machines",
"id": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/roleDefinitions/<roleNameId>",
"name": "<roleNameId>",
"permissions": [
{
"actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"dataActions": [],
"notActions": [],
"notDataActions": []
}
],
"roleName": "Linux Fence Agent Role-<username>",
"roleType": "CustomRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
De aangepaste rol toewijzen aan de service-principal
Wijs de aangepaste rol Linux Fence Agent Role-<username> toe die in de laatste stap is gemaakt aan de service-principal. Gebruik de rol Eigenaar niet meer.
- Ga naar de Azure-portal
- Het deelvenster Alle resources openen
- Selecteer de virtuele machine van het eerste clusterknooppunt
- Selecteer Toegangsbeheer (IAM)
- Selecteer Een roltoewijzing toevoegen
- Selecteer de rol
Linux Fence Agent Role-<username>uit de Rol lijst - Voer in de lijst Selecteren de naam in van de toepassing die u eerder hebt gemaakt.
<resourceGroupName>-app - Selecteer Opslaan
- Herhaal deze stappen voor alle clusterknooppunten.
De STONITH-apparaten maken
Voer de volgende opdrachten uit op knooppunt 1:
- Vervang de
<ApplicationID>waarde door de id-waarde van uw toepassingsregistratie. - Vervang de
<password>waarde door de waarde van het clientgeheim. - Vervang de
<resourceGroupName>door de resourcegroep uit uw abonnement die voor deze zelfstudie wordt gebruikt. - Vervang het
<tenantID>en het<subscriptionId>van uw Azure-abonnement.
sudo pcs property set stonith-timeout=900
sudo pcs stonith create rsc_st_azure fence_azure_arm login="<ApplicationID>" passwd="<password>" resourceGroup="<resourceGroupName>" tenantId="<tenantID>" subscriptionId="<subscriptionId>" power_timeout=240 pcmk_reboot_timeout=900
Omdat we al een regel aan onze firewall hebben toegevoegd om de HA-service (--add-service=high-availability) toe te staan, hoeft u de volgende firewallpoorten niet te openen op alle knooppunten: 2224, 3121, 21064, 5405. Als u echter enige netwerkproblemen ondervindt met HA, gebruikt u de volgende opdracht om de poorten te openen die aan HA zijn gekoppeld.
Aanbeveling
U kunt eventueel alle poorten in deze zelfstudie tegelijk toevoegen om tijd te besparen. De poorten die moeten worden geopend, worden uitgelegd in de relevante secties die volgen. Als u nu alle poorten wilt toevoegen, voegt u de extra poorten toe: 1433 en 5022.
sudo firewall-cmd --zone=public --add-port=2224/tcp --add-port=3121/tcp --add-port=21064/tcp --add-port=5405/tcp --permanent
sudo firewall-cmd --reload
SQL Server en mssql-tools installeren
Opmerking
Als u de VM's met SQL Server 2019 (15.x) vooraf hebt geïnstalleerd op RHEL8-HA, kunt u de onderstaande stappen overslaan om SQL Server en mssql-hulpprogramma's te installeren en de sectie Een beschikbaarheidsgroep configureren te starten nadat u het sa-wachtwoord hebt ingesteld op alle VM's door de opdracht sudo /opt/mssql/bin/mssql-conf set-sa-password uit te voeren op alle VM's.
Gebruik de onderstaande sectie om SQL Server en mssql-tools op de VM's te installeren. U kunt een van de onderstaande voorbeelden kiezen om SQL Server 2017 (14.x) te installeren op RHEL 7 of SQL Server 2019 (15.x) op RHEL 8. Voer elk van deze acties uit op alle knooppunten. Zie quickstart: SQL Server installeren en een database maken in Red Hat voor meer informatie.
SQL Server installeren op de VM's
De volgende opdrachten worden gebruikt om SQL Server te installeren:
RHEL 7 met SQL Server 2017
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2017.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha
RHEL 8 met SQL Server 2019
sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo
sudo yum install -y mssql-server
sudo /opt/mssql/bin/mssql-conf setup
sudo yum install mssql-server-ha
Open firewallpoort 1433 voor externe verbindingen
U moet poort 1433 op de virtuele machine openen om extern verbinding te kunnen maken. Gebruik de volgende opdrachten om poort 1433 te openen in de firewall van elke VIRTUELE machine:
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload
SQL Server-opdrachtregelhulpmiddelen installeren
De volgende opdrachten worden gebruikt om opdrachtregelprogramma's voor SQL Server te installeren. Zie de opdrachtregelprogramma's van SQL Server installeren voor meer informatie.
RHEL 7
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo
sudo yum install -y mssql-tools unixODBC-devel
RHEL 8
sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo
sudo yum install -y mssql-tools unixODBC-devel
Voor het gemak voegt u deze toe /opt/mssql-tools/bin/ aan uw PATH omgevingsvariabele. Hiermee kunt u de hulpprogramma's uitvoeren zonder het volledige pad op te geven. Voer de volgende opdrachten uit om de PATH voor zowel aanmeldingssessies als interactieve/niet-aanmeldingssessies te wijzigen:
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
Controleer de status van de SQL Server
Zodra u klaar bent met de configuratie, kunt u de status van SQL Server controleren en controleren of deze wordt uitgevoerd:
systemctl status mssql-server --no-pager
U ziet nu de volgende uitvoer:
● mssql-server.service - Microsoft SQL Server Database Engine
Loaded: loaded (/usr/lib/systemd/system/mssql-server.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2019-12-05 17:30:55 UTC; 20min ago
Docs: https://learn.microsoft.com/sql/linux
Main PID: 11612 (sqlservr)
CGroup: /system.slice/mssql-server.service
├─11612 /opt/mssql/bin/sqlservr
└─11640 /opt/mssql/bin/sqlservr
Een beschikbaarheidsgroep configureren
Gebruik de volgende stappen om een SQL Server AlwaysOn-beschikbaarheidsgroep voor uw VM's te configureren. Zie Sql Server AlwaysOn-beschikbaarheidsgroepen configureren voor hoge beschikbaarheid op Linuxvoor meer informatie.
AlwaysOn-beschikbaarheidsgroepen inschakelen en mssql-server opnieuw starten
Schakel AlwaysOn-beschikbaarheidsgroepen in op elk knooppunt dat als host fungeert voor een SQL Server-exemplaar. Start vervolgens mssql-server opnieuw op. Voer het volgende script uit:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
Een certificaat maken
Momenteel bieden we geen ondersteuning voor AD-verificatie voor het AG-eindpunt. Daarom moeten we een certificaat gebruiken voor AG-eindpuntversleuteling.
Maak verbinding met alle knooppunten met behulp van SQL Server Management Studio (SSMS) of sqlcmd. Voer de volgende opdrachten uit om een AlwaysOn_health sessie in te schakelen en een hoofdsleutel te maken:
Belangrijk
Als u extern verbinding maakt met uw SQL Server-exemplaar, moet poort 1433 zijn geopend op uw firewall. U moet ook binnenkomende verbindingen met poort 1433 in uw NSG toestaan voor elke VIRTUELE machine. Zie Een beveiligingsregel maken voor het maken van een binnenkomende beveiligingsregel voor meer informatie.
- Vervang de
<password>door uw eigen wachtwoord.
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE = ON); GO CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';- Vervang de
Maak verbinding met de primaire replica met behulp van SSMS of sqlcmd. Met de volgende opdrachten maakt u een certificaat op
/var/opt/mssql/data/dbm_certificate.ceren een persoonlijke sleutel opvar/opt/mssql/data/dbm_certificate.pvkuw primaire SQL Server-replica:- Vervang de
<password>door uw eigen wachtwoord.
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm'; GO BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', ENCRYPTION BY PASSWORD = '<password>' ); GO- Vervang de
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
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
scpopdracht uit om het certificaat naar de doelservers te kopiëren:- Vervang
<username>en<VM2>door de gebruikersnaam en doel-VM-naam die u gebruikt. - Voer deze opdracht uit voor alle secundaire replica's.
Opmerking
U hoeft
sudo -iniet uit te voeren, waardoor u de hoofdomgeving krijgt. U kunt desudoopdracht gewoon vóór elke opdracht uitvoeren, zoals we eerder in deze zelfstudie hebben gedaan.# The below command allows you to run commands in the root environment sudo -iscp /var/opt/mssql/data/dbm_certificate.* <username>@<VM2>:/home/<username>- Vervang
Voer op de doelserver de volgende opdracht uit:
- Vervang
<username>door uw gebruikersnaam. - Met de opdracht
mvworden de bestanden of map van de ene naar de andere locatie verplaatst. - De opdracht
chownwordt 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.*- Vervang
Met het volgende Transact-SQL script wordt een certificaat gemaakt op basis van de back-up die u hebt gemaakt op de primaire SQL Server-replica. Werk het script bij met sterke wachtwoorden. Het ontsleutelingswachtwoord is hetzelfde wachtwoord dat u in de vorige stap hebt gebruikt om het PVK-bestand te maken. Als u het certificaat wilt maken, voert u het volgende script uit met behulp van sqlcmd of SSMS op alle secundaire servers:
CREATE CERTIFICATE dbm_certificate FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '<password>' ); GO
De eindpunten voor databasespiegeling maken op alle replica's
Voer het volgende script uit op alle SQL Server-exemplaren met behulp van sqlcmd of SSMS:
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
ROLE = ALL,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GO
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GO
De beschikbaarheidsgroep maken
Maak verbinding met het SQL Server-exemplaar dat als host fungeert voor de primaire replica met behulp van sqlcmd of SSMS. Voer de volgende opdracht uit om de beschikbaarheidsgroep te maken:
- Vervang door
ag1de gewenste naam van de beschikbaarheidsgroep. - Vervang de waarden
<VM1>,<VM2>en<VM3>door de namen van de SQL Server-exemplaren die als host fungeren voor de replica's.
CREATE AVAILABILITY GROUP [ag1]
WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
N'<VM1>'
WITH (
ENDPOINT_URL = N'tcp://<VM1>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<VM2>'
WITH (
ENDPOINT_URL = N'tcp://<VM2>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<VM3>'
WITH(
ENDPOINT_URL = N'tcp://<VM3>:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
GO
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
GO
Een SQL Server-aanmelding maken voor Pacemaker
Maak op alle SQL Server-exemplaren een SQL Server-aanmelding voor Pacemaker. Met de volgende Transact-SQL wordt een inlog gecreëerd.
- Vervang
<password>door uw eigen complexe wachtwoord.
USE [master];
GO
CREATE LOGIN [pacemakerLogin] WITH PASSWORD = N'<password>';
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin];
GO
Sla op alle SQL Server-exemplaren de inloggegevens op die worden gebruikt voor de SQL Server-inlog.
Maak het bestand:
sudo vi /var/opt/mssql/secrets/passwdVoeg de volgende regels toe aan het bestand:
pacemakerLogin <password>Als u de vi editor wilt afsluiten, drukt u eerst op de toets Esc en voert u de opdracht in
:wqom het bestand te schrijven en af te sluiten.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
Als u de secundaire replica's wilt toevoegen aan de beschikbaarheidsgroep, moet u voor alle servers poort 5022 op de firewall openen. Voer de volgende opdracht uit in uw SSH-sessie:
sudo firewall-cmd --zone=public --add-port=5022/tcp --permanent sudo firewall-cmd --reloadVoer 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; GOVoer 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; GOZodra de secundaire replica's zijn gekoppeld, kunt u deze zien in SSMS Object Explorer door het knooppunt AlwaysOn High Availability uit te vouwen:
Een database toevoegen aan de beschikbaarheidsgroep
We volgen het artikel over het configureren van een beschikbaarheidsgroep waarin een database wordt toegevoegd.
In deze stap worden de volgende Transact-SQL opdrachten gebruikt. Voer deze opdrachten uit op de primaire replica:
CREATE DATABASE [db1]; -- creates a database named db1
GO
ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery model
GO
BACKUP DATABASE [db1] -- backs up the database to disk
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO
Controleer of de database is gemaakt op de secundaire servers
Voer op elke secundaire SQL Server-replica de volgende query uit om te zien of de db1-database is gemaakt en de status GESYNCHRONISEERD heeft:
SELECT *
FROM sys.databases
WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database',
synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
Als de synchronization_state_desc GESYNCHRONISEERD voor db1vermeldt, betekent dit dat de replica's worden gesynchroniseerd. De secundaire bestanden worden weergegeven db1 in de primaire replica.
Maak bronnen voor beschikbaarheidsgroepen in het Pacemaker-cluster
We volgen de handleiding om resources voor de beschikbaarheidsgroep in het Pacemaker-cluster te maken.
Opmerking
Dit artikel bevat verwijzingen naar de term slave, een term die Microsoft niet meer gebruikt. Wanneer de term uit de software wordt verwijderd, wordt deze uit dit artikel verwijderd.
Maak de AG-clusterresource aan
Gebruik een van de volgende opdrachten op basis van de eerder gekozen omgeving om de resource
ag_clusterin de beschikbaarheidsgroepag1te maken.RHEL 7
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s master notify=trueRHEL 8
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s promotable notify=trueZorg ervoor dat uw resources online zijn voordat u doorgaat met behulp van de volgende opdracht:
sudo pcs resourceU ziet nu de volgende uitvoer:
RHEL 7
[<username>@VM1 ~]$ sudo pcs resource Master/Slave Set: ag_cluster-master [ag_cluster] Masters: [ <VM1> ] Slaves: [ <VM2> <VM3> ]RHEL 8
[<username>@VM1 ~]$ sudo pcs resource * Clone Set: ag_cluster-clone [ag_cluster] (promotable): * ag_cluster (ocf::mssql:ag) : Slave VMrhel3 (Monitoring) * ag_cluster (ocf::mssql:ag) : Master VMrhel1 (Monitoring) * ag_cluster (ocf::mssql:ag) : Slave VMrhel2 (Monitoring)
Een virtuele IP-resource maken
Gebruik een beschikbaar statisch IP-adres van uw netwerk om een virtuele IP-resource te maken. U kunt er een vinden met behulp van het opdrachtprogramma
nmap.nmap -sP <IPRange> # For example: nmap -sP 10.0.0.* # The above will scan for all IP addresses that are already occupied in the 10.0.0.x space.Stel de eigenschap stonith-enabled in op false.
sudo pcs property set stonith-enabled=falseMaak de virtuele IP-resource met behulp van de volgende opdracht. Vervang door
<availableIP>een ongebruikt IP-adres.sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<availableIP>
Beperkingen toevoegen
Om ervoor te zorgen dat het IP-adres en de AG-resource op hetzelfde knooppunt worden uitgevoerd, moet er een colocatiebeperking worden geconfigureerd. Voer de volgende opdracht uit:
RHEL 7
sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=MasterRHEL 8
sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=MasterMaak een volgorde beperking om ervoor te zorgen dat de AG-resource operationeel is voordat het IP-adres beschikbaar is. Hoewel de colocatiebeperking een bestelbeperking impliceert, wordt dit afgedwongen.
RHEL 7
sudo pcs constraint order promote ag_cluster-master then start virtualipRHEL 8
sudo pcs constraint order promote ag_cluster-clone then start virtualipVoer de volgende opdracht uit om de beperkingen te controleren:
sudo pcs constraint list --fullU ziet nu de volgende uitvoer:
RHEL 7
Location Constraints: Ordering Constraints: promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY) Ticket Constraints:RHEL 8
Location Constraints: Ordering Constraints: promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY) Ticket Constraints:
stonith opnieuw inschakelen
We zijn klaar om te testen. Schakel stonith opnieuw in het cluster in door de volgende opdracht uit te voeren op Node 1:
sudo pcs property set stonith-enabled=true
De clusterstatus controleren
U kunt de status van uw clusterbronnen controleren met behulp van de volgende opdracht:
[<username>@VM1 ~]$ sudo pcs status
Cluster name: az-hacluster
Stack: corosync
Current DC: <VM3> (version 1.1.19-8.el7_6.5-c3c624ea3d) - partition with quorum
Last updated: Sat Dec 7 00:18:38 2019
Last change: Sat Dec 7 00:18:02 2019 by root via cibadmin on VM1
3 nodes configured
5 resources configured
Online: [ <VM1> <VM2> <VM3> ]
Full list of resources:
Master/Slave Set: ag_cluster-master [ag_cluster]
Masters: [ <VM2> ]
Slaves: [ <VM1> <VM3> ]
virtualip (ocf::heartbeat:IPaddr2): Started <VM2>
rsc_st_azure (stonith:fence_azure_arm): Started <VM1>
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
Failover testen
Om ervoor te zorgen dat de configuratie tot nu toe is geslaagd, testen we een failover. Zie AlwaysOn-beschikbaarheidsgroepfailover in Linux voor meer informatie.
Voer de volgende opdracht uit om handmatig een failover van de primaire replica naar
<VM2>uit te voeren. Vervang<VM2>door de waarde van uw servernaam.RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --masterRHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --masterU kunt ook een extra optie opgeven, zodat de tijdelijke beperking die is gemaakt om de resource naar een gewenst knooppunt te verplaatsen, automatisch wordt uitgeschakeld en u hoeft stap 2 en 3 niet uit te voeren in de volgende instructies.
RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master lifetime=30SRHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master lifetime=30SEen ander alternatief voor het automatiseren van stap 2 en 3, waardoor de tijdelijke beperking in de opdracht voor het verplaatsen van resources zelf wordt gewist, is door meerdere opdrachten op één regel te combineren.
RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master && sleep 30 && pcs resource clear ag_cluster-masterRHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master && sleep 30 && pcs resource clear ag_cluster-cloneAls u de beperkingen opnieuw controleert, ziet u dat er een andere beperking is toegevoegd vanwege de handmatige failover:
RHEL 7
[<username>@VM1 ~]$ sudo pcs constraint list --full Location Constraints: Resource: ag_cluster-master Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-master) Ordering Constraints: promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY) Ticket Constraints:RHEL 8
[<username>@VM1 ~]$ sudo pcs constraint list --full Location Constraints: Resource: ag_cluster-master Enabled on: VM2 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-clone) Ordering Constraints: promote ag_cluster-clone then start virtualip (kind:Mandatory) (id:order-ag_cluster-clone-virtualip-mandatory) Colocation Constraints: virtualip with ag_cluster-clone (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-clone-INFINITY) Ticket Constraints:Verwijder de beperking met id
cli-prefer-ag_cluster-mastermet behulp van de volgende opdracht:RHEL 7
sudo pcs constraint remove cli-prefer-ag_cluster-masterRHEL 8
sudo pcs constraint remove cli-prefer-ag_cluster-cloneControleer uw clusterbronnen met behulp van de opdracht
sudo pcs resourceen u ziet dat het primaire exemplaar nu<VM2>is.[<username>@<VM1> ~]$ sudo pcs resource Master/Slave Set: ag_cluster-master [ag_cluster] ag_cluster (ocf::mssql:ag): FAILED <VM1> (Monitoring) Masters: [ <VM2> ] Slaves: [ <VM3> ] virtualip (ocf::heartbeat:IPaddr2): Started <VM2> [<username>@<VM1> ~]$ sudo pcs resource Master/Slave Set: ag_cluster-master [ag_cluster] Masters: [ <VM2> ] Slaves: [ <VM1> <VM3> ] virtualip (ocf::heartbeat:IPaddr2): Started <VM2>
Fencing testen
U kunt fencing testen door de volgende opdracht uit te voeren. Probeer het onderstaande commando uit te voeren vanaf <VM1> voor <VM3>.
sudo pcs stonith fence <VM3> --debug
Opmerking
Standaard schakelt de omheiningsactie het knooppunt uit en vervolgens weer in. Als u het knooppunt alleen offline wilt brengen, gebruikt u de optie --off in de opdracht.
U moet de volgende uitvoer krijgen:
[<username>@<VM1> ~]$ sudo pcs stonith fence <VM3> --debug
Running: stonith_admin -B <VM3>
Return Value: 0
--Debug Output Start--
--Debug Output End--
Node: <VM3> fenced
Zie Een fence-apparaat testen vanuit Red Hat voor meer informatie over het testen van een hekapparaat.