Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server på virtuella Azure-datorer
Anmärkning
Vi använder SQL Server 2022 (16.x) med SUSE Linux Enterprise Server (SLES) v15 i den här självstudien, men det går att använda SQL Server 2019 (15.x) med SLES v12 eller SLES v15 för att konfigurera hög tillgänglighet.
I den här tutorialen lär du dig följande:
- Skapa en ny resursgrupp, en tillgänglighetsuppsättning och virtuella Linux-datorer (VM)
- Aktivera hög tillgänglighet (HA)
- Skapa ett Pacemaker-kluster
- Konfigurera en fäktningsagent genom att skapa en STONITH-enhet
- Installera SQL Server och mssql-tools på SLES
- Konfigurera SQL Server AlwaysOn-tillgänglighetsgrupp
- Konfigurera tillgänglighetsgruppresurser (AG) i Pacemaker-klustret
- Testa en redundansväxling och fäktningsagenten
Den här handledningen använder Azure CLI för att distribuera resurser i Azure.
Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.
Förutsättningar
Använd Bash-miljön i Azure Cloud Shell. Mer information finns i Snabbstart för Bash i Azure Cloud Shell.
Om du föredrar att köra CLI-referenskommandon lokalt installerar du Azure CLI. Om du kör i Windows eller macOS kan du överväga att köra Azure CLI i en Docker-container. Mer information finns i Så här kör du Azure CLI i en Docker-container.
Om du använder en lokal installation loggar du in på Azure CLI med hjälp av kommandot az login. Slutför autentiseringsprocessen genom att följa stegen som visas i terminalen. Andra inloggningsalternativ finns i Logga in med Azure CLI.
När du uppmanas att installera Azure CLI-tillägget vid första användningen. Mer information om tillägg finns i Använda tillägg med Azure CLI.
Kör az version för att hitta versionen och de beroende bibliotek som är installerade. Om du vill uppgradera till den senaste versionen kör du az upgrade.
- Den här artikeln kräver version 2.0.30 eller senare av Azure CLI. Om du använder Azure Cloud Shell är den senaste versionen redan installerad.
Skapa en resursgrupp
Om du har fler än en prenumeration anger du den prenumeration som du vill distribuera resurserna till.
Använd följande kommando för att skapa en resursgrupp <resourceGroupName>
i en region. Ersätt <resourceGroupName>
med ett valfritt namn. I den här handledningen används East US 2
. Mer information hittas i det följande Quickstart.
az group create --name <resourceGroupName> --location eastus2
Skapa en tillgänglighetsuppsättning
Nästa steg är att skapa en tillgänglighetsuppsättning. Kör följande kommando i Azure Cloud Shell och ersätt <resourceGroupName>
med resursgruppens namn. Välj ett namn för <availabilitySetName>
.
az vm availability-set create \
--resource-group <resourceGroupName> \
--name <availabilitySetName> \
--platform-fault-domain-count 2 \
--platform-update-domain-count 2
Du bör få följande resultat när kommandot har slutförts:
{
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/availabilitySets/<availabilitySetName>",
"location": "eastus2",
"name": "<availabilitySetName>",
"platformFaultDomainCount": 2,
"platformUpdateDomainCount": 2,
"proximityPlacementGroup": null,
"resourceGroup": "<resourceGroupName>",
"sku": {
"capacity": null,
"name": "Aligned",
"tier": null
},
"statuses": null,
"tags": {},
"type": "Microsoft.Compute/availabilitySets",
"virtualMachines": []
}
Skapa ett virtuellt nätverk och undernät
Skapa ett namngivet undernät med ett förtilldelat IP-adressintervall. Ersätt dessa värden i följande kommando:
<resourceGroupName>
<vNetName>
<subnetName>
az network vnet create \ --resource-group <resourceGroupName> \ --name <vNetName> \ --address-prefix 10.1.0.0/16 \ --subnet-name <subnetName> \ --subnet-prefix 10.1.1.0/24
Föregående kommando skapar ett virtuellt nätverk och ett undernät som innehåller ett anpassat IP-intervall.
Skapa SLES-VM i en tillgänglighetsuppsättning
Hämta en lista över avbildningar av virtuella datorer som erbjuder SLES v15 SP4 med BYOS (ta med din egen prenumeration). Du kan också använda SUSE Enterprise Linux 15 SP4 + Patching VM (
sles-15-sp4-basic
).az vm image list --all --offer "sles-15-sp3-byos" # if you want to search the basic offers you could search using the command below az vm image list --all --offer "sles-15-sp3-basic"
Du bör se följande resultat när du söker efter BYOS-bilderna:
[ { "offer": "sles-15-sp3-byos", "publisher": "SUSE", "sku": "gen1", "urn": "SUSE:sles-15-sp3-byos:gen1:2022.05.05", "version": "2022.05.05" }, { "offer": "sles-15-sp3-byos", "publisher": "SUSE", "sku": "gen1", "urn": "SUSE:sles-15-sp3-byos:gen1:2022.07.19", "version": "2022.07.19" }, { "offer": "sles-15-sp3-byos", "publisher": "SUSE", "sku": "gen1", "urn": "SUSE:sles-15-sp3-byos:gen1:2022.11.10", "version": "2022.11.10" }, { "offer": "sles-15-sp3-byos", "publisher": "SUSE", "sku": "gen2", "urn": "SUSE:sles-15-sp3-byos:gen2:2022.05.05", "version": "2022.05.05" }, { "offer": "sles-15-sp3-byos", "publisher": "SUSE", "sku": "gen2", "urn": "SUSE:sles-15-sp3-byos:gen2:2022.07.19", "version": "2022.07.19" }, { "offer": "sles-15-sp3-byos", "publisher": "SUSE", "sku": "gen2", "urn": "SUSE:sles-15-sp3-byos:gen2:2022.11.10", "version": "2022.11.10" } ]
I den här handledningen används
SUSE:sles-15-sp3-byos:gen1:2022.11.10
.Viktigt!
Datornamn måste vara mindre än 15 tecken långa för att konfigurera en tillgänglighetsgrupp. Användarnamn får inte innehålla versaler och lösenord måste innehålla mellan 12 och 72 tecken.
Skapa tre virtuella datorer i tillgänglighetsuppsättningen. Ersätt dessa värden i följande kommando:
<resourceGroupName>
<VM-basename>
<availabilitySetName>
-
<VM-Size>
– Ett exempel skulle vara "Standard_D16s_v3" <username>
<adminPassword>
<vNetName>
<subnetName>
for i in `seq 1 3`; do az vm create \ --resource-group <resourceGroupName> \ --name <VM-basename>$i \ --availability-set <availabilitySetName> \ --size "<VM-Size>" \ --os-disk-size-gb 128 \ --image "SUSE:sles-15-sp3-byos:gen1:2022.11.10" \ --admin-username "<username>" \ --admin-password "<adminPassword>" \ --authentication-type all \ --generate-ssh-keys \ --vnet-name "<vNetName>" \ --subnet "<subnetName>" \ --public-ip-sku Standard \ --public-ip-address "" done
Föregående kommando skapar de virtuella datorerna med det tidigare definierade virtuella nätverket. Mer information om de olika konfigurationerna finns i artikeln az vm create.
Kommandot innehåller även parametern --os-disk-size-gb
för att skapa en anpassad operativsystemenhetsstorlek på 128 GB. Om du ökar den här storleken senare, expanderar du lämpliga mappvolymer för att passa installationen, och konfigurerar då Logical Volume Manager (LVM).
Du bör få resultat som liknar följande när kommandot har slutförts för varje virtuell dator:
{
"fqdns": "",
"id": "/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachines/sles1",
"location": "westus",
"macAddress": "<Some MAC address>",
"powerState": "VM running",
"privateIpAddress": "<IP1>",
"resourceGroup": "<resourceGroupName>",
"zones": ""
}
Testa anslutningen till de skapade virtuella datorerna
Anslut till var och en av de virtuella datorerna med följande kommando i Azure Cloud Shell. Om du inte kan hitta dina VM-IP-adresser följer du den här snabbstarten på Azure Cloud Shell.
ssh <username>@<publicIPAddress>
Om anslutningen lyckas bör du se följande utdata som representerar Linux-terminalen:
[<username>@sles1 ~]$
Skriv exit
för att lämna SSH-sessionen.
Registrera dig med SUSEAnslut och installera paket med hög tillgänglighet
För att kunna slutföra den här självstudien måste dina virtuella datorer registreras med SUSEConnect för att få uppdateringar och support. Du kan sedan installera modulen för tillägg för hög tillgänglighet, eller mönster, som är en uppsättning paket som aktiverar HA.
Det är enklare att öppna en SSH-session på var och en av de virtuella datorerna (noderna) samtidigt, eftersom samma kommandon måste köras på varje virtuell dator i hela artikeln.
Om du kopierar och klistrar in flera sudo
kommandon och uppmanas att ange ett lösenord körs inte de ytterligare kommandona. Kör varje kommando separat.
Anslut till varje vm-nod för att köra följande steg.
Registrera den virtuella datorn med SUSEConnect
Om du vill registrera din VM-nod med SUSEConnect ersätter du dessa värden i följande kommando på alla noder:
<subscriptionEmailAddress>
<registrationCode>
sudo SUSEConnect
--url=https://scc.suse.com
-e <subscriptionEmailAddress> \
-r <registrationCode>
Installera tillägg för hög tillgänglighet
Om du vill installera tillägget för hög tillgänglighet kör du följande kommando på alla noder:
sudo SUSEConnect -p sle-ha/15.3/x86_64 -r <registration code for Partner Subscription for High Availability Extension>
Konfigurera lösenordsfri SSH-åtkomst mellan noder
Med lösenordslös SSH-åtkomst kan dina virtuella datorer kommunicera med varandra med hjälp av offentliga SSH-nycklar. Du måste konfigurera SSH-nycklar på varje nod och kopiera dessa nycklar till varje nod.
Generera nya SSH-nycklar
Den nödvändiga SSH-nyckelstorleken är 4 096 bitar. På varje virtuell dator ändrar du till mappen /root/.ssh
och kör följande kommando:
ssh-keygen -t rsa -b 4096
Under det här steget kan du uppmanas att skriva över en befintlig SSH-fil. Du måste godkänna den här uppmaningen. Du behöver inte ange en lösenfras.
Kopiera de offentliga SSH-nycklarna
På varje virtuell dator måste du kopiera den offentliga nyckeln från den nod som du nyss skapade med hjälp av kommandot ssh-copy-id
. Om du vill ange målkatalogen på den virtuella måldatorn kan du använda parametern -i
.
I följande kommando kan <username>
-kontot vara samma konto som du konfigurerade för varje nod när du skapade den virtuella datorn. Du kan också använda root
-kontot, men det rekommenderas inte i en produktionsmiljö.
sudo ssh-copy-id <username>@sles1
sudo ssh-copy-id <username>@sles2
sudo ssh-copy-id <username>@sles3
Verifiera lösenordslös åtkomst från varje nod
Om du vill bekräfta att den offentliga SSH-nyckeln kopierades till varje nod använder du kommandot ssh
från varje nod. Om du kopierade nycklarna korrekt uppmanas du inte att ange något lösenord och anslutningen lyckas.
I det här exemplet ansluter vi till den andra och tredje noderna från den första virtuella datorn (sles1
).
<username>
Återigen kan kontot vara samma konto som du konfigurerade för varje nod när du skapade den virtuella datorn
ssh <username>@sles2
ssh <username>@sles3
Upprepa den här processen från alla tre noderna så att varje nod kan kommunicera med de andra utan att kräva lösenord.
Konfigurera namnupplösning
Du kan konfigurera namnmatchning med antingen DNS eller genom att redigera etc/hosts
filen manuellt på varje nod.
Mer information om DNS och Active Directory finns i Ansluta SQL Server på en Linux-värd till en Active Directory-domän.
Viktigt!
Vi rekommenderar att du använder din privata IP--adress i föregående exempel. Om du använder den offentliga IP-adressen i den här konfigurationen misslyckas installationen och gör den virtuella datorn tillgänglig för externa nätverk.
De virtuella datorerna och deras IP-adress som används i det här exemplet visas på följande sätt:
-
sles1
: 10.0.0.85 -
sles2
: 10.0.0.86 -
sles3
: 10.0.0.87
Konfigurera klustret
I den här självstudien är den första virtuella datorn (sles1
) nod 1, den andra virtuella datorn (sles2
) är nod 2 och den tredje virtuella datorn (sles3
) är nod 3. Mer information om klusterinstallation finns i Konfigurera Pacemaker på SUSE Linux Enterprise Server i Azure.
Klusterinstallation
Kör följande kommando för att installera
ha-cluster-bootstrap
paketet på nod 1 och starta sedan om noden. I det här exemplet är det densles1
virtuella datorn.sudo zypper install ha-cluster-bootstrap
När noden har startats om kör du följande kommando för att distribuera klustret:
sudo crm cluster init --name sqlcluster
Du ser ett liknande utdata som i följande exempel:
Do you want to continue anyway (y/n)? y Generating SSH key for root The user 'hacluster' will have the login shell configuration changed to /bin/bash Continue (y/n)? y Generating SSH key for hacluster Configuring csync2 Generating csync2 shared key (this may take a while)...done csync2 checking files...done Detected cloud platform: microsoft-azure Configure Corosync (unicast): This will configure the cluster messaging layer. You will need to specify a network address over which to communicate (default is eth0's network, but you can use the network address of any active interface). Address for ring0 [10.0.0.85] Port for ring0 [5405] Configure SBD: If you have shared storage, for example a SAN or iSCSI target, you can use it avoid split-brain scenarios by configuring SBD. This requires a 1 MB partition, accessible to all nodes in the cluster. The device path must be persistent and consistent across all nodes in the cluster, so /dev/disk/by-id/* devices are a good choice. Note that all data on the partition you specify here will be destroyed. Do you wish to use SBD (y/n)? n WARNING: Not configuring SBD - STONITH will be disabled. Hawk cluster interface is now running. To see cluster status, open: https://10.0.0.85:7630/ Log in with username 'hacluster', password 'linux' WARNING: You should change the hacluster password to something more secure! Waiting for cluster..............done Loading initial cluster configuration Configure Administration IP Address: Optionally configure an administration virtual IP address. The purpose of this IP address is to provide a single IP that can be used to interact with the cluster, rather than using the IP address of any specific cluster node. Do you wish to configure a virtual IP address (y/n)? y Virtual IP []10.0.0.89 Configuring virtual IP (10.0.0.89)....done Configure Qdevice/Qnetd: QDevice participates in quorum decisions. With the assistance of a third-party arbitrator Qnetd, it provides votes so that a cluster is able to sustain more node failures than standard quorum rules allow. It is recommended for clusters with an even number of nodes and highly recommended for 2 node clusters. Do you want to configure QDevice (y/n)? n Done (log saved to /var/log/crmsh/ha-cluster-bootstrap.log)
Kontrollera statusen för klustret på nod 1 med följande kommando:
sudo crm status
Dina utdata bör innehålla följande text om den lyckades:
1 node configured 1 resource instance configured
På alla noder ändrar du lösenordet för
hacluster
till något säkrare med hjälp av följande kommando. Du måste också ändra användarlösenordetroot
:sudo passwd hacluster
sudo passwd root
Kör följande kommando på nod 2 och nod 3 för att först installera
crmsh
paketet:sudo zypper install crmsh
Kör nu kommandot för att ansluta till klustret:
sudo crm cluster join
Här är några av de interaktioner som du kan förvänta dig:
Join This Node to Cluster: You will be asked for the IP address of an existing node, from which configuration will be copied. If you have not already configured passwordless ssh between nodes, you will be prompted for the root password of the existing node. IP address or hostname of existing node (e.g.: 192.168.1.1) []10.0.0.85 Configuring SSH passwordless with root@10.0.0.85 root@10.0.0.85's password: Configuring SSH passwordless with hacluster@10.0.0.85 Configuring csync2...done Merging known_hosts WARNING: scp to sles2 failed (Exited with error code 1, Error output: The authenticity of host 'sles2 (10.1.1.5)' can't be established. ECDSA key fingerprint is SHA256:UI0iyfL5N6X1ZahxntrScxyiamtzsDZ9Ftmeg8rSBFI. Are you sure you want to continue connecting (yes/no/[fingerprint])? lost connection ), known_hosts update may be incomplete Probing for new partitions...done Address for ring0 [10.0.0.86] Hawk cluster interface is now running. To see cluster status, open: https://10.0.0.86:7630/ Log in with username 'hacluster', password 'linux' WARNING: You should change the hacluster password to something more secure! Waiting for cluster.....done Reloading cluster configuration...done Done (log saved to /var/log/crmsh/ha-cluster-bootstrap.log)
När du har anslutit alla datorer till klustret kontrollerar du resursen för att se om alla virtuella datorer är online:
sudo crm status
Du bör se följande utdata:
Stack: corosync Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum Last updated: Mon Mar 6 18:01:17 2023 Last change: Mon Mar 6 17:10:09 2023 by root via cibadmin on sles1 3 nodes configured 1 resource instance configured Online: [ sles1 sles2 sles3 ] Full list of resources: admin-ip (ocf::heartbeat:IPaddr2): Started sles1
Installera klusterresurskomponenten. Kör följande kommando på alla noder.
sudo zypper in socat
Installera komponenten
azure-lb
. Kör följande kommando på alla noder.sudo zypper in resource-agents
Konfigurera operativsystemet. Gå igenom följande steg på alla noder.
Redigera konfigurationsfilen:
sudo vi /etc/systemd/system.conf
Ändra värdet för
DefaultTasksMax
till4096
:#DefaultTasksMax=512 DefaultTasksMax=4096
Spara och avsluta vi-redigeraren .
Om du vill aktivera den här inställningen kör du följande kommando:
sudo systemctl daemon-reload
Testa om ändringen lyckades:
sudo systemctl --no-pager show | grep DefaultTasksMax
Minska storleken på den smutsiga cachen. Gå igenom följande steg på alla noder.
Redigera systemkontrollkonfigurationsfilen:
sudo vi /etc/sysctl.conf
Lägg till följande två rader i filen:
vm.dirty_bytes = 629145600 vm.dirty_background_bytes = 314572800
Spara och avsluta vi-redigeraren .
Installera Azure Python SDK på alla noder med följande kommandon:
sudo zypper install fence-agents # Install the Azure Python SDK on SLES 15 or later: # You might need to activate the public cloud extension first. In this example, the SUSEConnect command is for SLES 15 SP1 SUSEConnect -p sle-module-public-cloud/15.1/x86_64 sudo zypper install python3-azure-mgmt-compute sudo zypper install python3-azure-identity
Konfigurera stängslingsagent
En STONITH-enhet tillhandahåller en fäktningsagent. Anvisningarna nedan har ändrats för denna handledning. Mer information finns i Skapa en Azure Fence Agent STONITH-enhet.
Kontrollera versionen av Azure Fence-agenten för att se till att den uppdateras. Använd följande kommando:
sudo zypper info resource-agents
Du bör se ett resultat som liknar exemplet nedan.
Information for package resource-agents:
----------------------------------------
Repository : SLE-Product-HA15-SP3-Updates
Name : resource-agents
Version : 4.8.0+git30.d0077df0-150300.8.37.1
Arch : x86_64
Vendor : SUSE LLC <https://www.suse.com/>
Support Level : Level 3
Installed Size : 2.5 MiB
Installed : Yes (automatically)
Status : up-to-date
Source package : resource-agents-4.8.0+git30.d0077df0-150300.8.37.1.src
Upstream URL : http://linux-ha.org/
Summary : HA Reusable Cluster Resource Scripts
Description : A set of scripts to interface with several services
to operate in a High Availability environment for both
Pacemaker and rgmanager service managers.
Registrera nytt program i Microsoft Entra-ID
Om du vill registrera ett nytt program i Microsoft Entra-ID (tidigare Azure Active Directory) följer du dessa steg:
- Gå till https://portal.azure.com.
- Öppna fönstret Egenskaper för Microsoft Entra-ID och skriv ned
Tenant ID
. - Välj Appregistreringar.
- Välj Ny registrering.
- Ange ett namn som
<resourceGroupName>-app
. För kontotyper som stöds väljer du Endast Konton i den här organisationskatalogen (endast Microsoft – enskild klient). - Välj Webb för Omdirigerings-URI och ange en URL (till exempel http://localhost) och välj Lägg till. Inloggnings-URL:en kan vara valfri giltig URL. När du är klar väljer du Registrera.
- Välj Certifikat och hemligheter för din nya appregistrering och välj sedan Ny klienthemlighet.
- Ange en beskrivning för en ny nyckel (klienthemlighet) och välj sedan Lägg till.
- Skriv ned hemlighetens värde. Det används som lösenord för tjänstens huvudnamn.
- Välj Översikt. Skriv ned program-ID:t. Det används som användarnamn (inloggnings-ID i stegen nedan) för tjänstprincipal.
Skapa en anpassad roll för stängselagenten
Följ självstudien för att skapa en anpassad Azure-roll med Azure CLI.
JSON-filen bör se ut ungefär som i följande exempel.
- Ersätt
<username>
med ett valfritt namn. Detta för att undvika duplicering när du skapar den här rolldefinitionen. - Ersätt
<subscriptionId>
med ditt Azure-prenumerations-ID.
{
"Name": "Linux Fence Agent Role-<username>",
"Id": null,
"IsCustom": true,
"Description": "Allows to power-off and start virtual machines",
"Actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"NotActions": [
],
"AssignableScopes": [
"/subscriptions/<subscriptionId>"
]
}
Om du vill lägga till rollen kör du följande kommando:
- Ersätt
<filename>
med namnet på filen. - Om du kör kommandot från en annan sökväg än den mapp som filen sparas till ska du inkludera mappsökvägen för filen i kommandot .
az role definition create --role-definition "<filename>.json"
Du bör se följande utdata:
{
"assignableScopes": [
"/subscriptions/<subscriptionId>"
],
"description": "Allows to power-off and start virtual machines",
"id": "/subscriptions/<subscriptionId>/providers/Microsoft.Authorization/roleDefinitions/<roleNameId>",
"name": "<roleNameId>",
"permissions": [
{
"actions": [
"Microsoft.Compute/*/read",
"Microsoft.Compute/virtualMachines/powerOff/action",
"Microsoft.Compute/virtualMachines/start/action"
],
"dataActions": [],
"notActions": [],
"notDataActions": []
}
],
"roleName": "Linux Fence Agent Role-<username>",
"roleType": "CustomRole",
"type": "Microsoft.Authorization/roleDefinitions"
}
Tilldela den anpassade rollen till tjänstens huvudnamn
Tilldela den anpassade roll Linux Fence Agent Role-<username>
som skapades i det senaste steget till tjänstens huvudnamn. Upprepa de här stegen för alla noder.
Varning
Använd inte rollen Ägare från och med nu.
- Gå till https://portal.azure.com
- Öppna fönstret Alla resurser
- Välj den virtuella datorn för den första klusternoden
- Välj Åtkomstkontroll (IAM)
- Välj Lägg till rolltilldelningar
- Välj rollen
Linux Fence Agent Role-<username>
i listan Roll - Lämna Tilldela åtkomst till som standard
Users, group, or service principal
. - I listan Välj anger du namnet på det program som du skapade tidigare, till exempel
<resourceGroupName>-app
. - Välj Spara.
Skapa STONITH-enheterna
Kör följande kommandon på nod 1:
-
<ApplicationID>
Ersätt med ID-värdet från programregistreringen. -
<servicePrincipalPassword>
Ersätt med värdet från klienthemligheten. -
<resourceGroupName>
Ersätt med resursgruppen från din prenumeration som används för den här självstudien. -
<tenantID>
Ersätt och<subscriptionId>
från din Azure-prenumeration.
-
Kör
crm configure
för att öppna crm-prompten :sudo crm configure
I crm-prompten kör du följande kommando för att konfigurera resursegenskaperna, vilket skapar resursen anropad
rsc_st_azure
enligt följande exempel:primitive rsc_st_azure stonith:fence_azure_arm params subscriptionId="subscriptionID" resourceGroup="ResourceGroup_Name" tenantId="TenantID" login="ApplicationID" passwd="servicePrincipalPassword" pcmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="sles1:sles1;sles2:sles2;sles3:sles3" op monitor interval=3600 timeout=120 commit quit
Kör följande kommandon för att konfigurera fäktningsagenten:
sudo crm configure property stonith-timeout=900 sudo crm configure property stonith-enabled=true sudo crm configure property concurrent-fencing=true
Kontrollera statusen för klustret för att se att STONITH har aktiverats:
sudo crm status
Du bör se utdata som liknar följande text:
Stack: corosync Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum Last updated: Mon Mar 6 18:20:17 2023 Last change: Mon Mar 6 18:10:09 2023 by root via cibadmin on sles1 3 nodes configured 2 resource instances configured Online: [ sles1 sles2 sles3 ] Full list of resources: admin-ip (ocf::heartbeat:IPaddr2): Started sles1 rsc_st_azure (stonith:fence_azure_arm): Started sles2
Installera SQL Server och mssql-tools
Använd avsnittet nedan för att installera SQL Server och mssql-tools. Mer information finns i Installera SQL Server på SUSE Linux Enterprise Server.
Utför de här stegen på alla noder i det här avsnittet.
Installera SQL Server på de virtuella datorerna
Följande kommandon används för att installera SQL Server:
Ladda ned konfigurationsfilen för Microsoft SQL Server 2019 SLES-lagringsplatsen:
sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/15/mssql-server-2022.repo
Uppdatera dina lagringsplatser.
sudo zypper --gpg-auto-import-keys refresh
Använd följande kommando för att importera nyckeln för att säkerställa att Microsoft-paketsigneringsnyckeln är installerad på systemet:
sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
Kör följande kommandon för att installera SQL Server:
sudo zypper install -y mssql-server
När paketinstallationen är klar kör du
mssql-conf setup
och följer anvisningarna för att ange SA-lösenordet och välja din utgåva.sudo /opt/mssql/bin/mssql-conf setup
Anmärkning
Se till att ange ett starkt lösenord för SA-kontot (minsta längd på 8 tecken, inklusive versaler och gemener, bas 10 siffror och/eller icke-alfanumeriska symboler).
När konfigurationen är klar kontrollerar du att tjänsten körs:
systemctl status mssql-server
Installera kommandoradsverktyg för SQL Server
Följande steg installerar kommandoradsverktygen för SQL Server, nämligen sqlcmd och bcp.
Lägg till Microsoft SQL Server-lagringsplatsen i Zypper.
sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/15/prod.repo
Uppdatera dina lagringsplatser.
sudo zypper --gpg-auto-import-keys refresh
Installera mssql-tools med
unixODBC
utvecklarpaketet. Mer information finns i Installera Microsoft ODBC-drivrutinen för SQL Server (Linux).sudo zypper install -y mssql-tools unixODBC-devel
För enkelhetens skull kan du lägga till /opt/mssql-tools/bin/
i din PATH
miljövariabel. På så sätt kan du köra verktygen utan att ange den fullständiga sökvägen. Kör följande kommandon för att ändra PATH för både inloggningssessioner och interaktiva/icke-inloggningssessioner:
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
Installera SQL Server-agent med hög tillgänglighet
Kör följande kommando på alla noder för att installera agentpaketet med hög tillgänglighet för SQL Server:
sudo zypper install mssql-server-ha
Öppna portar för tjänster med hög tillgänglighet
Du kan öppna följande brandväggsportar på alla noder för SQL Server- och HA-tjänster: 1433, 2224, 3121, 5022, 5405, 21064.
sudo firewall-cmd --zone=public --add-port=1433/tcp --add-port=2224/tcp --add-port=3121/tcp --add-port=5022/tcp --add-port=5405/tcp --add-port=21064 --permanent sudo firewall-cmd --reload
Konfigurera en tillgänglighetsgrupp
Använd följande steg för att konfigurera en SQL Server AlwaysOn-tillgänglighetsgrupp för dina virtuella datorer. Mer information finns i Konfigurera SQL Server AlwaysOn-tillgänglighetsgrupper för hög tillgänglighet i Linux
Aktivera tillgänglighetsgrupper och starta om SQL Server
Aktivera tillgänglighetsgrupper på varje nod som är värd för en SQL Server-instans. Starta sedan om mssql-server
-tjänsten. Kör följande kommandon på varje nod:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
Skapa ett certifikat
Microsoft stöder inte Active Directory-autentisering till ag-slutpunkten. Därför måste du använda ett certifikat för AG-slutpunktskryptering.
Anslut alla noder till med SQL Server Management Studio (SSMS) eller sqlcmd. Kör följande kommandon för att aktivera en AlwaysOn_health session och skapa en huvudnyckel:
Viktigt!
Om du ansluter via fjärranslutning till SQL Server-instansen måste du ha port 1433 öppen i brandväggen. Du måste också tillåta inkommande anslutningar till port 1433 i din NSG för varje virtuell dator. Mer information finns i Skapa en säkerhetsregel för att skapa en regel för inkommande säkerhet.
- Ersätt
<MasterKeyPassword>
med ditt eget lösenord.
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE = ON); GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<MasterKeyPassword>'; GO
- Ersätt
Anslut till den primära repliken med SSMS eller sqlcmd. Kommandona nedan skapar ett certifikat på
/var/opt/mssql/data/dbm_certificate.cer
och en privat nyckel påvar/opt/mssql/data/dbm_certificate.pvk
på din primära SQL Server-replik:- Ersätt
<PrivateKeyPassword>
med ditt eget lösenord.
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm'; GO BACKUP CERTIFICATE dbm_certificate TO FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', ENCRYPTION BY PASSWORD = '<PrivateKeyPassword>' ); GO
- Ersätt
Avsluta den sqlcmd--sessionen genom att köra kommandot exit
och återgå till SSH-sessionen.
Kopiera certifikatet till de sekundära replikerna och skapa certifikaten på servern
Kopiera de två filer som skapades till samma plats på alla servrar som ska vara värdar för tillgänglighetsrepliker.
På den primära servern kör du följande
scp
kommando för att kopiera certifikatet till målservrarna:- Ersätt
<username>
ochsles2
med det användarnamn och måldatornamn som du använder. - Kör det här kommandot för alla sekundära repliker.
Anmärkning
Du behöver inte köra
sudo -i
, vilket ger dig rotmiljön. Du kan köra kommandotsudo
framför varje kommando i stället.# The below command allows you to run commands in the root environment sudo -i
scp /var/opt/mssql/data/dbm_certificate.* <username>@sles2:/home/<username>
- Ersätt
Kör följande kommando på målservern:
- Ersätt
<username>
med ditt användarnamn. - Kommandot
mv
flyttar filerna eller katalogen från en plats till en annan. - Kommandot
chown
används för att ändra ägare och grupp av filer, kataloger eller länkar. - Kör dessa kommandon för alla sekundära repliker.
sudo -i mv /home/<username>/dbm_certificate.* /var/opt/mssql/data/ cd /var/opt/mssql/data chown mssql:mssql dbm_certificate.*
- Ersätt
Följande Transact-SQL skript skapar ett certifikat från säkerhetskopian som du skapade på den primära SQL Server-repliken. Uppdatera skriptet med starka lösenord. Dekrypteringslösenordet är samma lösenord som du använde för att skapa .pvk-filen i föregående steg. Skapa certifikatet genom att köra följande skript med sqlcmd eller SSMS på alla sekundära servrar:
CREATE CERTIFICATE dbm_certificate FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/dbm_certificate.pvk', DECRYPTION BY PASSWORD = '<PrivateKeyPassword>' ); GO
Skapa databasspeglingsslutpunkter på alla repliker
Kör följande skript på alla SQL Server-instanser med sqlcmd eller SSMS:
CREATE ENDPOINT [Hadr_endpoint]
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
ROLE = ALL,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
GO
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;
GO
Skapa tillgänglighetsgruppen
Anslut till SQL Server-instansen som är värd för den primära repliken med hjälp av sqlcmd eller SSMS. Kör följande kommando för att skapa tillgänglighetsgruppen:
- Ersätt
ag1
med önskat ag-namn. - Ersätt värdena
sles1
,sles2
ochsles3
med namnen på DE SQL Server-instanser som är värdar för replikerna.
CREATE AVAILABILITY
GROUP [ag1]
WITH (
DB_FAILOVER = ON,
CLUSTER_TYPE = EXTERNAL
)
FOR REPLICA
ON N'sles1'
WITH (
ENDPOINT_URL = N'tcp://sles1:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'sles2'
WITH (
ENDPOINT_URL = N'tcp://sles2:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'sles3'
WITH (
ENDPOINT_URL = N'tcp://sles3:5022',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
);
GO
ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO
Skapa en SQL Server-inloggning för Pacemaker
På alla SQL Server-instanser skapar du en SQL Server-inloggning för Pacemaker. Följande Transact-SQL skapar en inloggning.
- Ersätt
<password>
med ditt eget komplexa lösenord.
USE [master]
GO
CREATE LOGIN [pacemakerLogin]
WITH PASSWORD = N'<password>';
GO
ALTER SERVER ROLE [sysadmin]
ADD MEMBER [pacemakerLogin];
GO
Spara de autentiseringsuppgifter som används för SQL Server-inloggningen på alla SQL Server-instanser.
Skapa filen:
sudo vi /var/opt/mssql/secrets/passwd
Lägg till följande två rader i filen:
pacemakerLogin <password>
Om du vill avsluta vi redigeraren trycker du först på tangenten Esc och anger sedan kommandot
:wq
för att skriva filen och avsluta.Gör filen endast läsbar för Root.
sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwd
Anslut sekundära repliker till tillgänglighetsgruppen
På dina sekundära repliker kör du följande kommandon för att ansluta dem till tillgänglighetsgruppen:
ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE; GO
Kör följande Transact-SQL skript på den primära repliken och varje sekundär replik:
GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO pacemakerLogin; GO GRANT VIEW SERVER STATE TO pacemakerLogin; GO
När de sekundära replikerna har anslutits kan du se dem i SSMS Object Explorer genom att expandera noden Always On High Availability:
Lägga till en databas i tillgänglighetsgruppen
Det här avsnittet följer artikeln om för att lägga till en databas i en tillgänglighetsgrupp.
Följande Transact-SQL kommandon används i det här steget. Kör följande kommandon på den primära repliken:
CREATE DATABASE [db1]; -- creates a database named db1
GO
ALTER DATABASE [db1] SET RECOVERY FULL; -- set the database in full recovery model
GO
BACKUP DATABASE [db1] -- backs up the database to disk
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1]; -- adds the database db1 to the AG
GO
Kontrollera att databasen har skapats på de sekundära servrarna
På varje sekundär SQL Server-replik kör du följande fråga för att se om databasen db1 skapades och är i ett SYNKRONISERAT tillstånd:
SELECT * FROM sys.databases
WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database',
synchronization_state_desc
FROM sys.dm_hadr_database_replica_states;
GO
Om synchronization_state_desc
visar SYNKRONISERAde för db1
innebär det att replikerna synkroniseras. Sekundärfilerna visar db1
i den primära repliken.
Skapa resurser för tillgänglighetsgrupp i Pacemaker-klustret
Anmärkning
Biasfri kommunikation
Den här artikeln innehåller referenser till termen slave, en term som Microsoft anser vara stötande när den används i den här kontexten. Termen visas i den här artikeln eftersom den för närvarande visas i programvaran. När termen tas bort från programvaran tar vi bort den från artikeln.
Den här artikeln refererar till guiden för att skapa tillgänglighetsgruppens resurser i ett Pacemaker-kluster.
Aktivera Pacemaker
Aktivera Pacemaker så att den startas automatiskt.
Kör följande kommando på alla noder i klustret.
sudo systemctl enable pacemaker
Skapa ag-klusterresursen
Kör
crm configure
för att öppna crm-prompten :sudo crm configure
I crm-prompten kör du följande kommando för att konfigurera resursegenskaperna. Följande kommandon skapar resursen
ag_cluster
i tillgänglighetsgruppenag1
.primitive ag_cluster ocf:mssql:ag params ag_name="ag1" meta failure-timeout=60s op start timeout=60s op stop timeout=60s op promote timeout=60s op demote timeout=10s op monitor timeout=60s interval=10s op monitor timeout=60s interval=11s role="Master" op monitor timeout=60s interval=12s role="Slave" op notify timeout=60s ms ms-ag_cluster ag_cluster meta master-max="1" master-node-max="1" clone-max="3" clone-node-max="1" notify="true" commit quit
Tips/Råd
Skriv
quit
för att avsluta crm-prompten .Ange samplaceringsvillkoret för den virtuella IP-adressen så att den körs på samma nod som den primära noden.
sudo crm configure colocation vip_on_master inf: admin-ip ms-ag_cluster: Master commit quit
Lägg till ordningsbegränsningen för att förhindra att IP-adressen tillfälligt pekar på noden med den sekundära före övergången. Kör följande kommando för att skapa ordningsbegränsning:
sudo crm configure order ag_first inf: ms-ag_cluster:promote admin-ip:start commit quit
Kontrollera statusen för klustret med kommandot :
sudo crm status
Utdata bör likna följande exempel:
Cluster Summary: * Stack: corosync * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum * Last updated: Mon Mar 6 18:38:17 2023 * Last change: Mon Mar 6 18:38:09 2023 by root via cibadmin on sles1 * 3 nodes configured * 5 resource instances configured Node List: * Online: [ sles1 sles2 sles3 ] Full List of Resources: * admin-ip (ocf::heartbeat:IPaddr2): Started sles1 * rsc_st_azure (stonith:fence_azure_arm): Started sles2 * Clone Set: ms-ag_cluster [ag_cluster] (promotable): * Masters: [ sles1 ] * Slaves: [ sles2 sles3 ]
Kör följande kommando för att granska begränsningarna:
sudo crm configure show
Utdata bör likna följande exempel:
node 1: sles1 node 2: sles2 node 3: sles3 primitive admin-ip IPaddr2 \ params ip=10.0.0.93 \ op monitor interval=10 timeout=20 primitive ag_cluster ocf:mssql:ag \ params ag_name=ag1 \ meta failure-timeout=60s \ op start timeout=60s interval=0 \ op stop timeout=60s interval=0 \ op promote timeout=60s interval=0 \ op demote timeout=10s interval=0 \ op monitor timeout=60s interval=10s \ op monitor timeout=60s interval=11s role=Master \ op monitor timeout=60s interval=12s role=Slave \ op notify timeout=60s interval=0 primitive rsc_st_azure stonith:fence_azure_arm \ params subscriptionId=xxxxxxx resourceGroup=amvindomain tenantId=xxxxxxx login=xxxxxxx passwd="******" cmk_monitor_retries=4 pcmk_action_limit=3 power_timeout=240 pcmk_reboot_timeout=900 pcmk_host_map="sles1:sles1;les2:sles2;sles3:sles3" \ op monitor interval=3600 timeout=120 ms ms-ag_cluster ag_cluster \ meta master-max=1 master-node-max=1 clone-max=3 clone-node-max=1 notify=true order ag_first Mandatory: ms-ag_cluster:promote admin-ip:start colocation vip_on_master inf: admin-ip ms-ag_cluster:Master property cib-bootstrap-options: \ have-watchdog=false \ dc-version="2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712" \ cluster-infrastructure=corosync \ cluster-name=sqlcluster \ stonith-enabled=true \ concurrent-fencing=true \ stonith-timeout=900 rsc_defaults rsc-options: \ resource-stickiness=1 \ migration-threshold=3 op_defaults op-options: \ timeout=600 \ record-pending=true
Testa övergång till reservsystem
Testa en redundansväxling för att säkerställa att konfigurationen har slutförts hittills. Mer information finns i AlwaysOn-tillgänglighetsgruppens redundansväxling i Linux.
Kör följande kommando för att manuellt byta över den primära repliken till
sles2
. Ersättsles2
med värdet för servernamnet.sudo crm resource move ag_cluster sles2
Utdata bör likna följande exempel:
INFO: Move constraint created for ms-ag_cluster to sles2 INFO: Use `crm resource clear ms-ag_cluster` to remove this constraint
Kontrollera status för klustret:
sudo crm status
Utdata bör likna följande exempel:
Cluster Summary: * Stack: corosync * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum * Last updated: Mon Mar 6 18:40:02 2023 * Last change: Mon Mar 6 18:39:53 2023 by root via crm_resource on sles1 * 3 nodes configured * 5 resource instances configured Node List: * Online: [ sles1 sles2 sles3 ] Full List of Resources: * admin-ip (ocf::heartbeat:IPaddr2): Stopped * rsc_st_azure (stonith:fence_azure_arm): Started sles2 * Clone Set: ms-ag_cluster [ag_cluster] (promotable): * Slaves: [ sles1 sles2 sles3 ]
Efter en tid är den
sles2
virtuella datorn nu den primära och de andra två virtuella datorerna är sekundärdatorer. Körsudo crm status
igen och granska utdata, vilket liknar följande exempel:Cluster Summary: * Stack: corosync * Current DC: sles1 (version 2.0.5+20201202.ba59be712-150300.4.30.3-2.0.5+20201202.ba59be712) - partition with quorum * Last updated: Tue Mar 6 22:00:44 2023 * Last change: Mon Mar 6 18:42:59 2023 by root via cibadmin on sles1 * 3 nodes configured * 5 resource instances configured Node List: * Online: [ sles1 sles2 sles3 ] Full List of Resources: * admin-ip (ocf::heartbeat:IPaddr2): Started sles2 * rsc_st_azure (stonith:fence_azure_arm): Started sles2 * Clone Set: ms-ag_cluster [ag_cluster] (promotable): * Masters: [ sles2 ] * Slaves: [ sles1 sles3 ]
Kontrollera begränsningarna igen med hjälp av
crm config show
. Observera att en annan begränsning har lagts till på grund av den manuella övergången.Ta bort villkoret med ID
cli-prefer-ag_cluster
med hjälp av följande kommando:crm configure delete cli-prefer-ms-ag_cluster commit
Fäktningstest
Du kan testa STONITH genom att köra följande kommando. Prova att köra kommandot nedan från sles1
för sles3
.
sudo crm node fence sles3