Initialisierung / Slave erstellen

Verwenden Sie die Aktion createslave , um erstmalig eine Master / Slave -Umgebung einzurichten. Folgende Schritte müssen als Benutzer root durchgeführt werden:

Die Aktion createslave kann aufgrund eines Neustarts der Datenbank (mögliche automatische Konfigurationsänderung) zu einem kurzzeitigen Ausfall des SKOOR-Systems führen. Es ist danach voll funktionsfähig und zugänglich.

Beachten Sie Folgendes:

  • Datenbanken mit einer Größe von 100 GB oder mehr benötigen normalerweise mehr WAL-Dateien als der Standardwert von 2048. Der Parameter wal_keep_size muss erhöht werden, bevor die Replikation initialisiert werden kann:

    vi /var/lib/pgsql/data/postgresql.skoor.conf

    Ändern Sie den Parameter (der Wert kann größer als 4096 sein, berücksichtigen Sie den freien Speicherplatz auf der Festplatte):

    wal_keep_size = 4096
  • Das Skript synchronisiert DB-Tabellen vom Master zum Slave . Überprüfen Sie die Größe der gesamten DB mit:

    du -sh /var/lib/pgsql

    Es ist sehr wahrscheinlich, dass mehrere Gigabyte an Daten zu übertragen sind. In diesem Fall erfolgt die Initialisierung der Replikation am besten abends.

  • Bei der Neuinitialisierung werden nicht alle Dateien kopiert. Wenn mit createslave schon einmal eine Initialisierung durchgeführt wurde, diese aber wiederholt werden muss, weil aus irgendeinem Grund die Replikation kaputt gegangen ist, werden wesentlich weniger Daten vom Master zum Slave übertragen.

  • Jede Datenbankdatei muss jedoch auf beiden Seiten anhand der Prüfsumme verglichen werden, damit die Replikationsmechanismen feststellen können, welche Dateien übertragen werden müssen. Eine ausschließlich auf Datenbankdateigrößen und deren Änderungszeiten basierende Synchronisierung ist nicht zuverlässig genug. Daher muss vor Beginn der eigentlichen Synchronisierung die gesamte Datenbank auf beiden Seiten einer Prüfsumme unterzogen werden, was je nach Hostleistung und Datenbankgröße mehrere Stunden dauern kann.

  • Es empfiehlt sich, vor Beginn der Initialisierung eine vollständige Sicherung des aktuell aktiven Systems durchzuführen. Dies kann mit dem Befehl erfolgen:

    cd /var/lib/pgsql
    sudo -u postgres bash -l -c '/opt/eranger/bin/eranger-server-backup.sh full'

    wodurch ein vollständiges Backup auf /opt/eranger/ Server /backups/ gespeichert wird.

Um die Initialisierung zu starten, muss auf dem Master das Kommando createslave abgesetzt werden. Da dieser Befehl je nach zu übertragender Datenmenge und Netzwerkbandbreite zwischen Master und Slave mehrere Stunden dauern kann, empfiehlt es sich, den Befehl innerhalb einer Bildschirmsitzung auszuführen. Der Bildschirmbefehl ermöglicht die Ausführung eines Befehls aus der Ferne, ohne dass der Befehl beendet wird, wenn die Verbindung zum Remote-Host aus irgendeinem Grund getrennt wird. Erstellen Sie eine neue Bildschirmsitzung (mit einem ausreichend großen History-Scrollback-Puffer) auf dem Master als Root mit dem folgenden Befehl:

screen -h 10000

Führen Sie dann in dieser Bildschirmsitzung den folgenden Befehl aus, um den Slave -Initialisierungsprozess zu starten:

/opt/eranger/bin/eranger-server-replication.pl createslave

Das Folgende ist eine Beispielausgabe des obigen Befehls:

10.1.0.88 prepare slave 10.1.0.89 (master: 10.1.0.88)..
10.1.0.88 
10.1.0.88 checking ssh for user reranger
10.1.0.88 
10.1.0.88 
10.1.0.88 ============================================================
10.1.0.88 == Setting up slave-system on 10.1.0.89
10.1.0.88 == THIS WILL DESTROY DATABASE on 10.1.0.89
10.1.0.88 == make sure you have a backup
10.1.0.88 ============================================================
10.1.0.88 
10.1.0.88 you may abort here and then execute on 10.1.0.89:
10.1.0.88 
10.1.0.88       sudo /opt/eranger/bin/eranger-server-replication.pl initslave 10.1.0.88
10.1.0.88 
10.1.0.88 if you continue, we will call above command with ssh
press ENTER to continue, Ctrl-C to abort >

Drücken Sie die Eingabetaste , um fortzufahren. Die folgende Ausgabe wird angezeigt:

10.1.0.88 checking ssh for user reranger
10.1.0.88 eranger start httpd at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 httpd already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-report at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-report already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-server at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-server already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-ethd at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 start eranger-ethd (service eranger-ethd )..
10.1.0.88 done
10.1.0.88 eranger start eranger-eth-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 start eranger-eth-alerter (service eranger-eth-alerter )..
10.1.0.88 done
10.1.0.88 eranger start eranger-collector at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-collector already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-agent at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-agent already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-ic-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 start eranger-ic-alerter (service eranger-ic-alerter )..
10.1.0.88 done
10.1.0.88 copied file to /var/lib/pgsql/data/
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived

Der Befehl createslave kann auch im nicht interaktiven Modus mit dem Parameter -f ausgeführt werden. Die Ausgabe wird in diesem Fall kürzer:

Bitte beachten Sie, dass dieser Befehl dieses System zum Master Server macht und sofort die Datenbank auf dem anderen Knoten zerstört

# /opt/eranger/bin/eranger-server-replication.pl -f createslave
10.1.0.88 prepare slave 10.1.0.89 (master: 10.1.0.88)..
10.1.0.88 
10.1.0.88 checking ssh for user reranger
10.1.0.88 eranger start httpd at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 httpd already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-report at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-report already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-server at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-server already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-ethd at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 start eranger-ethd (service eranger-ethd )..
10.1.0.88 done
10.1.0.88 eranger start eranger-eth-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 start eranger-eth-alerter (service eranger-eth-alerter )..
10.1.0.88 done
10.1.0.88 eranger start eranger-collector at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-collector already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-agent at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 eranger-agent already running (not starting)
10.1.0.88 done
10.1.0.88 eranger start eranger-ic-alerter at /opt/eranger/bin/eranger-server-replication.pl line 1743.
10.1.0.88 start eranger-ic-alerter (service eranger-ic-alerter )..
10.1.0.88 done
10.1.0.88 copied file to /var/lib/pgsql/data/
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived

Die Bildschirmsitzung kann jederzeit verlassen werden, indem zuerst „Strg-a“ und dann „d“ gedrückt wird. Um erneut in die Bildschirmsitzung einzutreten, geben Sie den folgenden Befehl zum erneuten Anhängen ein:

screen -h 10000 -r

Das Skript macht folgendes:

  • Vergleichen Sie die Prüfsumme jeder Datenbankdatei zwischen Master und Slave .

  • Stoppen Sie den eranger- Server -Dienst auf dem Slave , falls er ausgeführt wird

  • Die Dateien /var/lib/pgsql/data/recovery.signal und skoor-replication.conf (die in postgresql.skoor.conf enthalten sind) werden auf dem Slave erstellt. Diese ermöglichen es dem Slave , die IP-Adresse seines Master , den Replikationsport, die Anmeldeinformationen und den Pfad zur Triggerdatei zu kennen. Das Folgende zeigt ein Beispiel einer skoor-replication.con-Datei auf dem Slave :

    primary_conninfo = 'host=10.1.0.88 port=5432 user=replication password=replication'
    promote_trigger_file = '/tmp/postgresql.trigger.5432'

    Die promote_trigger_file ist nicht vorhanden, wenn die Replikation ausgeführt wird. Wenn Sie es erstellen, wird die Replikation beendet (z. B. im Falle eines Wechsels/Failovers).
    recovery.signal ist nur eine Markierungsdatei und daher leer.

  • Die zwischen den beiden Hosts unterschiedlichen Teile der Datenbank werden mit einem rsync -über- ssh -Prozess übertragen. Die folgenden Pfade sind vom Synchronisierungsprozess ausgeschlossen:

    • /var/lib/pgsql/data/pg_xlog/ (die Binärlogs, dh die WAL-Dateien werden während createslave nicht synchronisiert, ihr Inhalt wird erst repliziert, nachdem der createslave-Prozess gestartet wurde)

    • /var/lib/pgsql/data/recovery.signal

    • /var/lib/pgsql/data/skoor-replication.conf

    • /var/lib/pgsql/data/postmaster.pid

  • Die Replikation wird gestartet

Während des createslave-Prozesses kann der Master normal verwendet werden, um Messdaten von Kollektoren zu übernehmen. Auch die SKOOR-Weboberfläche kann verwendet werden, jedoch kann die Leistung aufgrund der Prüfsummenberechnungen und der Übertragung großer Dateien über das Netzwerk beeinträchtigt werden.
Die Zeit, die benötigt wird, um eine Replikation zum ersten Mal zu initialisieren, hängt hauptsächlich von der Größe der Datenbank, der Netzwerkgeschwindigkeit und der Leistung des Hosts ab.

Jedem Kommentar zur Funktionsweise des Skripts wird die IP-Adresse des Hosts vorangestellt, auf dem die Aufgabe verarbeitet wird.

Nachdem der Befehl ausgeführt wurde, überprüfen Sie seinen Beendigungscode. Es sollte null sein:

...
10.1.0.88 done
10.1.0.88 copied file to /var/lib/pgsql/data/
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
# echo $?
0

Die Replikation wird nun gestartet und ab sofort werden alle Datenbankabfragen, die auf dem Master ausgeführt werden, sofort auf den Slave repliziert.