Einführung in CockroachDB und Aufbau eines Failover-Clusters unter Ubuntu 16.04

Ursprünglicher Autor: Sean Loiselle
  • Übersetzung
  • Tutorial
Vorwort des Übersetzers: CockroachDB ist ein relativ junges relationales Open-Source- Datenbankverwaltungssystem (Apache 2.0-Lizenz), das ursprünglich für die Verteilung (mit horizontaler Skalierung) und Fehlertoleranz entwickelt wurde . Die Autoren der 2015 gegründeten Cockroach Labs wollten "die Fülle der SQL-Funktionalität mit der horizontalen Verfügbarkeit von NoSQL-Lösungen kombinieren". Dieser Leitfaden wurde von einem Mitarbeiter des Entwicklungsunternehmens verfasst und auf der Website des Cloud-Anbieters DigitalOcean veröffentlicht, um IT-Spezialisten dieses DBMS vorzustellen und dessen Verwendung zu demonstrieren.


Einleitung


CockroachDB ist ein Open-Source-verteiltes DBMS (SQL), das Datenkonsistenz, Skalierbarkeit und Überlebensfähigkeit bietet.

Das Einrichten von CockroachDB ist einfach: Installieren Sie es auf mehreren Servern ( Knoten ) und fassen Sie sie für die Zusammenarbeit ( Cluster ) zu einem Ganzen zusammen . Alle Clusterknoten verhalten sich "symmetrisch" und bieten Zugriff auf dieselben Daten. Wenn der Speicher für Daten erweitert werden muss, reicht es bei der verwendeten Architektur aus, neue Knoten zu erstellen und eine Verbindung zum Cluster herzustellen.

Details zur Funktionsweise finden Sie in der offiziellen Dokumentation zum CockroachDB-Skalierbarkeitsmodell .(Hinweis: Wenn einer der Knoten das Limit für die Menge der gespeicherten Daten erreicht, versucht CockroachDB, die Daten auf andere Knoten zu verteilen, auf denen noch freier Speicherplatz verfügbar ist. Der Replikationsfaktor wird durch die Einstellungen der Replikationszonen bestimmt .)

Bitte beachten Sie, dass zum Zeitpunkt der Erstellung dieses Handbuchs [und seiner Übersetzung - ca. trans.] CockroachDB hatte Beta-Status, daher wird empfohlen, dieses Dokument zu verwenden, um sich mit der Technologie vertraut zu machen und das Produkt nicht zur Verwendung in unternehmenskritischer Software bereitzustellen.

Das Handbuch bietet keinen sicheren Zugriff auf die Cluster-Verwaltungsschnittstelle. Jeder kann sich mit ihm in Verbindung setzen, wenn er die richtige URL kennt. Wenn Sie diese Konfiguration in der Produktion verwenden möchten, müssen Sie den Zugriff auf Port 8080 durch Firewall-Regeln blockieren.

Da dieses Handbuch eine unsichere Installation ohne SSL-Verschlüsselung beschreibt, wird die Verwendung in der Produktion nicht empfohlen. Einzelheiten zur sicheren Installation finden Sie in einem ausführlicheren Artikel, in dem die Erstellung von Zertifikaten beschrieben wird. Anschließend wird am Anfang jedes Knotens ein Verzeichnis mit diesen Zertifikaten als Parameter hinzugefügt.

Vorbereitung


Bevor Sie beginnen, benötigen Sie:

  • Drei Server mit Ubuntu 16.04 mit mehr als 2 GB RAM und aktivierter Option Private Networking [für DigitalOcean]. Alle von ihnen sollten in einer Region sein. Wie ihre Namen werden später in diesem Artikel verwendet werden: cockroach-01, cockroach-02, cockroach-03.
  • Auf jedem Server muss ein Administrator-Benutzer hinzugefügt werden (nicht root, aber mit sudo-Berechtigungen).
  • Auf allen Servern muss an zwei Ports TCP-Verkehr aktiviert sein. Wenn UFW als Firewall konfiguriert ist, müssen Sie diese entsprechend konfigurieren:
    • 26257 - für die Interaktion zwischen Knoten und mit der Anwendung ( sudo ufw allow 26257/tcp);
    • 8080 - Für Admin UI ( sudo ufw allow 8080/tcp) Verwaltungsschnittstelle .
  • Optional: Installieren und konfigurieren Sie NTP auf jedem Server. (Wenn Sie ein DBMS für kurze Tests bereitstellen, ist dies nicht erforderlich.)

Ermitteln Sie die internen und externen IP-Adressen der einzelnen Server. Weiter im Handbuch verwenden sie die Notation der Form cockroach_01_public_ipund cockroach_01_private_ip. Um die interne IP-Adresse in DigitalOcean zu ermitteln, rufen Sie die Systemsteuerung auf und sehen Sie sich das Feld Private IP im oberen Informationsblock an.

1. Installieren Sie CockroachDB


Jeder Knoten im Cluster muss über eine ausführbare Datei verfügen cockroach. Im Folgenden wird die Installation von CockroachDB auf dem ersten Server ( cockroach-01) beschrieben, mit der analog Operationen auf den verbleibenden Knoten ausgeführt werden müssen.

Wir stellen über SSH eine Verbindung zum Server her. Anschließend laden wir die neueste Version der Binärdatei herunter und installieren sie im Home-Verzeichnis des Benutzers cockroach:

$ ssh sammy@cockroach_01_public_ip
$ wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz?s=do
$ tar -xf cockroach-latest.linux-amd64.tgz?s=do --strip=1 cockroach-latest.linux-amd64/cockroach
$ sudo mv cockroach /usr/local/bin

Stellen Sie sicher, dass die ausführbare DBMS-Datei verfügbar ist, indem Sie die Version erkennen:

$ cockroach version
Build Tag:    v1.0-rc.1-dirty
Build Time:   2017/05/01 18:33:34
Distribution: CCL
Platform:     linux amd64
Go Version:   go1.8.1
C Compiler:   gcc 6.3.0
Build SHA-1:  2d4d1ab5c42efb5accf73c9876e6ffd934fdc9e6
Build Type:   release

Wenn das System nach diesen Schritten den Befehl nicht findet cockroach, stellen Sie sicher, dass die Datei tatsächlich heruntergeladen, entpackt und verschoben wurde.

Wiederholen Sie diesen Vorgang auf den beiden anderen Servern , die Cluster - Knoten werden ( cockroach-02und cockroach-03). Danach können Sie den Cluster selbst konfigurieren.

2. Konfigurieren Sie den ersten Knoten


Der erste CockroachDB-Knoten - cockroach-01- startet den Cluster. Die Konfiguration hat aber nichts Besonderes: Sie startet nur als ein DBMS-Server, an den sich dann andere anschließen.

Führen Sie den cockroach-01folgenden Befehl aus, um den Cluster zu starten :

cockroach start --insecure --background --advertise-host=cockroach_01_private_ip

Es startet den Knoten ohne SSL-Verschlüsselung ( --insecure), gibt die Befehlszeile für die weitere Arbeit zurück ( --background) und löst den Knoten aus, um über die interne IP ( --advertise-host) mit anderen Knoten zu kommunizieren . Das obige cockroach_01_private_ipsollte durch die reale interne IP des ersten Servers ersetzt werden.

Beachten Sie, dass Sie beim Starten eines Knotens eine Reihe zusätzlicher Flags festlegen können, die das Serververhalten ändern (z. B. das Verzeichnis, in dem Daten gespeichert sind). Alle diese Flaggen sind in der offiziellen Dokumentation (in englischer Sprache) beschrieben.

Nachdem der Knoten (und der Cluster) zu arbeiten begonnen haben, können Sie Informationen dazu über das in CockroachDB integrierte Control Panel der Administrator-Benutzeroberfläche anzeigen, um Informationen zum Cluster abzurufen. Gehen Sie zur Adresse http://cockroach_01_public_ip:8080(jetzt wird die öffentliche IP bereits verwendet).

Die Tatsache, dass der Knoten erfolgreich gestartet wurde, wird in der Benutzeroberfläche angezeigt:


Wenn Sie mit der Maus über ein Benachrichtigungsausrufezeichen (!) Im NODE- Block fahren , wird eine Erklärung angezeigt : Der Cluster verfügt über eine niedrige Replikationsstufe ( Low Replication ), da nicht genügend Knoten vorhanden sind. Bei einem Knoten, der gerade ausgeführt wird, werden die Daten im Falle eines Ausfalls nicht wiederhergestellt (Informationen dazu, wie viele Knoten für einen stabilen Betrieb erforderlich sind, finden Sie weiter unten in Abschnitt 5) .

Die Situation wird in der nächsten Phase korrigiert, wenn zwei zusätzliche Server als zwei Knoten des Clusters hinzugefügt werden. Mit drei Knoten garantiert CockroachDB die Verfügbarkeit von drei Kopien aller Daten und stellt deren Wiederherstellung im Falle eines Ausfalls eines der Knoten sicher.

3. Hinzufügen des zweiten und dritten Knotens zum Cluster


Führen Sie den cockroach-02Befehl auf dem Server cockroachso aus, wie er im vorherigen Schritt für den ersten Knoten ausgeführt wurde, jedoch mit dem einzigen Unterschied. In den Parametern des DBMS weisen wir darauf hin, dass der erste Teilnehmer über die interne IP-Adresse verbunden werden muss. In dem Befehl ersetzen die beiden , nachstehenden Variablen mit IP ( cockroach_02_private_ipund cockroach_01_private_ip):

$ cockroach start --insecure --background \
    --advertise-host=cockroach_02_private_ip \
    --join=cockroach_01_private_ip:26257

Führen Sie denselben Befehl auf dem dritten Server ( cockroach-03) aus und geben Sie dort dessen interne IP an. Befestigen Sie es auch am ersten Knoten:

$ cockroach start --insecure --background \
    --advertise-host=cockroach_03_private_ip \
    --join=cockroach_01_private_ip:26257

Gehen Sie zur Verwaltungsschnittstelle (Admin UI) eines beliebigen Knotens (zum Beispiel http://cockroach_03_public_ip:8080) und stellen Sie sicher, dass der Cluster jetzt aus drei Knoten besteht:



Alle Knoten sind miteinander verbunden und haben Zugriff auf dieselben Daten.

4 (optional). Demonstration der Datenübertragung zwischen Knoten


Jeder Datensatz von Daten zu einem beliebigen Knoten bedeutet, dass er in allen anderen Knoten des Clusters vorhanden ist. Die einfachste Möglichkeit, dies zu demonstrieren, besteht darin, die Beispieldatengenerierung aus CockroachDB zu verwenden und das Ergebnis mit dem integrierten SQL-Client anzuzeigen. Generieren

Sie auf dem ersten Knoten cockroach-01Daten:

$ cockroach gen example-data | cockroach sql

Eine Datenbank für die Experimente wird angezeigt startrek. Jetzt können Sie den SQL-Client starten und die Liste der Datenbanken im Cluster anzeigen:

$ cockroach sql

> SHOW DATABASES;
+--------------------+
|      Database      |
+--------------------+
| information_schema |
| pg_catalog         |
| startrek           |
| system             |
+--------------------+

Bitte beachten Sie, dass CockroachDB mit einem eigenen SQL-Dialekt arbeitet, der Erweiterungen des SQL-Standards aufweist, die sich von denen anderer DBMS unterscheiden.

Auf dem zweiten Knoten können cockroach-02Sie dieselben Befehle ausführen:

$ cockroach sql

> SHOW DATABASES;

Es ist leicht zu erkennen, dass die auf einem Knoten (der Datenbank startrek) erstellten Daten auf anderen Knoten verfügbar sind. Sie können die Liste der im Cluster vorhandenen Datenbanken auf der Registerkarte DATABASES der Admin-Benutzeroberfläche auf einem beliebigen Knoten anzeigen (z. B. http://cockroach_01_public_ip:8080/#/databases/).

5 (optional). Einen Knoten aus einem Cluster entfernen


CockroachDB garantiert Datenverfügbarkeit und Datenintegrität bei einem Serverausfall. Das DBMS bleibt im Falle eines Knotenausfalls stabil. (n-1)/2Dabei nhandelt es sich um die Gesamtzahl der Knoten im Cluster. In unserem Beispiel mit drei Knoten kann daher ein Knoten ausfallen (ohne Daten zu verlieren).

Um dies zu demonstrieren, entfernen Sie einen Knoten aus dem Cluster und prüfen Sie, ob noch Daten verfügbar sind. Anschließend (in Absatz 6) verbinden wir den Knoten erneut mit dem Cluster und stellen sicher, dass er alle Änderungen erhält, die während seines Ausfalls aufgetreten sind. Führen

Sie auf dem zweiten Knoten cockroach-02den SQL-Client aus und zählen Sie die Anzahl der Zeilen in der Tabelle quotes:

$ cockroach sql

> SELECT COUNT(*) FROM startrek.quotes;

Die Antwort wird 200 Zeilen sein. Sie können den SQL-Client beenden, indem Sie auf klicken+.

Entfernen Sie nun diesen Knoten aus dem Cluster und stellen Sie sicher, dass die Daten auf anderen Knoten verbleiben. Schließen Sie dazu auf dem Knoten cockroach-02den CockroachDB-Prozess mit dem folgenden Befehl ab:

$ cockroach quit

Gehen Sie zu einem anderen Knoten (zum Beispiel cockroach-03), starten Sie den SQL-Client und überprüfen Sie die Anzahl der Zeilen in derselben Tabelle:

$ cockroach sql

 SELECT COUNT(*) FROM startrek.quotes;

Nach dem Trennen eines der Knoten stehen die gleichen 200 Leitungen zur Verfügung.

6 (optional). Erneutes Verbinden eines Knotens mit einem Cluster


Zeigen Sie nun die korrekte Reaktion von CockroachDB auf die Wiederherstellung der Hostverfügbarkeit. Dazu löschen wir zuerst einige der Daten, geben dann den getrennten Knoten an den Cluster zurück und überprüfen dann, ob die Daten auf dem Cluster relevant sind. Löschen

Sie auf einem der Arbeitsknoten (zum Beispiel cockroach-03) einen Teil der Daten aus der Tabelle quotes:


> DELETE FROM startrek.quotes WHERE episode > 50;
> SELECT COUNT(*) FROM startrek.quotes;

Verbleibende 133 Zeilen. Kehren Sie zu dem Knoten zurück, der vom Cluster ausgeschlossen wurde ( cockroach-02), und führen Sie ihn erneut aus:

$ cockroach start --insecure --background \
    --advertise-host=cockroach_02_private_ip \
    --join=cockroach_01_private_ip:26257

Führen Sie den SQL-Client hier aus und überprüfen Sie die Anzahl der Zeilen in der Tabelle quotes

$ cockroach sql
> SELECT COUNT(*) FROM startrek.quotes;

Die Ausgabe sollte wieder 133 anzeigen . Daher hat der Offline-Knoten nach der Rückkehr zum Cluster Änderungen erhalten.

Führen Sie Folgendes aus, um alle zuvor generierten Daten zu löschen cockroach sql:


> DROP TABLE quotes;
> DROP TABLE episodes;
> DROP DATABASE startrek;

7 (optional). Anwendungsverbindung


Um CockroachDB aus einer Anwendung heraus zu verwenden, benötigen Sie:

  1. Treiber von der Anwendung unterstützt (CockroachDB arbeitet mit Treibern für PostgreSQL);
  2. Verbindungszeichenfolge.

Das Folgende ist ein allgemeines Beispiel - Ihre Anwendung benötigt möglicherweise andere Daten.

Wählen Sie den Treiber aus der Liste der PostgreSQL-kompatiblen Clients für Ihre Anwendung aus und installieren Sie ihn.
Bitte beachten Sie, dass CockroachDB das PostgreSQL-Protokoll unterstützt, die Syntax der SQL-Sprache jedoch anders ist und daher dieses DBMS kein gebrauchsfertiger Ersatz für PostgreSQL ist.

Die Verbindungszeichenfolge muss auf Port 26257 und die IP-Adresse eines beliebigen Clusterknotens verweisen. Beachten Sie, dass die Firewall Verbindungen an diesem Port zulassen muss.

Eine Verbindung in PHP / PDO für einen Benutzer sammyzu einer Datenbank bankauf einem lokalen Computer ( localhost) würde beispielsweise so aussehen:

PDO('pgsql:host=localhost;port=26257;dbname=bank;sslmode=disable',
    'sammy', null, array(
      PDO::ATTR_ERRMODE          => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_EMULATE_PREPARES => true,
  ));

Zahlreiche Beispiele für die Verwendung von PostgreSQL-Client-Treibern für verschiedene Programmiersprachen finden Sie in der CockroachDB-Dokumentation .

Fazit


Der erstellte Cluster aus drei Knoten hat dazu beigetragen, die Grundfunktionen von CockroachDB und die Möglichkeit, Anwendungen damit zu verbinden, zu demonstrieren.

Da sich CockroachDB aktiv entwickelt, sehen Sie eines Tages in Ihrem Control Panel eine Meldung über die Verfügbarkeit einer neuen Version des Produkts ( Es ist eine neuere Version von CockroachDB verfügbar ). Wenn Sie auf die Schaltfläche Aktualisieren klicken , wird ein Link zu der aktualisierten Binärdatei angezeigt, deren Download und Installation derzeit manuell erfolgen muss.

Zur horizontalen Skalierung der DBMS-Installation, d.h. Wenn Sie neue Knoten hinzufügen, müssen Sie die Schritte für den zweiten und dritten Knoten wiederholen: Installieren Sie einfach die ausführbare Datei cockroachund führen Sie sie mit einer Verbindung zum Cluster aus.

Überprüfen Sie die empfohlenen Einstellungen, bevor Sie CockroachDB in der Produktion ausführen . Der Hauptlink zur offiziellen Produktdokumentation (in englischer Sprache) lautet www.cockroachlabs.com/docs .

Aktualisiert (Mai 11): Final Release CockroachDB 1.0 hat bereits stattgefunden . In seiner offiziellen Ankündigung heißt es, dass das DBMS in der Produktion von Baidu und Heroic Labs verwendet wird.

Jetzt auch beliebt: