Tutorial: Einrichten einer Always On-Verfügbarkeitsgruppe mit drei Knoten mit HPE Serviceguard für Linux
Gilt für: SQL Server – Linux
In diesem Tutorial wird erläutert, wie Sie SQL Server-Verfügbarkeitsgruppen mit HPE Serviceguard für Linux konfigurieren, die auf lokalen oder Azure-basierten virtuellen Computern ausgeführt werden.
Eine Übersicht über die HPE Serviceguard-Cluster finden Sie unter HPE Serviceguard-Cluster.
Hinweis
Microsoft unterstützt die Datenverschiebung, die Verfügbarkeitsgruppe und die SQL Server-Komponente. Wenden Sie sich an HPE, um Unterstützung im Zusammenhang mit der Dokumentation der HPE Serviceguard-Clusterverwaltung und -Quorumverwaltung zu erhalten
Dieses Tutorial umfasst die folgenden Aufgaben:
- SQL Server auf allen drei VMs installieren, die Teil der Verfügbarkeitsgruppe sind
- HPE Serviceguard auf den VMs installieren
- HPE-Serviceguard-Cluster erstellen
- Erstellen des Lastenausgleichs im Azure-Portal
- Verfügbarkeitsgruppe erstellen und eine Beispieldatenbank zur Verfügbarkeitsgruppe hinzufügen
- Die SQL Server-Arbeitsauslastung in der Verfügbarkeitsgruppe über den Serviceguard-Cluster-Manager bereitstellen
- Ein automatisches Failover ausführen und den Knoten mit dem Cluster verknüpfen
Voraussetzungen
Erstellen Sie in Azure drei Linux-basierte VMs. Informationen zum Erstellen von Linux-basierten VMs in Azure finden Sie im Schnellstart: Erstellen eines virtuellen Linux-Computers im Azure-Portal. Stellen Sie beim Bereitstellen der VMs sicher, dass von HPE Serviceguard unterstützte Linux-Distributionen verwendet werden. Sie können die VMs auch lokal in einer lokalen Umgebung bereitstellen, wenn Sie dies bevorzugen.
Ein Beispiel für eine unterstützte Distribution finden Sie unter HPE Serviceguard für Linux. Wenden Sie sich an HPE, wenn Sie weitere Informationen zur Unterstützung öffentlicher Cloudumgebungen benötigen.
Die Anweisungen in diesem Tutorial werden auf der Seite „HPE Serviceguard für Linux“ überprüft. Eine Testversion kann über HPE heruntergeladen werden.
SQL Server-Datenbankdateien zum Einbinden des Logical Volume (LVM) für alle VMs. Weitere Informationen finden Sie unter Quick start guide for Serviceguard Linux (HPE) (Schnellstartleitfaden für Serviceguard für Linux (HPE)).
Stellen Sie sicher, dass auf den VMs eine OpenJDK-Java-Runtime installiert ist. Das IBM Java SDK wird nicht unterstützt.
Installieren von SQL Server
Führen Sie auf allen drei VMs einen der unten aufgeführten Schritte basierend auf der Linux-Distribution aus, die Sie für dieses Tutorial ausgewählt haben, um SQL Server und die Tools zu installieren.
Red Hat Enterprise Linux (RHEL)
SUSE Linux Enterprise Server (SLES)
Nachdem Sie diesen Schritt ausgeführt haben, sollten Sie den SQL Server-Dienst und die Tools auf allen drei VMs installiert haben, die an der Verfügbarkeitsgruppe teilnehmen sollen.
Installieren von HPE Serviceguard auf den VMs
In diesem Schritt installieren Sie HPE Serviceguard für Linux auf allen drei VMs. In der folgenden Tabelle werden die Rollen beschrieben, die jeder Server im Cluster hat.
Number of VMs (Anzahl von VMs) | HPE Serviceguard-Rolle | Replikatrolle der Microsoft SQL Server-Verfügbarkeitsgruppe |
---|---|---|
1 | HPE Serviceguard-Clusterknoten | Primäres Replikat |
Mindestens 1 | HPE Serviceguard-Clusterknoten | Sekundäres Replikat |
1 | HPE Serviceguard-Quorumserver | Konfigurationsreplikat |
Hinweis
In diesem Video von HPE erfahren Sie, wie Sie einen HPE Serviceguard Cluster über die Benutzeroberfläche installieren und konfigurieren.
Verwenden Sie die cminstaller
-Methode, um Serviceguard zu installieren. Spezifische Anweisungen finden Sie unter den folgenden Links:
- Install Serviceguard for Linux on two nodes (Installieren von HPE Serviceguard für Linux auf zwei Knoten). Weitere Informationen finden Sie im Abschnitt Install_serviceguard_using_cminstaller.
- Install Serviceguard quorum server on the third node (Installieren des HPE Serviceguard-Quorumservers auf dem dritten Knoten). Weitere Informationen finden Sie im Abschnitt Install_QS_from_the_ISO.
Nach Abschluss der Installation des HPE Serviceguard-Clusters können Sie das Clusterverwaltungsportal auf dem TCP-Port 5522 auf dem primären Replikatknoten aktivieren. Mit den folgenden Schritten wird der Firewall eine Regel hinzugefügt, um 5522 zuzulassen. Der folgende Befehl gilt für Red Hat Enterprise Linux (RHEL). Sie müssen ähnliche Befehle für andere Distributionen ausführen:
sudo firewall-cmd --zone=public --add-port=5522/tcp --permanent
sudo firewall-cmd --reload
Erstellen eines HPE Serviceguard-Clusters
Halten Sie sich an die folgenden Anweisungen, um den HPE Serviceguard-Cluster zu konfigurieren und zu erstellen. In diesem Schritt wird auch der Quorumserver konfiguriert.
- Configure the Serviceguard quorum server on the third node (Konfigurieren des Serviceguard-Quorumservers auf dem dritten Knoten). Weitere Informationen finden Sie im Abschnitt Configure_QS.
- Configure and create Serviceguard cluster on the other two nodes (Konfigurieren und Erstellen des Serviceguard-Clusters auf den beiden anderen Knoten). Weitere Informationen finden Sie im Abschnitt Configure_and_create_Cluster.
Hinweis
Sie können die manuelle Installation Ihres HPE Serviceguard-Clusters und Quorums umgehen, indem Sie die HPE SGLX-Erweiterung (HPE Serviceguard für Linux) aus dem Azure-VM-Marketplace hinzufügen, wenn Sie Ihren virtuellen Computer erstellen.
Erstellen der Verfügbarkeitsgruppe und Hinzufügen einer Beispieldatenbank
Erstellen Sie in diesem Schritt eine Verfügbarkeitsgruppe mit mindestens zwei synchronen Replikaten und einem Konfigurationsreplikat. Dadurch kann der Schutz von Daten gewährleistet und ggf. auch Hochverfügbarkeit bereitgestellt werden. Das folgende Diagramm veranschaulicht diese Architektur:
Eine synchrone Replikation von Benutzerdaten wird auf einem sekundären Replikat ausgeführt. Dieser Vorgang schließt auch Metadaten zur Konfiguration der Verfügbarkeitsgruppe ein.
Eine synchrone Replikation von Metadaten zur Konfiguration der Verfügbarkeitsgruppe wird ausgeführt. Benutzerdaten sind nicht enthalten.
Weitere Informationen finden Sie unter Zwei synchrone Replikate und ein Konfigurationsreplikat.
Führen Sie die folgenden Schritte aus, um die Verfügbarkeitsgruppe zu erstellen:
- Aktivieren von Verfügbarkeitsgruppen und Neustarten von mssql-server auf allen VMs, einschließlich des Konfigurationsreplikats
- Aktivieren einer
AlwaysOn_health
-Ereignissitzung (optional) - Erstellen eines Zertifikats auf der primären VM
- Erstellen des Zertifikats auf sekundären Servern
- Erstellen der Datenbankspiegelungsendpunkte auf allen Replikaten
- Erstellen einer Verfügbarkeitsgruppe
- Verknüpfen der sekundären Replikate
- Hinzufügen einer Datenbank zu einer Verfügbarkeitsgruppe
Aktivieren von Verfügbarkeitsgruppen und Neustarten von mssql-server
Aktivieren Sie Verfügbarkeitsgruppen auf allen Knoten, die eine SQL Server-Instanz hosten. Starten Sie dann „mssql-server“ neu. Führen Sie das folgende Skript auf allen drei Knoten aus:
sudo /opt/mssql/bin/mssql-conf
set hadr.hadrenabled 1 sudo systemctl restart mssql-server
Aktivieren einer AlwaysOn_health
-Ereignissitzung (optional)
Optional können Sie erweiterte Ereignisse der Always On-Verfügbarkeitsgruppen aktivieren, die Ihnen bei der Ursachendiagnose helfen, wenn Sie Probleme in einer Verfügbarkeitsgruppe beheben. Führen Sie auf jeder SQL Server-Instanz den folgenden Befehl aus:
ALTER EVENT SESSION AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO
Erstellen eines Zertifikats auf der primären VM
Das folgende Transact-SQL-Skript erstellt einen Hauptschlüssel und ein Zertifikat. Anschließend werden das Zertifikat und die Datei mit einem privaten Schlüssel gesichert. Aktualisieren Sie das Skript durch sichere Kennwörter. Stellen Sie eine Verbindung mit der primären SQL Server-Instanz her, und führen Sie das folgende Transact-SQL-Skript aus:
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Master_Key_Password>';
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
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 = '<Private_Key_Password>' );
Zu diesem Zeitpunkt weist das primäre SQL Server-Replikat ein Zertifikat unter /var/opt/mssql/data/dbm_certificate.cer
und einen privaten Schlüssel unter var/opt/mssql/data/dbm_certificate.pvk
auf. Kopieren Sie diese beiden Dateien auf allen Servern, die Verfügbarkeitsreplikate hosten, an den gleichen Speicherort. Verwenden Sie den*die mssql
-Benutzer*in, oder erteilen Sie dem*r mssql
-Benutzer*in Berechtigungen, um auf diese Dateien zuzugreifen.
Der folgende Befehl kopiert z.B. auf dem Quellserver die Dateien auf den Zielcomputer. Ersetzen Sie die node2
-Werte durch den Namen des Hosts, auf dem die sekundäre SQL Server-Instanz ausgeführt wird. Kopieren Sie das Zertifikat auch für das Konfigurationsreplikat, und führen Sie die unten aufgeführten Befehle auch auf diesem Knoten aus.
cd /var/opt/mssql/data
scp dbm_certificate.* root@<node2>:/var/opt/mssql/data/
Führen Sie jetzt auf den sekundären VMs, auf denen die sekundäre Instanz und das Konfigurationsreplikat von SQL Server ausgeführt werden, die folgenden Befehle aus, sodass der*die mssql
-Benutzer*in das kopierte Zertifikat besitzen kann:
cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*
Erstellen des Zertifikats auf sekundären Servern
Das folgende Transact-SQL-Skript erstellt einen Hauptschlüssel und ein Zertifikat aus der Sicherung, die Sie auf dem primären SQL Server-Replikat erstellt haben. Aktualisieren Sie das Skript durch sichere Kennwörter. Das Entschlüsselungskennwort ist das gleiche Kennwort, mit dem Sie die PVK-Datei in einem vorherigen Schritt erstellt haben. Führen Sie das folgende Skript auf allen sekundären Servern mit Ausnahme des Konfigurationsreplikats aus, um das Zertifikat zu erstellen:
CREATE MASTER KEY ENCRYPTION BY PASSWORD =
'<Master_Key_Password>';
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 = '<Private_Key_Password>' );
Erstellen der Datenbankspiegelungsendpunkte auf allen Replikaten
Führen Sie auf dem primären und dem sekundären Replikat die folgenden Befehle zum Erstellen der Datenbankspiegelungsendpunkte aus:
CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING
(
ROLE = WITNESS,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;
Hinweis
5022 ist der Standardport, der für den Datenbankspiegelungsendpunkt verwendet wird. Sie können ihn in jeden verfügbaren Port ändern.
Erstellen Sie auf dem reinen Konfigurationsreplikat den Datenbankspiegelungsendpunkt mit dem unten angegebenen Befehl. Beachten Sie, dass der Wert für die Rolle hier auf WITNESS
festgelegt ist, so wie für das reine Konfigurationsreplikat erforderlich.
CREATE ENDPOINT [hadr_endpoint] AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (
ROLE = WITNESS,
AUTHENTICATION = CERTIFICATE dbm_certificate,
ENCRYPTION = REQUIRED ALGORITHM AES
);
ALTER ENDPOINT [hadr_endpoint] STATE = STARTED;
Erstellen der Verfügbarkeitsgruppe
Führen Sie die folgenden Befehle in der primären Replikatinstanz aus. Diese Befehle erstellen eine Verfügbarkeitsgruppe mit dem Namen ag1
, für die cluster_type
auf EXTERNAL festgelegt ist und die der Verfügbarkeitsgruppe die Berechtigung zum Erstellen von Datenbanken gewährt.
Ersetzen Sie vor dem Ausführen der folgenden Skripts die Platzhalter <node1>
, <node2>
und <node3>
(Konfigurationsreplikat) durch den Namen der VMs, die Sie in den vorherigen Schritten erstellt haben.
CREATE AVAILABILITY GROUP [ag1]
WITH (CLUSTER_TYPE = EXTERNAL)
FOR REPLICA ON
N'<node1>' WITH (
ENDPOINT_URL = N'tcp://<node1>:<5022>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<node2>' WITH (
ENDPOINT_URL = N'tcp://<node2>:\<5022>',
AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
FAILOVER_MODE = EXTERNAL,
SEEDING_MODE = AUTOMATIC
),
N'<node3>' WITH (
ENDPOINT_URL = N'tcp://<node3>:<5022>',
AVAILABILITY_MODE = CONFIGURATION_ONLY
);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
Verknüpfen der sekundären Replikate
Führen Sie die folgenden Befehle auf allen sekundären Replikaten aus. Diese Befehle verknüpfen die sekundären Replikate mit der Verfügbarkeitsgruppe ag1
mit dem primären Replikat und stellen der Verfügbarkeitsgruppe ag1
Zugriff zum Erstellen von Datenbanken bereit.
ALTER AVAILABILITY GROUP [ag1]
JOIN WITH (CLUSTER_TYPE = EXTERNAL);
GO
ALTER AVAILABILITY GROUP [ag1]
GRANT CREATE ANY DATABASE;
GO
Hinzufügen einer Datenbank zu einer Verfügbarkeitsgruppe
Stellen Sie eine Verbindung mit dem primären Replikat her, und führen Sie die folgenden T-SQL-Befehle aus, um folgende Schritte auszuführen:
- Erstellen Sie eine Beispieldatenbank mit dem Namen
db1
, die zur Verfügbarkeitsgruppe hinzugefügt wird. - Legen Sie das Wiederherstellungsmodell der Datenbank auf „Vollständig“ fest. Alle Datenbanken in einer Verfügbarkeitsgruppe erfordern das vollständige Wiederherstellungsmodell.
- Sichern Sie die Datenbank. Eine Datenbank erfordert mindestens eine vollständige Sicherung, bevor Sie diese zu einer Verfügbarkeitsgruppe hinzufügen können.
-- creates a database named db1
CREATE DATABASE [db1];
GO
-- set the database in full recovery model
ALTER DATABASE [db1] SET RECOVERY FULL;
GO
-- backs up the database to disk
BACKUP DATABASE [db1]
TO DISK = N'/var/opt/mssql/data/db1.bak';
GO
-- adds the database db1 to the AG
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];
GO
Nachdem Sie die vorherigen Schritte erfolgreich ausgeführt haben, sehen Sie, dass eine Verfügbarkeitsgruppe ag1
erstellt wurde und die drei VMs als Replikat mit einem primären Replikat, einem sekundären Replikat und einem Konfigurationsreplikat hinzugefügt werden. ag1
enthält eine Datenbank.
Bereitstellen der Arbeitsauslastung für die SQL Server-Verfügbarkeitsgruppe (HPE Cluster-Manager)
Stellen Sie in HPE Serviceguard die SQL Server-Arbeitsauslastung in der Verfügbarkeitsgruppe über die Benutzeroberfläche des Serviceguard-Cluster-Managers bereit.
Stellen Sie die Arbeitsauslastung der Verfügbarkeitsgruppe bereit, und aktivieren Sie die Hochverfügbarkeit und die Notfallwiederherstellung (DR) über den Serviceguard-Cluster mithilfe der Serviceguard manager graphical user interface (grafischen Benutzeroberfläche des Serviceguard-Managers). Weitere Informationen finden Sie im Abschnitt Schützen von Microsoft SQL Server für Linux für Always On-Verfügbarkeitsgruppen.
Erstellen des Lastenausgleichs im Azure-Portal
Für Bereitstellungen in der Azure-Cloud erfordert HPE Serviceguard für Linux einen Lastenausgleich, um Clientverbindungen mit dem primären Replikat zu ermöglichen und herkömmliche IP-Adressen zu ersetzen.
Öffnen Sie im Azure-Portal die Ressourcengruppe mit den Serviceguard-Clusterknoten oder virtuellen Computern.
Wählen Sie in der Ressourcengruppe Hinzufügen aus.
Suchen Sie nach „Lastenausgleich“, und wählen Sie dann in den Suchergebnissen den von Microsoft veröffentlichten Lastenausgleich aus.
Wählen Sie auf dem Blatt Lastenausgleich die Option Erstellen aus.
Konfigurieren Sie den Lastenausgleich wie folgt:
Einstellung Wert Name Name des Lastenausgleichs. Beispiel: SQLAvailabilityGroupLB
.Typ Intern SKU „Basic“ oder „Standard“ Virtuelles Netzwerk Virtual Network, das für die VM-Replikate verwendet wird Subnetz Subnetz, in dem SQL Server-Instanzen gehostet werden IP-Adresszuweisung statischen Private IP-Adresse Erstellen einer privaten IP-Adresse im Subnetz Abonnement Auswählen des betreffenden Abonnements Ressourcengruppe Auswählen der betroffenen Ressourcengruppe Location Auswählen desselben Speicherorts wie für SQL-Knoten
Konfigurieren des Back-End-Pools
Der Back-End-Pool stellt die Adressen der beiden Instanzen dar, in denen der Serviceguard-Cluster konfiguriert ist.
- Wählen Sie in Ihrer Ressourcengruppe den zuvor erstellten Load Balancer aus.
- Navigieren Sie zu Einstellungen > Back-End-Pools, und wählen Sie Hinzufügen aus, um einen Back-End-Adresspool zu erstellen.
- Geben Sie im Bereich Back-End-Pool hinzufügen unter Name einen Namen für den Back-End-Pool ein.
- Wählen Sie unter Verknüpft mit die Option Virtueller Computer aus.
- Wählen Sie die virtuellen Computer in der Umgebung aus, und ordnen Sie ihnen jeweils die entsprechende IP-Adresse zu.
- Wählen Sie Hinzufügen.
Erstellen eines Tests
Der Test definiert, wie Azure überprüft, welcher Serviceguard-Clusterknoten das primäre Replikat ist. Azure testet den Dienst auf der Grundlage der IP-Adresse an einem Port, den Sie beim Erstellen des Tests definieren.
Wählen Sie im Bereich Einstellungen für Lastenausgleich die Option Integritätstests aus.
Wählen Sie im Bereich Integritätstests die Option Hinzufügen aus.
Verwenden Sie dabei die folgenden Werte:
Einstellung Wert Name Name für den Test. Beispiel: SQLAGPrimaryReplicaProbe
.Protokoll TCP Port Sie können jeden verfügbaren Port verwenden. Beispiel: 59999. Intervall 5 Fehlerhafter Schwellenwert 2 Klicken Sie auf OK.
Melden Sie sich bei allen Ihren virtuellen Computern an, und öffnen Sie den Testport mithilfe der folgenden Befehle:
sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent sudo firewall-cmd --reload
Azure erstellt den Test und verwendet ihn dann, um den Serviceguard-Knoten zu testen, auf dem die primäre Replikatinstanz der Verfügbarkeitsgruppe ausgeführt wird. Denken Sie an den konfigurierten Port (59999), der für die Bereitstellung der Verfügbarkeitsgruppe im Serviceguard-Cluster erforderlich ist.
Festlegen der Lastenausgleichsregeln
Die Lastenausgleichsregeln konfigurieren, wie der Lastenausgleich Datenverkehr an den Serviceguard-Knoten weiterleitet, der das primäre Replikat im Cluster ist. Aktivieren Sie für diesen Lastenausgleich Direct Server Return, da jeweils nur ein Serviceguard-Clusterknoten ein primäres Replikat sein kann.
Wählen Sie im Bereich Einstellungen für Lastenausgleich die Option Lastenausgleichsregeln aus.
Wählen Sie im Bereich Lastenausgleichsregeln die Option Hinzufügen aus.
Konfigurieren Sie die Lastenausgleichsregel mit den folgenden Einstellungen:
Einstellung Wert Name Name für die Lastenausgleichsregeln. Beispiel: SQLAGPrimaryReplicaListener
.Protokoll TCP Port 1433 Back-End-Port 1433. Dieser Wert wird ignoriert, da diese Regel eine Floating IP verwendet. Test Verwenden Sie den Namen des Tests, den Sie für diesen Load Balancer erstellt haben. Sitzungspersistenz Keine Leerlaufzeitüberschreitung (Minuten) 4 Floating IP Aktiviert Klicken Sie auf OK.
Azure konfiguriert die Lastenausgleichsregel. Jetzt ist der Lastenausgleich so konfiguriert, dass Datenverkehr an den Serviceguard-Knoten weitergeleitet wird, der die primäre Replikatinstanz im Cluster ist.
Notieren Sie sich die Front-End-IP-Adresse „LbReadWriteIP“ des Lastenausgleichs, die für die Bereitstellung der Verfügbarkeitsgruppe im Serviceguard-Cluster erforderlich ist.
Die Ressourcengruppe verfügt nun über einen mit allen Serviceguard-Computern verbundenen Lastenausgleich. Der Lastenausgleich enthält auch eine IP-Adresse für die Clients, um eine Verbindung mit der primären Replikatinstanz im Cluster herzustellen, sodass jeder Computer, der ein primäres Replikat ist, auf Anforderungen für die Verfügbarkeitsgruppe reagieren kann.
Ein automatisches Failover ausführen und den Knoten mit dem Cluster verknüpfen
Zum Testen des automatischen Failovers können Sie das primäre Replikat herunterfahren (ausschalten). Dadurch wird die plötzliche Nichtverfügbarkeit des primären Knotens repliziert. Das erwartete Verhalten sieht wie folgt aus:
- Der Cluster-Manager stuft eines der sekundären Replikate in der Verfügbarkeitsgruppe auf „Primär“ hoch.
- Das fehlgeschlagene primäre Replikat tritt automatisch dem Cluster bei, nachdem ein Backup durchgeführt wurde. Der Cluster-Manager stuft ihn auf das sekundäre Replikat hoch.
Informationen zu HPE Serviceguard finden Sie im Abschnitt Testing the setup for failover readiness (Testen des Setups auf Failoverbereitschaft).