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 2017 (14.x) med RHEL 7.6 i den här självstudien, men det går att använda SQL Server 2019 (15.x) i RHEL 7 eller RHEL 8 för att konfigurera hög tillgänglighet. Kommandona för att konfigurera Pacemaker-klustret och tillgänglighetsgruppens resurser har ändrats i RHEL 8 och du vill titta på artikeln Skapa resurs för tillgänglighetsgrupp och RHEL 8-resurser för mer information om rätt kommandon.
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å RHEL
- 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 ange 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. Vi använder East US 2
för den här handledningen. 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 virtuella RHEL-datorer i tillgänglighetsuppsättningen
Varning
Om du väljer en RHEL-avbildning med betala perYou-Go (PAYG) och konfigurerar hög tillgänglighet (HA) kan du behöva registrera din prenumeration. Detta kan göra att du betalar två gånger för prenumerationen eftersom du debiteras för Microsoft Azure RHEL-prenumerationen för den virtuella datorn och en prenumeration på Red Hat. Mer information finns i https://access.redhat.com/solutions/2458541.
Om du vill undvika att bli "dubbelfakturerad" använder du en RHEL HA-avbildning när du skapar den virtuella Azure-datorn. Bilder som erbjuds som RHEL-HA-bilder är också PAYG-bilder med HA-lagret föraktiverat.
Hämta en lista över avbildningar av virtuella datorer som erbjuder RHEL med HA:
az vm image list --all --offer "RHEL-HA"
Du bör se följande resultat:
[ { "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" } ]
I den här självstudien väljer vi avbildningen
RedHat:RHEL-HA:7.6:7.6.2019062019
för RHEL 7-exemplet och väljerRedHat:RHEL-HA:8.1:8.1.2020021914
för RHEL 8-exemplet.Du kan också välja SQL Server 2019 (15.x) förinstallerat på RHEL8-HA avbildningar. Kör följande kommando för att hämta listan över dessa avbildningar:
az vm image list --all --offer "sql2019-rhel8"
Du bör se följande resultat:
[ { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "enterprise", "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200317", "version": "15.0.200317" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "enterprise", "urn": "MicrosoftSQLServer:sql2019-rhel8:enterprise:15.0.200512", "version": "15.0.200512" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "sqldev", "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200317", "version": "15.0.200317" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "sqldev", "urn": "MicrosoftSQLServer:sql2019-rhel8:sqldev:15.0.200512", "version": "15.0.200512" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "standard", "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200317", "version": "15.0.200317" }, { "offer": "sql2019-rhel8", "publisher": "MicrosoftSQLServer", "sku": "standard", "urn": "MicrosoftSQLServer:sql2019-rhel8:standard:15.0.200512", "version": "15.0.200512" } ]
Om du använder någon av ovanstående avbildningar för att skapa de virtuella datorerna är SQL Server 2019 (15.x) förinstallerat. Hoppa över avsnittet Installera SQL Server och mssql-tools enligt beskrivningen i den här artikeln.
Viktigt!
Datornamn måste vara mindre än 15 tecken för att konfigurera tillgänglighetsgrupp. Användarnamn får inte innehålla versaler och lösenord måste innehålla fler än 12 tecken.
Vi vill 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_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
Kommandot ovan skapar de virtuella datorerna och skapar ett standard virtuellt nätverk för dessa virtuella datorer. Mer information om de olika konfigurationerna finns i artikeln az vm create.
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/<VM1>",
"location": "eastus2",
"macAddress": "<Some MAC address>",
"powerState": "VM running",
"privateIpAddress": "<IP1>",
"publicIpAddress": "",
"resourceGroup": "<resourceGroupName>",
"zones": ""
}
Viktigt!
Standardavbildningen som skapas med kommandot ovan skapar som standard en 32GB OS-disk. Du kan eventuellt få slut på utrymme med den här standardinstallationen. Du kan använda följande parameter som lagts till i kommandot ovan az vm create
för att skapa en OS-disk med 128 GB som exempel: --os-disk-size-gb 128
.
Du kan sedan konfigurera Logical Volume Manager (LVM) om du behöver utöka lämpliga mappvolymer för att hantera installationen.
Testa anslutningen till de skapade virtuella datorerna
Anslut till VM1 eller andra virtuella datorer 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>@<VM1> ~]$
Skriv exit
för att lämna SSH-sessionen.
Aktivera hög tillgänglighet
Viktigt!
För att kunna slutföra den här delen av självstudien måste du ha en prenumeration för RHEL och tillägget hög tillgänglighet. Om du använder en avbildning som rekommenderas i föregående avsnitt behöver du inte registrera en annan prenumeration.
Anslut till varje VM-nod och följ den här guiden för att aktivera HA. Mer information finns i aktivera en prenumeration med hög tillgänglighet för RHEL.
Tips/Råd
Det blir enklare om du öppnar en SSH-session för var och en av de virtuella datorerna samtidigt som samma kommandon måste köras på varje virtuell dator i 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.
Öppna Pacemaker-brandväggsportarna genom att köra följande kommandon på varje virtuell dator:
sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload
Uppdatera och installera Pacemaker-paket på alla noder med hjälp av följande kommandon:
Anmärkning
nmap installeras som en del av det här kommandoblocket som ett verktyg för att hitta tillgängliga IP-adresser i nätverket. Du behöver inte installera nmap, men det kommer att vara användbart senare i den här självstudien.
sudo yum update -y sudo yum install -y pacemaker pcs fence-agents-all resource-agents fence-agents-azure-arm nmap sudo reboot
Ange lösenordet för standardanvändaren som skapas när du installerar Pacemaker-paket. Använd samma lösenord på alla noder.
sudo passwd hacluster
Använd följande kommando för att öppna värdfilen och konfigurera värdnamnslösning. För mer information, se Konfigurera AG om att konfigurera värdfilen.
sudo vi /etc/hosts
I vi-redigeraren anger du
i
för att infoga text och lägger till den privata IP-adressen för motsvarande virtuella dator på en tom rad. Lägg sedan till VM-namnet efter ett blanksteg bredvid IP-adressen. Varje rad bör ha en separat inmatning.<IP1> <VM1> <IP2> <VM2> <IP3> <VM3>
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 vi rekommenderar inte att du exponerar den virtuella datorn för externa nätverk.
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.
Skapa Pacemaker-klustret
I det här avsnittet aktiverar och startar du pcsd-tjänsten och konfigurerar sedan klustret. För SQL Server i Linux skapas inte klusterresurserna automatiskt. Du måste aktivera och skapa Pacemaker-resurserna manuellt. Mer information finns i artikeln om hur du konfigurerar en redundansklusterinstans för RHEL.
Aktivera och starta pcsd-tjänsten och Pacemaker
Kör kommandona på alla noder. Med de här kommandona kan noderna återansluta till klustret när varje nod har startats om.
sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemaker
Ta bort alla befintliga klusterkonfigurationer från alla noder. Kör följande kommando:
sudo pcs cluster destroy sudo systemctl enable pacemaker
På den primära noden kör du följande kommandon för att konfigurera klustret.
- När du kör
pcs cluster auth
kommandot för att autentisera klusternoderna uppmanas du att ange ett lösenord. Ange lösenordet för den hacluster-användare som skapades tidigare.
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 --all
RHEL8
För RHEL 8 måste du autentisera noderna separat. Ange användarnamnet och lösenordet för hacluster manuellt när du uppmanas att göra det.
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
- När du kör
Kör följande kommando för att kontrollera att alla noder är online.
sudo pcs status
RHEL 7
Om alla noder är online visas utdata som liknar följande exempel:
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/enabled
RHEL 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/enabled
Ange förväntade röster i liveklustret till 3. Det här kommandot påverkar bara det aktiva klustret och ändrar inte konfigurationsfilerna.
På alla noder anger du de förväntade rösterna med följande kommando:
sudo pcs quorum expected-votes 3
Konfigurera fäktningsagenten
För att konfigurera en stängselagent ändras följande instruktioner för den här handledningen. Mer information finns i skapa en STONITH-enhet.
Kontrollera versionen av Azure Fence Agent för att se till att den uppdateras. Använd följande kommando:
sudo yum info fence-agents-azure-arm
Du bör se ett resultat som liknar exemplet nedan.
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.
Registrera ett 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 följande steg) för tjänstens huvudkonto.
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 serviceprincipalen
Tilldela den anpassade roll Linux Fence Agent Role-<username>
som skapades i det senaste steget till tjänstens huvudnamn. Använd inte rollen Ägare längre.
- 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 en rolltilldelning
- Välj rollen
Linux Fence Agent Role-<username>
i listan Roll - I listan Välj anger du namnet på det program som du skapade tidigare.
<resourceGroupName>-app
- Välj Spara
- Upprepa de här stegen för alla klusternoder.
Skapa STONITH-enheterna
Kör följande kommandon på nod 1:
-
<ApplicationID>
Ersätt med ID-värdet från programregistreringen. -
<password>
Ersätt med värdet från klienthemligheten. - Ersätt
<resourceGroupName>
med resursgruppen från din prenumeration som används i denna handledning. - Ersätt
<tenantID>
och<subscriptionId>
från din Azure-prenumeration.
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
Eftersom vi redan har lagt till en regel i brandväggen för att tillåta HA-tjänsten (--add-service=high-availability
) behöver du inte öppna följande brandväggsportar på alla noder: 2224, 3121, 21064, 5405. Men om du har någon typ av anslutningsproblem med HA använder du följande kommando för att öppna dessa portar som är associerade med HA.
Tips/Råd
Du kan också lägga till alla portar i den här självstudien samtidigt för att spara lite tid. De portar som måste öppnas förklaras i relevanta avsnitt som följer. Om du vill lägga till alla portar nu lägger du till ytterligare portar: 1433 och 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
Installera SQL Server och mssql-tools
Anmärkning
Om du har skapat de virtuella datorerna med SQL Server 2019 (15.x) förinstallerat på RHEL8-HA kan du hoppa över stegen nedan för att installera SQL Server och mssql-tools och starta avsnittet Konfigurera en tillgänglighetsgrupp när du har konfigurerat sa-lösenordet på alla virtuella datorer genom att köra kommandot sudo /opt/mssql/bin/mssql-conf set-sa-password
på alla virtuella datorer.
Använd avsnittet nedan för att installera SQL Server och mssql-tools på de virtuella datorerna. Du kan välja något av exemplen nedan för att installera SQL Server 2017 (14.x) på RHEL 7 eller SQL Server 2019 (15.x) på RHEL 8. Utför var och en av dessa åtgärder på alla noder. Mer information finns i Installera SQL Server på en virtuell Red Hat-dator.
Installera SQL Server på de virtuella datorerna
Följande kommandon används för att installera SQL Server:
RHEL 7 med 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 med 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
Öppna brandväggsport 1433 för fjärranslutningar
Du måste öppna port 1433 på den virtuella datorn för att kunna ansluta via fjärranslutning. Använd följande kommandon för att öppna port 1433 i brandväggen för varje virtuell dator:
sudo firewall-cmd --zone=public --add-port=1433/tcp --permanent
sudo firewall-cmd --reload
Installera kommandoradsverktyg för SQL Server
Följande kommandon används för att installera SQL Server-kommandoradsverktyg. Mer information finns i installera kommandoradsverktygen för SQL Server.
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
Anmärkning
Lägg till /opt/mssql-tools/bin/ i path-miljövariabeln för enkelhetens skull. 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
Kontrollera status för SQL Server
När du är klar med konfigurationen kan du kontrollera statusen för SQL Server och kontrollera att den körs:
systemctl status mssql-server --no-pager
Du bör se följande utdata:
● 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
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 AlwaysOn-tillgänglighetsgrupper och starta om mssql-server
Aktivera AlwaysOn-tillgänglighetsgrupper på varje nod som är värd för en SQL Server-instans. Starta sedan om mssql-server. Kör följande skript:
sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
sudo systemctl restart mssql-server
Skapa ett certifikat
Vi stöder för närvarande inte AD-autentisering till AG-slutpunkten. Därför måste vi 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
<password>
med ditt eget lösenord.
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON); GO CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
- Ersätt
Anslut till den primära repliken med SSMS eller sqlcmd. Följande kommandon skapar ett certifikat på
/var/opt/mssql/data/dbm_certificate.cer
och en privat nyckel påvar/opt/mssql/data/dbm_certificate.pvk
din primära SQL Server-replik:- Ersätt
<password>
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 = '<password>' ); 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>
och<VM2>
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 bara körasudo
kommandot framför varje kommando som vi gjorde tidigare i den här självstudien.# The below command allows you to run commands in the root environment sudo -i
scp /var/opt/mssql/data/dbm_certificate.* <username>@<VM2>:/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 = '<password>' ); 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 namn på tillgänglighetsgrupp. - Ersätt värdena
<VM1>
,<VM2>
och<VM3>
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'<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
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 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
För att kunna ansluta de sekundära replikerna till AG måste du öppna port 5022 på brandväggen för alla servrar. Kör följande kommando i SSH-sessionen:
sudo firewall-cmd --zone=public --add-port=5022/tcp --permanent sudo firewall-cmd --reload
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
Vi följer artikeln konfigurera tillgänglighetsgrupp om hur man lägger till en databas.
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;
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
Vi följer guiden för att 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.
Skapa AG-klusterresursen
Använd något av följande kommandon baserat på den miljö som valdes tidigare för att skapa resursen
ag_cluster
i tillgänglighetsgruppenag1
.RHEL 7
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s master notify=true
RHEL 8
sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=30s promotable notify=true
Kontrollera att dina resurser är online innan du fortsätter med följande kommando:
sudo pcs resource
Du bör se följande utdata:
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)
Skapa en virtuell IP-resurs
Använd en tillgänglig statisk IP-adress från nätverket för att skapa en virtuell IP-resurs. Du hittar en med hjälp av kommandoverktyget
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.
Ange egenskapen stonith-enabled till false:
sudo pcs property set stonith-enabled=false
Skapa den virtuella IP-resursen med hjälp av följande kommando. Ersätt
<availableIP>
med en oanvänd IP-adress.sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<availableIP>
Lägg till begränsningar
För att säkerställa att IP-adressen och tillgänglighetsgruppens resurs körs på samma nod måste en samlokaliseringsbegränsning konfigureras. Kör följande kommando:
RHEL 7
sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master
RHEL 8
sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master
Skapa en beställningsbegränsning för att säkerställa att AG-resursen är uppe och fungerar före IP-adressen. Även om samlokaliseringsbegränsningen innebär en ordningsbegränsning, framtvingar detta den.
RHEL 7
sudo pcs constraint order promote ag_cluster-master then start virtualip
RHEL 8
sudo pcs constraint order promote ag_cluster-clone then start virtualip
Kontrollera begränsningarna genom att köra följande kommando:
sudo pcs constraint list --full
Du bör se följande utdata:
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:
Återaktivera stonith
Vi är redo för testning. Återaktivera stonith i klustret genom att köra följande kommando på Nod 1:
sudo pcs property set stonith-enabled=true
Kontrollera klusterstatus
Du kan kontrollera statusen för dina klusterresurser med hjälp av följande kommando:
[<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
Testa övergång till reservsystem
För att säkerställa att konfigurationen har lyckats hittills testar vi en redundansväxling. För mer information, se Always On-tillgänglighetsgrupp failover i Linux.
Kör följande kommando för att manuellt byta över den primära repliken till
<VM2>
. Ersätt<VM2>
med värdet för servernamnet.RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master
RHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master
Du kan också ange ytterligare ett alternativ så att den tillfälliga begränsning som skapades för att flytta resursen till en önskad nod inaktiveras automatiskt och du inte behöver utföra steg 2 och 3 i följande instruktioner.
RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master lifetime=30S
RHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master lifetime=30S
Ett annat alternativ för att automatisera steg 2 och 3, som rensar den tillfälliga begränsningen i själva resursflyttkommandot, är att kombinera flera kommandon på en enda rad.
RHEL 7
sudo pcs resource move ag_cluster-master <VM2> --master && sleep 30 && pcs resource clear ag_cluster-master
RHEL 8
sudo pcs resource move ag_cluster-clone <VM2> --master && sleep 30 && pcs resource clear ag_cluster-clone
Om du kontrollerar dina begränsningar igen ser du att en annan begränsning har lagts till på grund av den manuella redundansväxlingen:
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:
Ta bort villkoret med ID
cli-prefer-ag_cluster-master
med hjälp av följande kommando:RHEL 7
sudo pcs constraint remove cli-prefer-ag_cluster-master
RHEL 8
sudo pcs constraint remove cli-prefer-ag_cluster-clone
Kontrollera dina klusterresurser med kommandot
sudo pcs resource
och du bör se att den primära instansen nu<VM2>
är .[<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>
Fäktningstest
Du kan testa fäktning genom att köra följande kommando. Prova att köra kommandot nedan från <VM1>
för <VM3>
.
sudo pcs stonith fence <VM3> --debug
Anmärkning
Som standard tar avgränsning/säkerhetsåtgärden först bort noden och sedan aktiverar den igen. Om du bara vill koppla från noden använder du alternativet --off
i kommandot .
Du bör få följande utdata:
[<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
Mer information om hur du testar en stängselenhet finns i följande Red Hat-artikel .