Informationen zum Ersetzen von GitHub Enterprise Server-Clusterknoten
Du kannst in einem GitHub Enterprise Server-Cluster sowohl einen funktionierenden Knoten als auch einen Knoten ersetzen, der unerwartet ausgefallen ist.
Nachdem du einen Knoten ersetzt hast, verteilt Ihre GitHub Enterprise Server-Instance Aufträge nicht automatisch an den neuen Knoten. Du kannst erzwingen, dass deine Instanz Aufträge zwischen den Knoten ausgleicht. Weitere Informationen findest du unter Erneutes Ausgleichen von Clusterworkloads.
Warnung: Um Konflikte zu vermeiden, verwende keinen Hostnamen wieder, der zuvor einem Knoten im Cluster zugewiesen wurde.
Funktionierenden Knoten ersetzen
Du kannst einen vorhandenen funktionalen Knoten in deinem Cluster ersetzen. Beispielsweise solltest du einen virtuellen Computer (VM) mit zusätzlichen CPU-, Arbeitsspeicher- oder Speicherressourcen bereitstellen.
Um einen funktionalen Knoten zu ersetzen, installiere die GitHub Enterprise Server-Anwendung auf einem neuen virtuellen Computer, konfiguriere eine IP-Adresse, füge den neuen Knoten der Clusterkonfigurationsdatei hinzu, initialisiere den Cluster, und wende die Konfiguration an. Schalte anschließend den ersetzten Knoten offline.
Hinweis: Wenn Sie den primären MySQL-Knoten ersetzen, lesen Sie „Ersetzen des primären MySQL-Knotens“.
-
Bereitstellen und Installieren von GitHub Enterprise Server mit einem eindeutigen Hostnamen auf dem Ersetzungsknoten.
-
Konfiguriere mithilfe der Verwaltungsshell oder DHCP nur die IP-Adresse des Ersatzknotens. Konfiguriere keine anderen Einstellungen.
-
Um den neu verteilten Ersatzknoten hinzuzufügen, entferne auf einem beliebigen Knoten in der Datei
cluster.conf
den ausgefallenen Knoten, und füge den neuen Ersatzknoten hinzu. Diese geändertecluster.conf
-Datei ersetzt z. B.ghe-data-node-3
durch den neu bereitgestellten Knotenghe-replacement-data-node-3
.[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 consul-datacenter = PRIMARY-DATACENTER git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
Sie können das Datenbank-Seeding eines neuen MySQL-Replikationsknotens aufschieben, so dass Sie Ihre Anwendung früher für den Datenverkehr öffnen können. Weitere Informationen findest du unter Aufschieben des Datenbank-Seeding.
-
Führe aus der administrativen Shell des Knotens mit der geänderten
cluster.conf
ghe-cluster-config-init
aus. Dadurch wird der neu hinzugefügte Knoten im Cluster initialisiert. -
Führe auf demselben Knoten
ghe-cluster-config-apply
aus. Dadurch wird die Konfigurationsdatei validiert und auf jeden Knoten im Cluster kopiert. Außerdem wird jeder Knoten entsprechend der geänderten Dateicluster.conf
konfiguriert. -
Wenn du einen Knoten offline nimmst, der Datendienste wie
git-server
,pages-server
oderstorage-server
bereitstellt, evakuiere den Knoten. Weitere Informationen findest du unter Evakuieren eines Clusterknotens, auf dem Datendienste ausgeführt werden. -
Um den fehlgeschlagenen Knoten offline auf einem beliebigen Knoten zu markieren, ändere die Clusterkonfigurationsdatei (
cluster.conf
) im relevanten Knotenabschnitt, sodass der Textoffline = true
enthalten ist.Diese geänderte Datei
cluster.conf
markiert beispielsweise denghe-data-node-3
-Knoten als offline:[cluster "ghe-data-node-3"] hostname = ghe-data-node-3 offline = true ipv4 = 192.168.0.6 # ipv6 = fd12:3456:789a:1::6
-
Führe aus der administrativen Shell des Knotens, wo du
cluster.conf
geändert hast,ghe-cluster-config-apply
aus. Dadurch wird die Konfigurationsdatei validiert, auf jeden Knoten im Cluster kopiert und der Knoten als offline markiert.
Knoten in einem Notfall ersetzen
Du kannst einen fehlerhaften Knoten in deinem Cluster ersetzen. Beispielsweise kann sich ein Software- oder Hardwareproblem auf die Verfügbarkeit eines Knotens auswirken.
Hinweis: Wenn Sie den primären MySQL-Knoten ersetzen, lesen Sie „Ersetzen des primären MySQL-Knotens“.
Um einen Knoten im Notfall zu ersetzen, installiere die GitHub Enterprise Server-Anwendung auf einer neuen VM, konfiguriere eine IP-Adresse, schalte den fehlerhaften Knoten offline, wende die Konfiguration an, füge den neuen Knoten der Clusterkonfigurationsdatei hinzu, initialisiere den Cluster, und wende die Konfiguration an. Evakuiere dann den fehlerhaften Knoten.
-
Bereitstellen und Installieren von GitHub Enterprise Server mit einem eindeutigen Hostnamen auf dem Ersetzungsknoten.
-
Konfiguriere mithilfe der Verwaltungsshell oder DHCP nur die IP-Adresse des Ersatzknotens. Konfiguriere keine anderen Einstellungen.
-
Um den fehlgeschlagenen Knoten offline auf einem beliebigen Knoten zu markieren, ändere die Clusterkonfigurationsdatei (
cluster.conf
) im relevanten Knotenabschnitt, sodass der Textoffline = true
enthalten ist.Diese geänderte Datei
cluster.conf
markiert beispielsweise denghe-data-node-3
-Knoten als offline:[cluster "ghe-data-node-3"] hostname = ghe-data-node-3 offline = true ipv4 = 192.168.0.6 # ipv6 = fd12:3456:789a:1::6
-
Führe aus der administrativen Shell des Knotens, wo du
cluster.conf
geändert hast,ghe-cluster-config-apply
aus. Dadurch wird die Konfigurationsdatei validiert, auf jeden Knoten im Cluster kopiert und der Knoten als offline markiert. -
Um den neu verteilten Ersatzknoten hinzuzufügen, entferne auf einem beliebigen Knoten in der Datei
cluster.conf
den ausgefallenen Knoten, und füge den neuen Ersatzknoten hinzu. Diese geändertecluster.conf
-Datei ersetzt z. B.ghe-data-node-3
durch den neu bereitgestellten Knotenghe-replacement-data-node-3
.[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 consul-datacenter = PRIMARY-DATACENTER git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
Sie können das Datenbank-Seeding eines neuen MySQL-Replikationsknotens aufschieben, so dass Sie Ihre Anwendung früher für den Datenverkehr öffnen können. Weitere Informationen findest du unter Aufschieben des Datenbank-Seeding.
-
Wenn du den primären Redis-Knoten ersetzt, ändere in
cluster.conf
denredis-master
-Wert in den Namen des Ersatzknotens.Hinweis: Wenn Ihr primärer Redis-Knoten auch Ihr primärer MySQL-Knoten ist, lesen Sie „Ersetzen des primären MySQL-Knotens“.
In dieser geänderten
cluster.conf
-Datei wird beispielsweise ein neu bereitgestellter Clusterknotenghe-replacement-data-node-1
als primärer Redis-Knoten angegeben:redis-master = ghe-replacement-data-node-1
-
Führe aus der administrativen Shell des Knotens mit der geänderten
cluster.conf
ghe-cluster-config-init
aus. Dadurch wird der neu hinzugefügte Knoten im Cluster initialisiert. -
Führe auf demselben Knoten
ghe-cluster-config-apply
aus. Dadurch wird die Konfigurationsdatei validiert und auf jeden Knoten im Cluster kopiert. Außerdem wird jeder Knoten entsprechend der geänderten Dateicluster.conf
konfiguriert. -
Wenn du einen Knoten offline nimmst, der Datendienste wie
git-server
,pages-server
oderstorage-server
bereitstellt, evakuiere den Knoten. Weitere Informationen findest du unter Evakuieren eines Clusterknotens, auf dem Datendienste ausgeführt werden.
Ersetzen des primären MySQL-Knotens
Zum Bereitstellen von Datenbankdiensten braucht Ihr Cluster einen primären MySQL-Knoten und mindestens einen Replikat-MySQL-Knoten. Weitere Informationen findest du unter Informationen zu Clusterknoten.
Wenn Sie den virtuellen Computer für Ihren primären MySQL-Knoten mit weiteren Ressourcen ausstatten möchten oder wenn der Knoten fehlerhaft ist, können Sie den Knoten ersetzen. Um Ausfallzeiten zu minimieren, fügen Sie den neuen Knoten zu Ihrem Cluster hinzu, replizieren Sie die MySQL-Daten, und stufen Sie dann den Knoten höher. Eine gewisse Ausfallzeit lässt sich während der Höherstufung nicht vermeiden.
-
Bereitstellen und Installieren von GitHub Enterprise Server mit einem eindeutigen Hostnamen auf dem Ersetzungsknoten.
-
Konfiguriere mithilfe der Verwaltungsshell oder DHCP nur die IP-Adresse des Ersatzknotens. Konfiguriere keine anderen Einstellungen.
-
Um eine Verbindung mit Ihre GitHub Enterprise Server-Instance herzustellen, stelle eine SSH-Verbindung mit einem beliebigen Knoten deines Clusters her. Führe auf deiner Arbeitsstation den folgenden Befehl aus. Ersetze HOSTNAME durch den Hostnamen des Knotens. Weitere Informationen findest du unter Auf die Verwaltungsshell (SSH) zugreifen.
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME
-
Öffne die Cluster-Konfigurationsdatei aus
/data/user/common/cluster.conf
in einem Text-Editor. Beispielsweise kannst du Vim verwenden. Erstelle eine Sicherung der Dateicluster.conf
, bevor du die Datei bearbeitest.Shell sudo vim /data/user/common/cluster.conf
sudo vim /data/user/common/cluster.conf
-
Die Clusterkonfigurationsdatei listet jeden Knoten unter einer
[cluster "HOSTNAME"]
-Überschrift auf. Fügen Sie eine neue Überschrift für den Knoten hinzu, geben Sie die Schlüssel-Wert-Paare für die Konfiguration ein und ersetzen Sie die Platzhalter durch tatsächliche Werte.- Stellen Sie sicher, dass das Schlüssel-Wert-Paar
mysql-server = true
enthalten ist. - Der folgende Abschnitt ist ein Beispiel. Die Konfiguration Ihres Knotens kann anders aussehen.
... [cluster "HOSTNAME"] hostname = HOSTNAME ipv4 = IPV4-ADDRESS # ipv6 = IPV6-ADDRESS consul-datacenter = PRIMARY-DATACENTER datacenter = DATACENTER mysql-server = true redis-server = true ... ...
- Stellen Sie sicher, dass das Schlüssel-Wert-Paar
-
Führe aus der administrativen Shell des Knotens mit der geänderten
cluster.conf
ghe-cluster-config-init
aus. Dadurch wird der neu hinzugefügte Knoten im Cluster initialisiert. -
Führe aus der administrativen Shell des Knotens, wo du
cluster.conf
geändert hast,ghe-cluster-config-apply
aus. Der neu hinzugefügte Knoten wird zu einem MySQL-Replikatknoten, und alle anderen konfigurierten Dienste werden dort ausgeführt. -
Warten Sie, bis die MySQL-Replikation abgeschlossen ist. Führen Sie
ghe-cluster-status -v
aus, um die MySQL-Replikation von einem beliebigen Knoten im Cluster zu überwachen.Kurz nach dem Hinzufügen des Knotens zum Cluster wird während des Abgleichs der Replikation möglicherweise ein Fehler für den Replikationsstatus angezeigt. Die Replikation kann Stunden dauern, je nach Auslastung der Instanz, der Menge der Datenbankdaten und dem Zeitpunkt, an dem die Instanz das letzte Mal einen Datenbank-Seed erzeugt hat.
-
Aktivieren Sie während des Zeitfensters für die geplante Wartung den Wartungsmodus. Weitere Informationen findest du unter Wartungsmodus aktivieren und planen.
-
Führen Sie
ghe-cluster-status -v
aus, um sicherzustellen, dass die MySQL-Replikation von allen Knoten im Cluster beendet wurde.Warnung: Wenn Sie nicht warten, bis die MySQL-Replikation abgeschlossen ist, besteht die Gefahr eines Datenverlusts in Ihrer Instanz.
-
Mit dem folgenden Befehl können Sie von den Knoten der Instanz aus den aktuellen primären MySQL-Knoten in den schreibgeschützten Modus versetzen.
Shell echo "SET GLOBAL super_read_only = 1;" | sudo mysql
echo "SET GLOBAL super_read_only = 1;" | sudo mysql
-
Warten Sie, bis die Global Transaction Identifiers (GTIDs) für den primären und Replikat-MySQL-Knoten identisch sind. Mit dem folgenden Befehl können Sie von einem beliebigen Knoten der Instanz aus die GTIDs prüfen.
Shell ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
-
Nachdem die GTIDs des primären und Replikat-MySQL-Knotens übereinstimmen, aktualisieren Sie die Clusterkonfiguration, indem Sie die Clusterkonfigurationsdatei in
/data/user/common/cluster.conf
in einem Text-Editor öffnen.- Erstelle eine Sicherung der Datei
cluster.conf
, bevor du die Datei bearbeitest. - Entfernen Sie im Abschnitt
[cluster]
der obersten Ebene den Hostnamen für den ersetzten Knoten aus dem Schlüssel-Wert-Paarmysql-master
und weisen Sie stattdessen den neuen Knoten zu. Wenn der neue Knoten auch ein primärer Redis-Knoten ist, passen Sie das Schlüssel-Wert-Paarredis-master
an.
[cluster] mysql-master = NEW-NODE-HOSTNAME redis-master = NEW-NODE-HOSTNAME primary-datacenter = primary ...
- Erstelle eine Sicherung der Datei
-
Führen Sie aus der administrativen Shell des Knotens, wo Sie
cluster.conf
geändert haben,ghe-cluster-config-apply
aus. Dadurch wird der Cluster neu konfiguriert, sodass der neu hinzugefügte Knoten zum primären MySQL-Knoten wird, und der ursprüngliche primäre MySQL-Knoten zu einem Replikat-MySQL-Knoten wird. -
Überprüfen Sie den Status der MySQL-Replikation von einem beliebigen Knoten im Cluster, indem Sie
ghe-cluster-status -v
ausführen. -
Wenn die MySQL-Replikation abgeschlossen ist, deaktivieren Sie von einem beliebigen Knoten im Cluster aus den Wartungsmodus. Weitere Informationen findest du unter Wartungsmodus aktivieren und planen.