Implementierung der Docker-Bereitstellung des SQL Server 2019 Always On-Clusters

Implementierung der Docker-Bereitstellung des SQL Server 2019 Always On-Clusters

Docker-Bereitstellung Always on-Cluster

SQL Server unterstützt seit 2016 Linux. Mit der Veröffentlichung der Versionen 2017 und 2019 begann die Unterstützung von HA/DR, Kubernetes und Big Data-Clusterlösungen auf Linux- und Containerplattformen.

In diesem Artikel installieren wir SQL Server 2019 auf einem Docker-Container mit 3 Knoten und erstellen eine AlwaysOn-Verfügbarkeitsgruppe.

Unser Ziel ist die schnelle Vorbereitung einer Umgebung mithilfe einer einzigen Konfigurationsdatei. Daher können Entwickler oder Testteams schnell Tests beispielsweise zu Kompatibilität, Konnektivität, Codefunktionalität usw. durchführen.

In diesem Abschnitt bereiten wir zunächst ein Ubuntu-basiertes Image vor, um eine Verfügbarkeitsgruppe auf einem Container installieren zu können. Wir führen anschließend die notwendige Installation durch.

Wichtig: Dieser Vorgang wird für Produktionsumgebungen nicht empfohlen. Die Installation wurde auf Ubuntu 18.04 durchgeführt.

Docker installieren

Ich werde die Installation von Docker nicht vorstellen, Sie können es selbst installieren.

Architektur

Hostname IP Hafen Rolle
SQLNode1 Host-IP 1501:1433 Gastgeber
SQLNode2 - SQLNode2 Host-IP 1502:1433 Instanzen
SQLNode3 - SQLNode3 Host-IP 1503:1433 Instanzen

Port bedeutet: Externer Netzwerkport: Interner Netzwerkport

Bereiten Sie relevante Container-Images vor

Ziehen Sie die Docker-Images des Betriebssystems und der Datenbank wie folgt

Betriebssystem

Docker-Pull Ubuntu:18.04

SQL Server 2019

Docker-Pull mcr.microsoft.com/mssql/server:2019-latest

Sie können die heruntergeladenen Bildinformationen über docker images anzeigen.

Spiegeladresse: https://hub.docker.com/_/microsoft-mssql-server

Konfigurationscontainer starten

Nachdem die Umgebung vorbereitet ist, beginnen Sie mit der formalen Konfiguration und Installation.

Schritt 1: Erstellen Sie eine Docker-Datei

Erstellen Sie ein Verzeichnis zum Speichern von Dateien wie Dockerfile und Docker-compose.yml.

mkdir /sql2019ha
cd /sql2019ha
Docker-Datei berühren
vi Docker-Datei

Der Dockerfile-Inhalt ist wie folgt

VON Ubuntu:18.04
 
Führen Sie apt-get update aus.
 
Führen Sie apt install aus: sudo wget curl gnupg gnupg1 gnupg2 -y
Führen Sie den Befehl apt install software-properties-common systemd vim -y aus.
Führen Sie wget -qO- https://packages.microsoft.com/keys/microsoft.asc aus | sudo apt-key add -
 
Führen Sie add-apt-repository aus "$(wget -qO- https://packages.microsoft.com/config/ubuntu/18.04/mssql-server-2019.list)"
Führen Sie apt-get update aus.
Führen Sie den Befehl apt-get install -y mssql-server aus.
 
RUN /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1
RUN /opt/mssql/bin/mssql-conf set sqlagent.enabled true
 
EXPOSE 1433
 
EINSTIEGSPUNKT /opt/mssql/bin/sqlservr

veranschaulichen :

  • FROM : gibt das Image an, auf dem die Installation basiert
  • RUN : Im Bild ausgeführte Operationen
  • EXPOSE : Geben Sie den Service-Port an
  • EINSTIEGSPUNKT : Befehl ausführen

Schritt 2: Kompilieren Sie das Image

Kompilieren Sie das Image über Dockerfile für die anschließende Installation, Befehl: docker build -t sqlag2019:ha .

Hier ist sqlag2019 der Image-Name, ha ist der Image-Tag und . zeigt die Kompilierung im aktuellen Verzeichnis an, da sich die Docker-Datei im aktuellen Verzeichnis befindet.

Die folgende Ausgabe ist kurz und knapp. Tatsächlich gibt es eine Menge Ausgabe... Es dauert auch einige Zeit (Installation einiger Pakete, Datenbanken usw.), abhängig von der Netzwerkgeschwindigkeit

$ docker build -t sqlag2019:ha .
Senden des Build-Kontexts an den Docker-Daemon 2,56 kB
Schritt 1/12: VON ubuntu:18.04
 ---> c3c304cb4f22
Schritt 2/12: Führen Sie apt-get update aus
 ---> Läuft in 950e50f80f00
Holen Sie sich:1 http://archive.ubuntu.com/ubuntu bionic InRelease [242 kB]
Holen Sie sich:2 http://security.ubuntu.com/ubuntu bionic-security InRelease [88,7 kB]
Holen Sie sich:3 http://security.ubuntu.com/ubuntu bionic-security/main amd64 Pakete [932 kB]
Holen Sie sich:4 http://archive.ubuntu.com/ubuntu bionic-updates InRelease [88,7 kB] ...
Schritt 3/12: Führen Sie apt install sudo wget curl gnupg gnupg1 gnupg2 -y aus.
 ---> Wird ausgeführt in edc9d15b2383
..
..
Schritt 8/12: Führen Sie den Befehl sudo apt-get install -y mssql-server aus.
 ---> Wird ausgeführt in 43d82a503f8a
Paketlisten werden gelesen...
Abhängigkeitsbaum wird erstellt ...
Statusinformationen werden gelesen...
Die folgenden zusätzlichen Pakete werden installiert:
Schritt 9/12: Führen Sie den Befehl sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled 1 aus.
 ---> Wird ausgeführt in 166c6596d2dd
SQL Server muss neu gestartet werden, um diese Einstellung anzuwenden. Bitte führen Sie
„systemctl mssql-server.service neu starten“.
Zwischenbehälter entfernen 166c6596d2dd
 ---> bcdb057fed43
Schritt 10/12: Führen Sie den Befehl sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true aus.
 ---> Wird ausgeführt in 22dd6a93d1ef
SQL Server muss neu gestartet werden, um diese Einstellung anzuwenden. Bitte führen Sie
„systemctl mssql-server.service neu starten“.
Zwischenbehälter entfernen 22dd6a93d1ef
 ---> 6b90afbaf94e
Schritt 11/12: EXPOSE 1433
 ---> Wird ausgeführt in bcc14f3b0bad
Zwischencontainer bcc14f3b0bad entfernen
 ---> 4aae1563aa74
Schritt 12/12: ENTRYPOINT /opt/mssql/bin/sqlservr
 ---> Wird ausgeführt in 68b6ed45ff6a
Zwischenbehälter ausbauen 68b6ed45ff6a
 ---> b7467618c371
Erfolgreich erstellt b7467618c371
Erfolgreich getaggt mit sqlag2019:ha

Die Meldung Successfully am Ende zeigt an, dass die Kompilierung erfolgreich war. Andernfalls lösen Sie das Problem entsprechend der Fehlermeldung.

Schritt 3: Einen Container erstellen

Nachdem das Image nun kompiliert ist, erstellen und konfigurieren wir drei Container über die docker-compose Datei. Die spezifischen Inhalte sind wie folgt:

$ berühren docker-compose.yml
$ vi docker-compose.yml
Version: '3'
 
Leistungen:
  db1:
    Containername: sqlNode1
    Bild: sqlag2019:ha
    Hostname: sqlNode1
    Domänenname: lab.local
    Umfeld:
      SA_PASSWORD: "MeinPasswort123"
      ACCEPT_EULA: „J“
    Häfen:
    - „1501:1433“
    zusätzliche_hosts:
      sqlNode2.labl.local: "172.16.238.22"
      sqlNode3.labl.local: "172.16.238.23"
    Netzwerke:
        Intern:
                IPv4-Adresse: 172.16.238.21
 
  db2:
    Containername: sqlNode2
    Bild: sqlag2019:ha
    Hostname: sqlNode2
    Domänenname: lab.local
    Umfeld:
      SA_PASSWORD: "MeinPasswort123"
      ACCEPT_EULA: „J“
    Häfen:
    - „1502:1433“
    zusätzliche_hosts:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode3.lab.local: "172.16.238.23"
    Netzwerke:
        Intern:
                IPv4-Adresse: 172.16.238.22
 
  db3:
    Containername: sqlNode3
    Bild: sqlag2019:ha
    Hostname: sqlNode3
    Domänenname: lab.local
    Umfeld:
      SA_PASSWORD: "MeinPasswort123"
      ACCEPT_EULA: „J“
    Häfen:
    - „1503:1433“
    zusätzliche_hosts:
      sqlNode1.lab.local: "172.16.238.21"
      sqlNode2.lab.local: "172.16.238.22"
    Netzwerke:
        Intern:
                IPv4-Adresse: 172.16.238.23
 
Netzwerke:
    Intern:
      ipam:
            Treiber: Standard
            Konfiguration:
                - Subnetz: 172.16.238.0/24

Schritt 4: Starten Sie den Container

Starten Sie dann die drei Container mit docker-compose up -d , wobei -d bedeutet, dass sie im Hintergrund ausgeführt werden.

$ docker-compose up -d
Erstellen des Netzwerks „sql2019hademo_internal“ mit dem Standardtreiber
sqlNode2 wird erstellt …
sqlNode1 wird erstellt ...
Erstellen von sqlNode2
sqlNode3 wird erstellt ...
Erstellen von sqlNode1
sqlNode2 wird erstellt ... fertig

Hinweis: Docker-Compose muss separat installiert werden. Es handelt sich um eine ausführbare Datei. Kann über apt, yum installiert werden.

Containerstatus anzeigen

$ Docker-Compose ps
Name Befehl Status Ports
--------------------------------------------------------------------------
sqlNode1 /bin/sh -c /opt/mssql/bin/ ... Up 0.0.0.0:1501->1433/tcp
sqlNode2 /bin/sh -c /opt/mssql/bin/ ... Up 0.0.0.0:1502->1433/tcp
sqlNode3 /bin/sh -c /opt/mssql/bin/ ... Up 0.0.0.0:1503->1433/tcp

Jetzt wurde der Container gestartet. Stellen Sie jetzt über SSMS eine Verbindung zur Datenbank her, um entsprechende Prüfungen durchzuführen und ALWAYSON zu konfigurieren.

Schritt 5: SSMS mit MSSQL verbinden

Stellen Sie über die externe Netzwerk-IP+Port des Hosts wie folgt eine Verbindung zur entsprechenden Datenbank her:

Bildbeschreibung hier einfügen

Hinweis: Zwischen der IP und dem Port steht ein Komma

Bildbeschreibung hier einfügen

Sie können sehen, dass das Datenbanksymbol auch ein Linux-Symbol ist.

Konfiguration - Datenbank

In diesem Teil werden relevante Konfigurationen in der Datenbank durchgeführt, z. B.: Erstellen von KEY-Verschlüsselungsdateien, Verwalten von Benutzern, verfügbaren Gruppen usw.

Schritt 1: Verbindung zur Hauptdatenbank herstellen - sqlNode1

Die Hauptdatenbank ist Knoten 1, der Port ist 1501 und die Verbindungsmethode ist wie oben gezeigt.

Wir haben das Zertifikat und den privaten Schlüssel in die Dateien /tmp/dbm_certificate.cer und /tmp/dbm_certificate.pvk extrahiert.

Wir kopieren diese Dateien auf andere Knoten und erstellen einen Hauptschlüssel und ein Zertifikat basierend auf den folgenden Dateien: Führen Sie das folgende Skript aus

USE-Meister
GEHEN
 
LOGIN ERSTELLEN dbm_login MIT PASSWORT = 'MyStr0ngPa$w0rd';
BENUTZER dbm_user FÜR LOGIN erstellen dbm_login;
GEHEN
 
HAUPTSCHLÜSSELVERSCHLÜSSELUNG MIT PASSWORT ERSTELLEN = 'MyStr0ngPa$w0rd';
gehen
ZERTIFIKAT ERSTELLEN dbm_certificate MIT SUBJECT = "dbm";
BACKUP-ZERTIFIKAT dbm_certificate
IN DATEI = '/tmp/dbm_certificate.cer'
MIT PRIVATEM SCHLÜSSEL (
        DATEI = '/tmp/dbm_certificate.pvk',
        VERSCHLÜSSELUNG MIT PASSWORT = 'MyStr0ngPa$w0rd'
    );
GEHEN

Kopieren Sie die Datei auf die anderen beiden Knoten:

$ docker cp sqlNode1:/tmp/dbm_certificate.cer .
$ docker cp sqlNode1:/tmp/dbm_certificate.pvk .
$ docker cp dbm_certificate.cer sqlNode2:/tmp/
$ docker cp dbm_certificate.pvk sqlNode2:/tmp/
$ docker cp dbm_certificate.cer sqlNode3:/tmp/
$ docker cp dbm_certificate.pvk sqlNode3:/tmp/

Schritt 2: Verbindung zu den Slave-Bibliotheken herstellen - sqlNode2 und sqlNode3

Die Ports der beiden Slave-Bibliotheken sind 1502 und 1503. Wiederholen Sie dann die von der Master-Bibliothek ausgeführten Vorgänge wie folgt:

LOGIN ERSTELLEN dbm_login MIT PASSWORT = 'MyStr0ngPa$w0rd';
BENUTZER dbm_user FÜR LOGIN erstellen dbm_login;
GEHEN
 
HAUPTSCHLÜSSELVERSCHLÜSSELUNG MIT PASSWORT ERSTELLEN = 'MyStr0ngPa$w0rd';
GEHEN
ZERTIFIKAT ERSTELLEN dbm_certificate   
    AUTORISIERUNG dbm_user
    AUS DATEI = '/tmp/dbm_certificate.cer'
    MIT PRIVATEM SCHLÜSSEL (
    DATEI = '/tmp/dbm_certificate.pvk',
    ENTSCHLÜSSELUNG MIT PASSWORT = 'MyStr0ngPa$w0rd'
);
GEHEN

Schritt 3: Alle Knoten

Führen Sie den folgenden Befehl auf allen Knoten aus:

ENDPOINT ERSTELLEN [Hadr_Endpunkt]
    ALS TCP (LISTENER_IP = (0.0.0.0), LISTENER_PORT = 5022)
    FÜR DATA_MIRRORING (
        ROLLE = ALLE,
        AUTHENTIFIZIERUNG = ZERTIFIKAT dbm_certificate,
        VERSCHLÜSSELUNG = ERFORDERLICHER ALGORITHMUS AES
        );
ALTER ENDPOINT [Hadr_endpoint] STATE = GESTARTET;
GRANT CONNECT ON ENDPOINT::[Hadr_endpoint] TO [dbm_login];

Aktivieren Sie den automatischen Start ALWAYON und führen Sie den folgenden Befehl auf allen Knoten aus

ALTER EVENT SESSION AlwaysOn_health auf dem Server mit (STARTUP_STATE = ON);
GEHEN

Schritt 4: Erstellen einer Hochverfügbarkeitsgruppe

Sie können SSMS-Tools und T-SQL verwenden. Im Folgenden wird T-SQL als Beispiel verwendet:

Führen Sie das folgende Skript aus, um eine Verfügbarkeitsgruppe im主節點zu erstellen. Beachten Sie, dass CLUSTER_TYPE = NONE gewählt wurde, da sie ohne eine Clusterverwaltungsplattform wie Pacemaker oder Windows Server Failover Clustering installiert wird.

Wenn Sie AlwaysOn AG unter Linux installieren, sollten Sie CLUSTER_TYPE = EXTERNAL für Pacemaker auswählen:

VERFÜGBARKEITSGRUPPE ERSTELLEN [AG1]
        MIT (CLUSTER_TYPE = KEINE)
        ZUR REPLIK AUF
        N'sqlNode1'
            MIT (
            ENDPOINT_URL = N'tcp://sqlNode1:5022',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
                SEEDING_MODE = AUTOMATISCH,
                FAILOVER_MODE = MANUELL,
            SEKUNDÄRE_ROLLE (VERBINDUNGEN ERLAUBT = ALLE)
                ),
        N'sqlNode2'
            MIT (
            ENDPOINT_URL = N'tcp://sqlNode2:5022',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
                SEEDING_MODE = AUTOMATISCH,
                FAILOVER_MODE = MANUELL,
            SEKUNDÄRE_ROLLE (VERBINDUNGEN ERLAUBT = ALLE)
                ),
        N'sqlNode3'
            MIT (
            ENDPOINT_URL = N'tcp://sqlNode3:5022',
            AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
                SEEDING_MODE = AUTOMATISCH,
                FAILOVER_MODE = MANUELL,
            SEKUNDÄRE_ROLLE (VERBINDUNGEN ERLAUBT = ALLE)
                );
GEHEN

Führen Sie den folgenden Befehl in der Slave-Bibliothek aus, um die Slave-Bibliothek zur AG-Gruppe hinzuzufügen:

ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = NONE);
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
GEHEN

An diesem Punkt ist die Installation des SQL Server AlwaysOn-Clusters im Docker-Container abgeschlossen!

Hinweis: Wenn Sie CLUSTER_TYPE = NONE angeben, um eine Verfügbarkeitsgruppe zu erstellen, muss beim Durchführen eines Failovers der folgende Befehl ausgeführt werden

ALTER AVAILABILITY GROUP [ag1] FORCE_FAILOVER_ALLOW_DATA_LOSS

prüfen

Erstellen Sie eine Datenbank auf der primären Datenbank und fügen Sie sie der Verfügbarkeitsgruppe AG hinzu.

DATENBANK ERSTELLEN agtestdb;
GEHEN
ALTER DATABASE agtestdb SET RECOVERY FULL;
GEHEN
DATENBANK agtestdb AUF FESTPLATTE SICHERN = '/var/opt/mssql/data/agtestdb.bak';
GEHEN
ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [agtestdb];
GEHEN

Verwenden Sie SSMS, um zu überprüfen, ob der Synchronisierungsstatus normal ist.

Referenzlinks

https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-create-availability-group?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-mssql-conf?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-environment-variables?view=sql-server-ver15
https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-availability-group-cluster-ubuntu?view=sql-server-linux-ver15
https://docs.docker.com/engine/install/ubuntu/
https://docs.docker.com/compose/

Dies ist das Ende dieses Artikels über die Implementierung der Docker-Bereitstellung des SQL Server 2019 Always On-Clusters. Weitere relevante Inhalte zur Docker-Bereitstellung des SQLServer-Clusters finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Installieren Sie die SQL Server-Datenbank über Docker auf einem Linux-System
  • Detaillierte Schritte zum Bereitstellen von Microsoft SQL Server mit Docker
  • Docker stellt Mysql, .Net6, Sqlserver und andere Container bereit
  • Implementierung der Ausführung von SQL Server mit Docker
  • So führen Sie Microsoft SQL Server 2017 mit Docker aus
  • Bereitstellen von MSSQL in einem Docker-Container

<<:  Warum DOCTYPE HTML verwenden?

>>:  Einführung in die Verwendung des MySQL Performance Stress Benchmark Tools Sysbench

Artikel empfehlen

Auszeichnungssprache – CSS-Stil für Webanwendungen

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

js genaue Berechnung

var numA = 0,1; var numB = 0,2; Alarm (Zahl A + Z...

Bedingtes Rendering von Vue (v-if und v-show)

Inhaltsverzeichnis 1. v-wenn 2. Verwenden Sie v-i...

Der Unterschied zwischen MySQL-Datenbankhost 127.0.0.1 und localhost

Viele meiner Freunde haben möglicherweise ein Pro...

Detaillierte Zusammenfassung der Übermittlungsmethoden für Webformulare

Sehen wir uns zunächst verschiedene Möglichkeiten...

Grafische Erklärung des Funktionsaufrufs der Protodatei in Vue

1. Proto kompilieren Erstellen Sie einen neuen Pr...

Prozessdiagramm zur Implementierung der Zabbix WEB-Überwachung

Nehmen Sie als Beispiel die WEB-Schnittstelle von...

Warum ist die Bildlaufleiste auf der Webseite rechts angebracht?

Warum befinden sich die Bildlaufleisten der Brows...

Tiefgreifendes Verständnis des asynchronen Wartens in Javascript

In diesem Artikel untersuchen wir, warum async/aw...