In dieser Anleitung wird beschrieben, wie Sie ein Microsoft SQL Server-Datenbanksystem unter Linux mit einer Always On-Verfügbarkeitsgruppe (AOAG) und Pacemaker als Hochverfügbarkeitslösung und DR-Lösung bereitstellen können. Im Rahmen dieses Dokuments ist ein Notfall ein Ereignis, bei dem eine primäre Datenbank ausfällt bzw. unzulänglich wird.
Eine primäre Datenbank kann ausfallen, wenn die Region, in der sie sich befindet, ausfällt bzw. unzugänglich wird. Selbst wenn eine Region verfügbar ist und ordnungsgemäß funktioniert, kann eine primäre Datenbank aufgrund eines Systemfehlers ausfallen. In diesen Fällen besteht die Notfallwiederherstellung darin, Clients zur weiteren Verarbeitung eine sekundäre Datenbank zur Verfügung zu stellen.
Diese Anleitung richtet sich an Datenbankarchitekten, Administratoren und Entwickler.
Lernziele
- SQL Server unter Linux bereitstellen
- Always On-Verfügbarkeitsgruppe für Hochverfügbarkeit und Notfallwiederherstellung erstellen
- Pacemaker installieren und konfigurieren, um das Failover des SQL Server-Clusters zu verwalten
- Load-Balancer konfigurieren, um Traffic mit SQL Server an Ihre Verfügbarkeitsgruppe weiterzuleiten
- Richten Sie einen STONITH-Zaun (Shoot The Other Node In The Head) ein, um die HA-Integrität zu gewährleisten.
- Failover-Test durchführen, um sicherzustellen, dass der SQL Server-Cluster wie erwartet funktioniert
Kosten
In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:
Sie können mithilfe des Preisrechners eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.
Hinweise
Für diese Anleitung benötigen Sie ein Google Cloud-Projekt. Sie können ein neues Projekt erstellen oder ein vorhandenes Projekt auswählen:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Achten Sie darauf, dass die NetApp Cloud Volumes API für Ihr Google Cloud-Projekt aktiviert ist.
-
In the Google Cloud console, activate Cloud Shell.
Projekt und Netzwerk vorbereiten
So bereiten Sie Ihr Google Cloud-Projekt und Ihre VPC für die Bereitstellung von SQL Server AlwaysOn-Verfügbarkeitsgruppen vor:
Öffnen Sie Cloud Shell in der Google Cloud Console. Klicken Sie hierzu auf die Schaltfläche Cloud Shell aktivieren .
Legen Sie Ihre standardmäßige Projekt-ID fest:
gcloud config set project
PROJECT_ID
Ersetzen Sie
PROJECT_ID
durch die ID Ihres Google Cloud-Projekts.Legen Sie Ihre Standardregion fest:
gcloud config set compute/region
REGION
Ersetzen Sie
REGION
durch die ID der Region, in der die Bereitstellung erfolgen soll.Legen Sie Ihre Standardzone fest:
gcloud config set compute/zone
ZONE
Ersetzen Sie
ZONE
durch die ID der Zone, in der die Bereitstellung erfolgen soll. Es sollte eine gültige Zone in der im vorherigen Schritt angegebenen Region sein.
Linux-VMs erstellen
Um Hochverfügbarkeit und Quorum für den SQL Server-Cluster zu erreichen, stellen Sie drei virtuelle Linux-Maschinen (VMs) bereit, auf denen der SQL Server-Cluster gehostet wird.
Initialisieren Sie die folgenden Variablen:
PD_SIZE=30 MACHINE_TYPE=n2-standard-8
Erstellen Sie die Linux-VMs:
gcloud compute instances create node-1 \ --project=
PROJECT_ID
\ --zoneREGION
-a \ --machine-type $MACHINE_TYPE \ --subnetSUBNET_NAME
\ --create-disk=auto-delete=yes,boot=yes,device-name=node-1,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20240426,mode=rw,size=$PD_SIZE,type=projects/PROJECT_ID
/zones/ZONE
/diskTypes/pd-balanced \ --scopes=https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/devstorage.read_write gcloud compute instances create node-2 \ --project=PROJECT_ID
\ --zoneREGION
-b \ --machine-type $MACHINE_TYPE \ --subnetSUBNET_NAME
\ --create-disk=auto-delete=yes,boot=yes,device-name=node-2,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20240426,mode=rw,size=$PD_SIZE,type=projects/PROJECT_ID
/zones/ZONE
/diskTypes/pd-balanced \ --scopes=https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/devstorage.read_write gcloud compute instances create node-3 \ --project=PROJECT_ID
\ --zoneREGION
-c \ --machine-type $MACHINE_TYPE \ --subnetSUBNET_NAME
\ --create-disk=auto-delete=yes,boot=yes,device-name=node-3,image=projects/ubuntu-os-cloud/global/images/ubuntu-2004-focal-v20240426,mode=rw,size=$PD_SIZE,type=projects/PROJECT_ID
/zones/ZONE
/diskTypes/pd-balanced \ --scopes=https://www.googleapis.com/auth/compute,https://www.googleapis.com/auth/servicecontrol,https://www.googleapis.com/auth/service.management.readonly,https://www.googleapis.com/auth/logging.write,https://www.googleapis.com/auth/monitoring.write,https://www.googleapis.com/auth/trace.append,https://www.googleapis.com/auth/devstorage.read_writeErsetzen Sie das Subnetz
SUBNET_NAME
durch den Namen Ihres VPC-Subnetzes.Aktualisieren Sie die Datei „hosts“ auf
node-1
,node-2
undnode-3
:- Stellen Sie eine SSH-Verbindung zu den einzelnen VMs her. Weitere Informationen finden Sie in der Dokumentation zu „Mit Linux-VMs verbinden“.
Öffnen Sie die Hostdatei zur Bearbeitung.
sudo vi /etc/hosts
Suchen Sie die interne IP-Adresse für jede Linux-VM und hängen Sie die Hosteinträge an das Ende der Datei an.
NODE1_INTERNAL_IP
node-1NODE2_INTERNAL_IP
node-2NODE3_INTERNAL_IP
node-3Ersetzen Sie
NODE1_INTERNAL_IP
,NODE2_INTERNAL_IP
undNODE3_INTERNAL_IP
durch die interne IP-Adresse jeder Linux-VM.
Prüfen Sie die Kommunikation zwischen Ihren VMs. Alle VMs, die zur Always On-Verfügbarkeitsgruppe gehören, müssen mit anderen VMs kommunizieren können:
Kehren Sie zu jeder Linux-VM zurück, führen Sie die Befehle von jeder VM aus und prüfen Sie, ob alle VMs miteinander kommunizieren können.
ping -c 4 node-1 ping -c 4 node-2 ping -c 4 node-3
SQL Server installieren und konfigurieren
Laden Sie die SQL Server-Engine auf die drei Linux-VMs herunter, die Teil der Always On-Verfügbarkeitsgruppe sind, und installieren und konfigurieren Sie sie.
Stellen Sie eine SSH-Verbindung zu
node-1
,node-2
undnode-3
her und führen Sie die folgenden Schritte aus:Importieren Sie die öffentlichen Repository-Schlüssel.
wget -qO- https://packages.microsoft.com/keys/microsoft.asc \ | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
Registrieren Sie das SQL Server-Ubuntu-Repository.
sudo add-apt-repository \ "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-2019.list)"
Aktualisieren Sie die Paketindexdateien und installieren Sie SQL Server.
sudo apt-get update sudo apt-get install -y mssql-server
Konfigurieren Sie SQL Server:
Führen Sie das Tool mssql-conf aus.
sudo /opt/mssql/bin/mssql-conf setup
Wählen Sie die Entwicklerversion für die SQL Server-Version aus und akzeptieren Sie die Lizenzvereinbarung.
Die Developer-Edition enthält alle Unternehmensfunktionen. Sie können sie jedoch nur für Nicht-Produktionsumgebungen verwenden. Weitere Informationen zu SQL Server-Versionen und Microsoft-Lizenzen finden Sie hier.
Geben Sie ein Passwort für das SA-Konto an.
Prüfen Sie, ob der
mssql-server
-Dienst ausgeführt wird:systemctl status mssql-server --no-pager
Wenn Sie auf Ihren VMs eine Firewall aktiviert haben, öffnen Sie die Firewall für SQL Server:
Prüfen Sie mit dem folgenden Befehl, ob
Uncomplicated Firewall
installiert und aktiviert ist.sudo ufw status
Wenn der Status aktiv ist, führen Sie die folgenden Befehle aus, um die Ports zu öffnen.
sudo ufw allow 1433 sudo ufw allow 5022 sudo ufw reload
Mit SQL Server verbinden
Jetzt ist SQL Server installiert. Erstellen Sie zum Herstellen einer Verbindung eine Windows-Maschine in derselben VPC und installieren Sie SQL Server Management Studio (SSMS), um eine Verbindung zu Ihrer neu erstellten SQL Server-Instanz auf Ihren VMs herzustellen:
Erstellen Sie eine Windows-VM:
Kehren Sie zu Cloud Shell zurück und führen Sie den folgenden Befehl aus.
gcloud compute instances create node4 \ --project=
PROJECT_ID
\ --zoneZONE
\ --subnetSUBNET_NAME
\ --machine-type=n2-standard-4 \ --create-disk=auto-delete=yes,boot=yes,device-name=node4,image=projects/windows-cloud/global/images/windows-server-2022-dc-v20240415,mode=rw,size=50,type=projects/p3rf-sqlserver/zones/ZONE
/diskTypes/pd-balanced
Stellen Sie über Remote Desktop eine Verbindung zur Windows-VM auf
node-4
her:Aktualisieren Sie die Hostdatei auf
node-4
:- Öffnen Sie den Notizblock im Administratormodus.
Klicken Sie auf File > Open (Datei > Öffnen) und öffnen Sie die Hostdatei.
c:\Windows\System32\drivers\etc\hosts
Hängen Sie die Hosteinträge an das Ende der Datei an.
NODE1_INTERNAL_IP
node-1NODE2_INTERNAL_IP
node-2NODE3_INTERNAL_IP
node-3Ersetzen Sie
NODE1_INTERNAL_IP
,NODE2_INTERNAL_IP
undNODE3_INTERNAL_IP
durch die entsprechende interne IP-Adresse jeder VM.Speichern Sie den Code und schließen Sie den Editor.
Prüfen Sie die Verbindung zu den Linux-VMs:
- Stellen Sie eine Verbindung zur Windows-VM auf
node-4
her - Klicken Sie auf Start und geben Sie "powershell" in die Suchleiste ein.
- Klicken Sie, um die Windows PowerShell ISE-App zu öffnen.
Testet die Verbindung durch Ausführen der folgenden Befehle.
ping node-1 ping node-2 ping node-3
- Stellen Sie eine Verbindung zur Windows-VM auf
Installieren Sie Microsoft SQL Server Management Studio (SSMS) mithilfe der folgenden Schritte:
Stellen Sie über Remote Desktop eine Verbindung zur Windows-VM auf
node-4
her.Minimieren Sie in Ihrer RDP-Sitzung alle Fenster und starten Sie die Windows PowerShell ISE-Anwendung.
Laden Sie in der PowerShell-Eingabeaufforderung das SSMS-Installationsprogramm herunter und führen Sie es aus:
Start-BitsTransfer ` -Source "https://aka.ms/ssmsfullsetup" ` -Destination "$env:Temp\ssms-setup.exe" & $env:Temp\ssms-setup.exe
Klicken Sie im SSMS-Installationsprogramm auf Installieren.
Akzeptieren Sie die Aufforderung, Änderungen zuzulassen.
Klicken Sie nach Abschluss der Installation auf Neu starten, um den Remotecomputer neu zu starten. Dadurch wird die RDP-Sitzung beendet.
Stellen Sie eine Verbindung zur SQL Server-Instanz auf node-1 her:
Kehren Sie mit RDP zur VM
node-4
zurück.Öffnen Sie SSMS und stellen Sie mit den folgenden Parametern eine Verbindung zu
node-1
her.Server name: node-1 Authentication: SQL Server Authentication Login: sa
Weitere Informationen finden Sie in der Dokumentation zu SQL Server Management Studio unter Verbindung zu einer SQL Server-Instanz herstellen.
Geben Sie das Passwort für das SA-Konto ein, das während der Installation erstellt wurde.
Wählen Sie Serverzertifikat vertrauen aus.
Klicken Sie auf Verbinden.
Always On-Verfügbarkeitsgruppe aktivieren
Unter Linux müssen Sie zuerst eine Verfügbarkeitsgruppe erstellen, bevor Sie sie als Ressource hinzufügen können, die von Pacemaker verwaltet werden soll:
Aktivieren Sie die Funktion „Always On-Verfügbarkeitsgruppe“ für jede SQL Server-Instanz, die zur Verfügbarkeitsgruppe gehört. Führen Sie für
node-1
,node-2
undnode-3
die folgenden Befehle aus:sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 sudo systemctl restart mssql-server
Stellen Sie über SSMS eine Verbindung zu der Instanz her, die der primäre Host in der Verfügbarkeitsgruppe ist:
Öffnen Sie ein neues Abfragefenster.
Führen Sie das folgende Code-Snippet aus, um einen Verschlüsselungsschlüssel, ein Zertifikat und einen privaten Schlüssel zu erstellen.
USE MASTER; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '
ENCRYPTION_KEY_PASSWORD
'; CREATE CERTIFICATE my_ag_certificate WITH SUBJECT = 'my_ag_cert'; BACKUP CERTIFICATE my_ag_certificate TO FILE = '/var/opt/mssql/data/my_ag_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/my_ag_certificate.pvk', ENCRYPTION BY PASSWORD = 'PRIVATE_KEY_PASSWORD
' );Ersetzen Sie
ENCRYPTION_KEY_PASSWORD
undPRIVATE_KEY_PASSWORD
durch die Passwörter für den Verschlüsselungsschlüssel und den privaten Schlüssel.
Zertifikat und Schlüsseldateien übertragen
Die in den vorherigen Schritten erstellten Zertifikat- und Schlüsseldateien müssen auf die sekundären Knoten von SQL Server verschoben werden. Es gibt mehrere Methoden, um das Zertifikat und die Schlüsseldateien auf die sekundären Knoten von node-2
und node-3
zu verschieben.
Weitere Übertragungsoptionen finden Sie unter Dateien an Linux-VMs übertragen.
Zertifikat- und Schlüsseldateien mit Cloud Storage übertragen
Erstellen Sie einen Cloud Storage, um Dateien vom primären zu den sekundären Clusterknoten zu übertragen.
Erstellen Sie einen Cloud Storage-Bucket:
Kehren Sie zu Cloud Shell zurück und führen Sie den folgenden Befehl aus:
gcloud storage buckets create gs://
BUCKET_NAME
\ --project=PROJECT_ID
\ --location=REGION
\ --public-access-preventionErsetzen Sie dabei
BUCKET_NAME
durch den Namen des zu erstellenden Buckets. Ersetzen SiePROJECT_ID
durch die ID Ihres Google Cloud-Projekts undREGION
durch die ID der Region, in der der Bucket bereitgestellt werden soll.
Weitere Informationen finden Sie unter Buckets erstellen.
Kehren Sie für
node-1
,node-2
undnode-3
zum SSh zurück, um die Google Cloud CLI zu initialisieren:Führen Sie den folgenden Befehl aus, um die Google Cloud CLI zu initialisieren:
gcloud init
Wählen Sie
option [1]
aus, um das vorinstallierte Dienstkonto zu verwenden.Geben Sie den Namen Ihres Projekts ein.
Geben Sie
n
in die Frage ein, um die Standardregion und -zone einzurichten.
Kehren Sie zu
node-1
zurück, um die Dateien in Cloud Storage zu kopieren:Laden Sie die beiden neu erstellten Dateien in Cloud Storage hoch. Deaktivieren Sie dazu die folgenden Befehle.
sudo gsutil cp /var/opt/mssql/data/my_ag_certificate.cer gs://
BUCKET_NAME
/ sudo gsutil cp /var/opt/mssql/data/my_ag_certificate.pvk gs://BUCKET_NAME
/Ersetzen Sie dabei
BUCKET_NAME
durch den Namen des erstellten Buckets.
Kehren Sie zu
node-2
undnode-3
zurück, um die Dateien aus Cloud Storage zu kopieren:Laden Sie die beiden Dateien aus Cloud Storage in
node-2
herunter.sudo gsutil cp gs://
BUCKET_NAME
/my_ag_certificate.cer /var/opt/mssql/data/ sudo gsutil cp gs://BUCKET_NAME
/my_ag_certificate.pvk /var/opt/mssql/data/Ersetzen Sie dabei
BUCKET_NAME
durch den Namen des erstellten Buckets.Ändern Sie die Eigentümerschaft der Dateien auf
node-2
undnode-3
, indem Sie den Befehl in einer Root-Shell ausführen.chown mssql:mssql /var/opt/mssql/data/my_ag_certificate.* chmod 660 /var/opt/mssql/data/my_ag_certificate.*
Endpunkt für die Datenbankspiegelung einrichten
In diesem Abschnitt erstellen Sie den Datenbankendpunkt mithilfe eines Verschlüsselungsschlüssels und eines Zertifikats, die von jedem Knoten im SQL Server-Cluster gemeinsam genutzt werden, um eine sichere Datenreplikation zu gewährleisten.
Kehren Sie zur Windows-VM auf
node-4
zurück, um die Endpunkte für die Datenbankspiegelung zu erstellen:Stellen Sie über SSMS eine Verbindung zu den SQL Server-Datenbanken auf
node-1
,node-2
undnode-3
her. Führen Sie die Schritte unter Verbindung zu SQL Server herstellen aus. Verwenden Sie dabeinode-1
,node-2
undnode-3
als Servernamen und die entsprechenden Passwörter, die Sie für das SA-Konto festgelegt haben.Erstellen Sie das Zertifikat aus den kopierten Dateien auf den sekundären VMs
node-2
undnode-3
. Verwenden Sie die Passwörter, die Sie beim Erstellen des Zertifikats und des Schlüssels auf dem primären Knoten angegeben haben.USE MASTER; CREATE MASTER KEY ENCRYPTION BY PASSWORD = '
ENCRYPTION_KEY_PASSWORD
'; CREATE CERTIFICATE my_ag_certificate FROM FILE = '/var/opt/mssql/data/my_ag_certificate.cer' WITH PRIVATE KEY ( FILE = '/var/opt/mssql/data/my_ag_certificate.pvk', DECRYPTION BY PASSWORD = 'PRIVATE_KEY_PASSWORD
' );Ersetzen Sie
ENCRYPTION_KEY_PASSWORD
undPRIVATE_KEY_PASSWORD
durch die Passwörter für den Verschlüsselungsschlüssel und den privaten Schlüssel.Kehren Sie zu SSMS zurück, um Endpunkte für die Datenbankspiegelung zu erstellen. Führen Sie dazu den T-SQL-Befehl für
node-1
,node-2
undnode-3
aus.CREATE ENDPOINT [my_ag_endpoint] AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING ( ROLE = ALL, AUTHENTICATION = CERTIFICATE my_ag_certificate, ENCRYPTION = REQUIRED ALGORITHM AES ); ALTER ENDPOINT [my_ag_endpoint] STATE = STARTED;
Always On-Verfügbarkeitsgruppe erstellen und konfigurieren
Erstellen Sie als Nächstes die immer aktive SQL Server-Verfügbarkeitsgruppe mithilfe von SQL Server Management Studio und verwenden Sie die zuvor erstellten Endpunkte für die Replikation.
Kehren Sie zur Windows-VM zurück und öffnen Sie SSMS:
- Stellen Sie eine Verbindung zum SQL Server-Datenbankmodul auf
node-1
her und öffnen Sie ein neues Abfragefenster.
- Stellen Sie eine Verbindung zum SQL Server-Datenbankmodul auf
Erstellen Sie eine Datenbank und sichern Sie sie zur Vorbereitung auf die Replikation:
USE MASTER; CREATE DATABASE [bookshelf]; ALTER DATABASE [bookshelf] SET RECOVERY FULL; BACKUP DATABASE [bookshelf] TO DISK = N'/var/opt/mssql/data/bookshelf.bak';
Erstellen Sie die Always On-Verfügbarkeitsgruppe:
Führen Sie den folgenden T-SQL-Befehl in SSMS für
node-1
,node-2
undnode-3
aus. Dadurch wird sichergestellt, dass die Endpunkte aktiviert und SQL Server auf jedem Knoten für die Datenreplikation bereit ist.IF (SELECT state FROM sys.endpoints WHERE name = N'my_ag_endpoint') <> 0 BEGIN ALTER ENDPOINT [my_ag_endpoint] STATE = STARTED END GO IF EXISTS(SELECT * FROM sys.server_event_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER WITH (STARTUP_STATE=ON); END IF NOT EXISTS(SELECT * FROM sys.dm_xe_sessions WHERE name='AlwaysOn_health') BEGIN ALTER EVENT SESSION [AlwaysOn_health] ON SERVER STATE=START; END GO
Führen Sie den folgenden T-SQL-Befehl in
node-1
aus, um die AOAG zu erstellen.USE [master] GO CREATE AVAILABILITY GROUP [aoag1] WITH ( AUTOMATED_BACKUP_PREFERENCE = SECONDARY, DB_FAILOVER = OFF, DTC_SUPPORT = NONE, CLUSTER_TYPE = EXTERNAL, REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = 0 ) FOR DATABASE [bookshelf] REPLICA ON N'node-1' WITH ( ENDPOINT_URL = N'TCP://node-1:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)), N'node-2' WITH (ENDPOINT_URL = N'TCP://node-2:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)), N'node-3' WITH (ENDPOINT_URL = N'TCP://node-3:5022', FAILOVER_MODE = EXTERNAL, AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = NO) ); GO
Führen Sie den folgenden T-SQL-Befehl für
node-2
undnode-3
für jede SQL Server-Instanz aus, um der neuen Verfügbarkeitsgruppe beizutreten.ALTER AVAILABILITY GROUP [aoag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL); GO ALTER AVAILABILITY GROUP [aoag1] GRANT CREATE ANY DATABASE; GO
Sie haben eine neue Datenbank mit dem Namen Bücherregal erstellt und die neue Datenbank einer neuen Verfügbarkeitsgruppe mit dem Namen aoag1 auf der SQL Server-Instanz hinzugefügt, die auf
node-1
ausgeführt wird.Node-2
undnode-3
wurden zur Verfügbarkeitsgruppe hinzugefügt und die Daten in der bookshelf-Datenbank werden synchron über die SQL Server-Instanzen in allen drei Knoten repliziert.
Pacemaker installieren und konfigurieren
Pacemaker ist eine Open-Source-Software für Hochverfügbarkeitsressourcen, die mit der Cluster-Engine Corosync verwendet wird. In diesem Abschnitt installieren und konfigurieren Sie Pacemaker auf jeder Ihrer VMs.
SQL Server-Anmeldung für den Pacemaker-Clustermanager erstellen
In diesem Abschnitt erstellen Sie ein neues SQL Server-Konto für Pacemaker, mit dem Sie sich bei jeder SQL Server-Instanz anmelden und die Verfügbarkeitsgruppe verwalten können.
Führen Sie den folgenden T-SQL-Befehl für
node-1
,node-2
undnode-3
aus:USE [master]; CREATE LOGIN [pacemaker] with PASSWORD= N'
PACEMAKER_LOGIN_PASSWORD
'; GOErsetzen Sie
PACEMAKER_LOGIN_PASSWORD
durch ein Passwort für das Pacemaker-Konto.Führen Sie den T-SQL-Befehl aus, um der Verfügbarkeitsgruppe Anmeldeberechtigungen für den Pacemaker zu gewähren:
GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::[aoag1] TO [pacemaker]; GRANT VIEW SERVER STATE TO [pacemaker]; GO
Kehren Sie zu SSH auf
node-1
,node-2
undnode-3
zurück, um die Befehle zum Speichern der Pacemaker-Anmeldung und des Passworts im Ordner "SQL Server-Secrets" auszuführen:echo 'pacemaker' >> ~/pacemaker-passwd echo '
PACEMAKER_LOGIN_PASSWORD
' >> ~/pacemaker-passwd sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 400 /var/opt/mssql/secrets/passwdErsetzen Sie
PACEMAKER_LOGIN_PASSWORD
durch das Passwort für das Pacemaker-Konto.
Pacemaker installieren
Installieren Sie als Nächstes Pacemaker und richten Sie auf allen Linux-VMs ein Anmeldekonto für die Ressourcenverwaltung ein.
Öffnen Sie Firewallports für Pacemaker:
Prüfen Sie, ob
Uncomplicated Firewall
installiert und aktiviert ist. Führen Sie dazu den folgenden Befehl fürnode-1
,node-2
undnode-3
aus.sudo ufw status
Wenn ufw aktiviert ist, öffnen Sie die Firewallports auf
node-1
,node-2
undnode-3
.sudo ufw allow 2224/tcp sudo ufw allow 3121/tcp sudo ufw allow 5405/udp sudo ufw allow 21064/tcp sudo ufw allow 1433/tcp sudo ufw allow 5022/tcp sudo ufw reload
Installieren Sie Pacemaker auf
node-1
,node-2
undnode-3
:sudo apt-get install -y pacemaker pacemaker-cli-utils crmsh resource-agents fence-agents corosync python3-azure pcs
Legen Sie ein neues Passwort für den Nutzer
hacluster
aufnode-1
,node-2
undnode-3
fest:sudo passwd hacluster
Corosync einrichten
Als Nächstes konfigurieren Sie Corosync, um die Clustermitgliedschaft und die Nachrichtenfunktion im gesamten Cluster zu verwalten.
Erstellen Sie einen Authentifizierungsschlüssel für Corosync auf
node-1
:sudo corosync-keygen
Ändern Sie die Corosync-Konfigurationsdatei:
Kehren Sie zu
node-1
zurück und ändern Sie die Dateicorosync.conf
.sudo vi /etc/corosync/corosync.conf
Aktualisieren Sie die markierten Bereiche. Nach der Bearbeitung sollte die Datei wie im folgenden Beispiel aussehen.
# Please read the corosync.conf.5 manual page totem { version: 2 # Corosync itself works without a cluster name, but DLM needs one. # The cluster name is also written into the VG metadata of newly # created shared LVM volume groups, if lvmlockd uses DLM locking. cluster_name: my_agcluster # crypto_cipher and crypto_hash: Used for mutual node authentication. # If you choose to enable this, then do remember to create a shared # secret with "corosync-keygen". # enabling crypto_cipher, requires also enabling of crypto_hash. # crypto works only with knet transport transport: udpu crypto_cipher: none crypto_hash: none } logging { # Log the source file and line where messages are being # generated. When in doubt, leave off. Potentially useful for # debugging. fileline: off # Log to standard error. When in doubt, set to yes. Useful when # running in the foreground (when invoking "corosync -f") to_stderr: yes # Log to a log file. When set to "no", the "logfile" option # must not be set. to_logfile: yes logfile: /var/log/corosync/corosync.log # Log to the system log daemon. When in doubt, set to yes. to_syslog: yes # Log debug messages (very verbose). When in doubt, leave off. debug: off # Log messages with time stamps. When in doubt, set to hires (or on) #timestamp: hires logger_subsys { subsys: QUORUM debug: off } } quorum { # Enable and configure quorum subsystem (default: off) # see also corosync.conf.5 and votequorum.5 provider: corosync_votequorum } nodelist { # Change/uncomment/add node sections to match cluster configuration node { # Hostname of the node name: node-1 # Cluster membership node identifier nodeid: 1 # Address of first link ring0_addr:
NODE1_INTERNAL_IP
# When knet transport is used it's possible to define up to 8 links #ring1_addr: 192.168.1.1 } node { name: node-2 nodeid: 2 ring0_addr:NODE2_INTERNAL_IP
} node { name: node-3 nodeid: 3 ring0_addr:NODE3_INTERNAL_IP
} # ... }Ersetzen Sie
NODE1_INTERNAL_IP
,NODE2_INTERNAL_IP
undNODE3_INTERNAL_IP
durch die internen IP-Adressen jedes Knotens.
Konfigurationsdateien mit Cloud Storage übertragen
Laden Sie den generierten Authentifizierungsschlüssel und die Corosync-Konfigurationsdateien aus
node-1
in Ihren Cloud Storage-Bucket hoch:sudo gsutil cp /etc/corosync/authkey gs://
BUCKET_NAME
/ sudo gsutil cp /etc/corosync/corosync.conf gs://BUCKET_NAME
/Ersetzen Sie
BUCKET_NAME
durch den Namen des zuvor erstellten Buckets.Laden Sie die Authkey- und Konfigurationsdateien in
node-2
undnode-3
herunter:sudo gsutil cp gs://
BUCKET_NAME
/authkey /etc/corosync/ sudo gsutil cp gs://BUCKET_NAME
/corosync.conf /etc/corosync/Ersetzen Sie
BUCKET_NAME
durch den Namen des Buckets, in den die Corosync-Konfigurationsdateien übertragen wurden.Aktualisieren Sie die Berechtigungen der Dateien für
node-2
undnode-3
:sudo chmod 400 /etc/corosync/authkey sudo chmod 400 /etc/corosync/corosync.conf
Clusterkommunikation neu starten und prüfen
Starten Sie die Pacemaker- und Corosync-Dienste auf
node-1
,node-2
undnode-3
neu:sudo systemctl restart pacemaker corosync
Bestätigen Sie den Status des Clusters, indem Sie den Befehl auf
node-1
ausführen:sudo crm status
Alle drei Knoten sollten online angezeigt werden.
Cluster einrichten
Als Nächstes richten Sie den Pacemaker-Cluster ein, indem Sie eine neue Ressource für die SQL Server-AlwaysOn-Verfügbarkeitsgruppe erstellen.
Führen Sie für
node-1
den folgenden Befehl aus, um die Clusterattribute festzulegen:sudo crm configure property stonith-enabled=false sudo crm configure property cluster-recheck-interval=2min sudo crm configure property start-failure-is-fatal=true
Weitere Informationen finden Sie unter Clusteroptionen.
Autorisieren Sie die Knoten im Cluster mit dem Befehl auf
node-1
. Verwenden Sie das zuvor für das Kontohacluster
festgelegte Passwort:sudo pcs cluster auth -u hacluster
Sie sollten sehen, dass alle drei Knoten autorisiert sind.
Installieren Sie den SQL Server-Ressourcen-Agent für die Integration in Pacemaker auf
node-1
,node-2
undnode-3
:sudo apt-get install mssql-server-ha
Kehren Sie zu
node-1
zurück und erstellen Sie eine Verfügbarkeitsgruppenressource im Cluster:Führen Sie den Clusterressourcen-Manager aus.
sudo crm
Geben Sie
configure
ein, um das Konfigurationsmenü zu öffnen.Geben Sie die folgende Konfiguration ein.
primitive aoag1-cluster \ ocf:mssql:ag \ params ag_name="aoag1" \ meta failure-timeout=60s \ op start timeout=60s \ op stop timeout=60s \ op promote timeout=60s \ op demote timeout=10s \ op monitor timeout=60s interval=10s \ op monitor timeout=60s on-fail=demote interval=11s role="Master" \ op monitor timeout=60s interval=12s role="Slave" \ op notify timeout=60s ms ms-ag1 aoag1-cluster \ meta master-max="1" master-node-max="1" clone-max="3" \ clone-node-max="1" notify="true"
Geben Sie
commit
ein, um die Änderungen zu übernehmen.Geben Sie
exit
ein, um den Clusterressourcenmanager zu beenden.Prüfen Sie die Konfiguration.
sudo crm status
Sie sollten sehen, dass
node-1
zum primären Knoten hochgestuft wurde.Node-2
undnode-3
sollten als sekundäre Knoten festgelegt werden.
Load-Balancer und Verfügbarkeitsgruppen-Listener einrichten
In diesem Abschnitt erstellen Sie eine virtuelle IP-Adresse und eine Systemdiagnose-Ressource im Cluster mithilfe eines internen Passthrough-TCP-Load-Balancers, der Traffic an die Verfügbarkeitsgruppe weiterleitet.
Kehren Sie zu Cloud Shell zurück und reservieren Sie eine statische IP-Adresse, die Sie als Cluster-IP-Adresse verwenden:
gcloud compute addresses create aoag1-cluster \ --region
REGION
\ --subnetSUBNET_NAME
CLUSTER_ADDRESS=$(gcloud compute addresses describe aoag1-cluster \ --region $(gcloud config get-value compute/region) \ --format=value\(address\)) && \ echo "Cluster IP address: $CLUSTER_ADDRESS"Ersetzen Sie
REGION
undSUBNET_NAME
durch die Region und das Subnetz, in denen die Linux-VMs bereitgestellt werden.Erstellen Sie nicht verwaltete Instanzgruppen für jeden Ihrer Clusterknoten und weisen Sie sie der neu erstellten Instanzgruppe zu. Führen Sie die folgenden Befehle in Cloud Shell aus:
gcloud compute instance-groups unmanaged create node-1-uig \ --zone=
REGION
-a gcloud compute instance-groups unmanaged add-instances node-1-uig \ --zone=REGION
-a \ --instances=node-1 gcloud compute instance-groups unmanaged create node-2-uig \ --zone=REGION
-b gcloud compute instance-groups unmanaged add-instances node-2-uig \ --zone=REGION
-b \ --instances=node-2 gcloud compute instance-groups unmanaged create node-3-uig \ --zone=REGION
-c gcloud compute instance-groups unmanaged add-instances node-3-uig \ --zone=REGION
-c \ --instances=node-3Ersetzen Sie
REGION
durch die Region, in der die Linux-VMs bereitgestellt sind.TCP-Systemdiagnose erstellen Load-Balancer ermitteln mithilfe von Systemdiagnosen, welche Back-End-Instanzen ordnungsgemäß auf den Traffic reagieren.
gcloud compute health-checks create tcp aoag1-healthcheck \ --port=
HEALTH_CHECK_PORT
--proxy-header=NONE \ --check-interval=10 --timeout=10 --unhealthy-threshold=2 \ --healthy-threshold=2Wählen Sie
HEALTH_CHECK_PORT
aus und ersetzen Sie ihn durch den Wert eines freien Ports im privaten Bereich 49152–65535 . Beispiel: 60000.Weitere Informationen finden Sie in der Übersicht über Systemdiagnosen.
Fügen Sie Ihren Clusterknoten Netzwerk-Tags hinzu. Das Netzwerk-Tag wird von der Firewallregel für die Systemdiagnose verwendet:
gcloud compute instances add-tags node-1 \ --tags
NETWORK_TAG_NAME
\ --zoneREGION
-a gcloud compute instances add-tags node-2 \ --tagsNETWORK_TAG_NAME
\ --zoneREGION
-b gcloud compute instances add-tags node-3 \ --tagsNETWORK_TAG_NAME
\ --zoneREGION
-cErsetzen Sie
NETWORK_TAG_NAME
durch einen Namen für den Netzwerk-Tag.Erstellen Sie eine Firewallregel, damit die Systemdiagnosen die Clusterknoten basierend auf dem Tag-Namen erreichen können:
gcloud compute firewall-rules create mssql-aoag1-fw-rule \ --network
VPC_NAME
\ --action ALLOW \ --direction INGRESS \ --source-ranges 35.191.0.0/16,130.211.0.0/22 \ --target-tagsNETWORK_TAG_NAME
\ --rules tcp:HEALTH_CHECK_PORT
Weitere Informationen finden sich unter Firewallregeln für Systemdiagnosen.
Erstellen Sie den Back-End-Dienst des Load-Balancers:
gcloud compute backend-services create aoag1-backend \ --load-balancing-scheme internal \ --health-checks aoag1-healthcheck \ --no-connection-drain-on-failover \ --drop-traffic-if-unhealthy \ --failover-ratio 1.0 \ --region
REGION
\ --global-health-checksFügen Sie dem Back-End-Dienst die drei nicht verwalteten Instanzgruppen hinzu:
gcloud compute backend-services add-backend aoag1-backend \ --instance-group node-1-uig \ --instance-group-zone
REGION
-a \ --regionREGION
gcloud compute backend-services add-backend aoag1-backend \ --instance-group node-2-uig \ --instance-group-zoneREGION
-b \ --failover \ --regionREGION
gcloud compute backend-services add-backend aoag1-backend \ --instance-group node-3-uig \ --instance-group-zoneREGION
-c \ --failover \ --regionREGION
Definieren Sie eine Weiterleitungsregel für den Load-Balancer. Mit einer Weiterleitungsregel werden das Protokoll und die Ports angegeben, über die der Load-Balancer den Traffic annimmt.
gcloud compute forwarding-rules create aoag1-fwd-rule \ --load-balancing-scheme internal \ --address
CLUSTER_ADDRESS
\ --subnetSUBNET_NAME
\ --regionREGION
\ --backend-service aoag1-backend \ --ports ALLErsetzen Sie
CLUSTER_ADDRESS
durch die zuvor reservierte IP-Adresse.Weitere Informationen finden Sie unter Weiterleitungsregeln.
Um die Einrichtung abzuschließen und zu testen, ob der Netzwerk-Load-Balancer richtig eingerichtet ist, installieren und konfigurieren Sie
HAProxy tcp listener
aufnode-1
,node-2
undnode-3
:Installieren Sie den HAProxy.
sudo apt-get install haproxy
Wählen Sie
Y
aus, um die Installation abzuschließen.Bearbeiten Sie die Datei
haproxy.cfg
.sudo vi /etc/haproxy/haproxy.cfg
Ändern Sie im Defaults-Abschnitt der
haproxy.cfg file
den Modus intcp
.Hängen Sie folgenden Abschnitt an das Ende der Datei
haproxy.cfg
an:#--------------------------------------------------------------- # Set up health check listener for SQL Server Availability Group #--------------------------------------------------------------- listen healthcheck bind *:
HEALTH_CHECK_PORT
Ersetzen Sie
HEALTH_CHECK_PORT
durch den zuvor ausgewählten Port der Systemdiagnose. Beispiel: 6000.Starten Sie den Dienst, um zu prüfen, ob er richtig konfiguriert ist:
sudo systemctl start haproxy.service sudo systemctl enable haproxy.service sudo systemctl restart haproxy.service
Öffnen Sie die Seite "Load-Balancing" und klicken Sie auf Ihren Load-Balancer. Beachten Sie, dass Ihre drei nicht verwalteten Instanzgruppen jetzt als fehlerfrei gemeldet werden sollten.
Alternativ können Sie den folgenden Befehl in Cloud Shell ausführen, um den Status des Back-End-Dienstes zu sehen.
gcloud compute backend-services get-health aoag1-backend \ --region
REGION
Ersetzen Sie
REGION
durch die Region, in der die Linux-VMs bereitgestellt sind.
Wenn alle drei nicht verwalteten Instanzgruppen als fehlerfrei gemeldet werden, fahren Sie mit dem nächsten Schritt fort.
sudo systemctl restart haproxy.service
Erstellen Sie die Systemdiagnoseressource in Pacemaker:
Stellen Sie eine SSH-Verbindung zu
node-1
her und erstellen Sie eine Systemdiagnose-Ressource für den HAProxy-Dienst in Ihrem Schrittmachercluster:sudo pcs resource create aoag1-healthcheck \ service:haproxy \ op monitor interval=10s timeout=20s
Prüfen Sie, ob die Systemressource auf dem primären Knoten
node-1
gestartet wurde:sudo crm status
Wenn die Systemdiagnoseressource nicht auf dem primären Knoten gestartet wurde, verschieben Sie sie mit den folgenden Befehlen:
sudo pcs resource move aoag1-healthcheck node-1 sudo pcs resource clear aoag1-healthcheck
Sie sehen, dass die Systemdiagnose für den Load-Balancer nur für
node-1
fehlerfrei ist.
Erstellen Sie eine virtuelle IP-Adressressource in Ihrem Pacemaker-Cluster:
Kehren Sie auf
node-1
zu SSH zurück und suchen Sie den Namen der Netzwerkschnittstelle Ihres Knotens. Sie benötigen sie im nächsten Schritt.ip -c link
Erstellen Sie die virtuelle IP-Adressressource.
sudo pcs resource create aoag1-vip ocf:heartbeat:IPaddr2 \ ip="
CLUSTER_ADDRESS
" nic=NIC_NAME
cidr_netmask=32 \ op monitor interval=3600s timeout=60sErsetzen Sie
NIC_NAME
durch den Namen der Netzwerkschnittstelle aus dem vorherigen Schritt undCLUSTER_ADDRESS
durch die reservierte IP-Adresse.Prüfen Sie, ob die virtuelle IP-Adressressource auf dem primären Host gestartet wurde.
sudo crm status
Wenn die virtuelle IP-Adressressource nicht auf dem primären Knoten gestartet wird, verschieben Sie sie mit den folgenden Befehlen.
sudo pcs resource move aoag1-vip node-1
Gruppieren Sie die Ressourcen für die Systemdiagnose und virtuelle IP-Adressen.
sudo pcs resource group add aoag1-group \ aoag1-healthcheck aoag1-vip
Erstellen Sie eine Einschränkung, die die neue Gruppe demselben Knoten zuweist wie die primäre Gruppe.
sudo pcs constraint colocation add master aoag1-group with master ms-ag1 score=INFINITY
Listener für die SQL Server-Verfügbarkeitsgruppe erstellen
Bei Verbindungen zu SQL Server mit Verfügbarkeitsgruppen sollten Sie anstelle des Servernamens den Listener-Namen der Verfügbarkeitsgruppe verwenden. Wenn ein Failover auftritt, leitet der Listener Verbindungen automatisch zum neuen primären Knoten im Cluster um.
Kehren Sie zu SSMS zurück und stellen Sie eine Verbindung zur Datenbank
node-1
her.Führen Sie die folgende Abfrage aus:
ALTER AVAILABILITY GROUP aoag1 ADD LISTENER 'aoag1-listener' ( WITH IP (('
CLUSTER_ADDRESS
','255.255.255.0')), PORT=1433 ); GOErsetzen Sie
CLUSTER_ADDRESS
durch die reservierte IP-Adresse.
STONITH-Zäune einrichten
STONITH ist eine Fencing-Strategie zur Aufrechterhaltung der Integrität von Knoten in einem HA-Cluster. Der STONITH-Dienst arbeitet auf Knotenebene und schützt den Cluster vor Knoten, die entweder nicht reagieren oder sich in einem unbekannten Zustand befinden. Wir empfehlen das Fencing-Gerät fence_gce
, das für Compute Engine in Google Cloud spezialisiert ist.
Fencing-Geräte einrichten
Prüfen Sie, ob der Fence-Agent
fence_gce
für Compute Engine aufnode1
installiert ist:sudo pcs stonith list | grep fence_gce
Weitere Informationen finden Sie unter:
- Fence-Agent für Google Compute Engine
Aufrufen der mit dem Agent-Ausführung verknüpften Parameter.
sudo pcs stonith describe fence_gce
Erstellen Sie auf
node-1
die Fencing-Typ-Ressourcenfence_gce
für jeden der beteiligten Knoten:sudo pcs stonith create node-1-fence fence_gce \ plug=node-1 \ zone=
REGION
-a \ project=PROJECT_ID
\ pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \ op monitor interval="300s" timeout="120s" \ op start interval="0" timeout="60s" sudo pcs stonith create node-2-fence fence_gce \ plug=node-2 \ zone=REGION
-b \ project=PROJECT_ID
\ pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \ op monitor interval="300s" timeout="120s" \ op start interval="0" timeout="60s" sudo pcs stonith create node-3-fence fence_gce \ plug=node-3 \ zone=REGION
-c \ project=PROJECT_ID
\ pcmk_reboot_timeout=300 pcmk_monitor_retries=4 pcmk_delay_max=30 \ op monitor interval="300s" timeout="120s" \ op start interval="0" timeout="60s"Ersetzen Sie
REGION
durch die Region, in der die Linux-VMs bereitgestellt werden, undPROJECT_ID
durch Ihre Projekt-ID.Sie können den Status der Fencing-Agents testen, indem Sie den Befehl „status“ ausführen:
sudo fence_gce -o status -n node-1 --zone=
REGION
-a sudo fence_gce -o status -n node-2 --zone=REGION
-b sudo fence_gce -o status -n node-3 --zone=REGION
-cLegen Sie Standortbeschränkungen für Ihre Fencing-Geräte fest, damit sie nur auf den gewünschten Instanzen ausgeführt werden:
sudo pcs constraint location node-1-fence avoids node-1 sudo pcs constraint location node-2-fence avoids node-2 sudo pcs constraint location node-3-fence avoids node-3
Aktivieren Sie das Fencing in Ihrem Pacemaker-Cluster und legen Sie das Zeitlimit für das Cluster-Fencing fest:
sudo pcs -f stonith_cfg property set stonith-enabled=true sudo pcs property set stonith-timeout="300s"
Prüfen Sie den Clusterstatus:
sudo crm status
Fencing-Geräte testen
Nach der Einrichtung der Fencing-Geräte empfehlen wir Ihnen, diese anhand der folgenden Schritte zu testen.
Beenden Sie den Fencing auf
node-2
:Stellen Sie eine Verbindung zu
node-1
her und führen Sie den folgenden Befehl aus, um das mitnode-2
verknüpfte Fence-Gerät aus Ihrem Cluster zu testen.fence_gce -o off -n node-2 --zone=
REGION
-bPrüfen Sie den Clusterstatus.
sudo crm status
Außerdem sehen Sie, dass
node-2
in Compute Engine deaktiviert ist.
Starten Sie den Fence auf
node-2
neu:Kehren Sie zu
node-1
zurück und starten Sie die Instanz mit dem folgenden Befehl noch einmal neu.fence_gce -o on -n node-2 --zone=
REGION
-bPrüfen Sie den Status des Clusters in Pacemaker und Compute Engine. Nach kurzer Zeit siehst du, dass
node-2
wieder online ist.sudo crm status
Corosync für verzögerten Neustart konfigurieren
Um Zeitprobleme zu vermeiden und für eine ordnungsgemäße Reihenfolge der Vorgänge bei einer Fencing-Aktion zu sorgen, empfehlen wir, den Neustart des Corosync-Dienstes um 60 Sekunden zu verzögern.
Weitere Informationen finden Sie im Artikel zur Red Hat-Wissensdatenbank.
Erstellen Sie eine systemd-Drop-in-Datei, die eine Verzögerung des Starts des Corosync-Dienstes unter
node-1
,node-2
undnode-3
festlegt:Öffnen Sie den corosync.service zur Bearbeitung.
sudo systemctl edit corosync.service
Hängen Sie die folgenden Zeilen an, speichern Sie die Datei und beenden Sie den Editor.
[Service] ExecStartPre=/bin/sleep 60
Aktualisieren Sie den Dienstmanager und prüfen Sie, ob die Konfiguration berücksichtigt wurde.
sudo systemctl daemon-reload systemctl status corosync.service --no-pager
Wenn Sie den Bereich „Drop-in“ sehen, wurden die Einstellungen in der Drop-in-Datei berücksichtigt.
Failover testen
Jetzt können Sie testen, ob das Failover wie erwartet funktioniert.
- Stellen Sie über Remote Desktop eine Verbindung zur Windows-VM auf
node-4
her: - Öffnen Sie eine PowerShell-Sitzung:
Führen Sie das folgende Skript aus:
while ($True){ $Conn = New-Object System.Data.SqlClient.SqlConnection $Conn.ConnectionString = "Server=
CLUSTER_ADDRESS
;User ID=sa;Password=SA_PASSWORD
;Initial Catalog=master" $Conn.Open() $Cmd = New-Object System.Data.SqlClient.SqlCommand $Cmd.Connection = $Conn $Cmd.CommandText = "SELECT @@SERVERNAME" $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd $Data = New-Object System.Data.DataSet $Adapter.Fill($Data) | Out-Null $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss") Start-Sleep -Seconds 2 }Ersetzen Sie
CLUSTER_ADDRESS
durch die Listener-IP-Adresse undSA_PASSWORD
durch das Passwort des SA-Kontos auf SQL Server.Alle zwei Sekunden stellt das Skript über den Verfügbarkeitsgruppen-Listener oder DNN-Listener eine Verbindung zu SQL Server her und fragt den Servernamen ab.
Lassen Sie das Skript laufen.
Kehren Sie auf
node-1
zu SSH zurück und führen Sie die Befehle aus, um ein Failover aufnode-2
auszulösen:sudo pcs resource move ms-ag1 node-2 --master sudo pcs resource move aoag1-group node-2 sudo pcs resource move aoag1-vip node-2
Kehren Sie zur PowerShell-Sitzung auf
node-4
zurück.- Beobachten Sie die Ausgabe des laufenden Skripts. Der Servername ändert sich aufgrund des Failovers von
node-1
innode-2
.
- Beobachten Sie die Ausgabe des laufenden Skripts. Der Servername ändert sich aufgrund des Failovers von
Kehren Sie zu
node-1
zurück und initiieren Sie ein Failback zunode-1
:sudo pcs resource move ms-ag1 node-1 --master sudo pcs resource move aoag1-group node-1 sudo pcs resource move aoag1-vip node-1
Kehren Sie zu Powershell auf
node-4
zurück und beenden Sie das Skript durch Drücken vonCtrl+C
.
Bereinigen
Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
So löschen Sie das Projekt:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.