Bereitstellen von CockroachDB auf einem Drei-Knoten-Cluster unter Ubuntu 16.04

Ein Artikel von CockroachDB

Einführung

CockroachDB ist eine verteilte Open-Source-SQL-Datenbank, die Konsistenz, Skalierbarkeit und Überlebensfähigkeit bietet.

Das Einrichten von CockroachDB ist unkompliziert: Sie installieren es auf mehreren Servern, die jeweils als Node bezeichnet werden, und fügen sie zusammen, um so zu verhalten, als wären sie eine einzelne Entität, die als Cluster bezeichnet wird. Alle Knoten in Ihrem Cluster verhalten sich dann symmetrisch und haben Zugriff auf dieselben Daten.

Mit dieser Art von Design können Sie mit zunehmendem Bedarf an Datenspeicher die Kapazität Ihres Systems auf einfache Weise erhöhen, indem Sie neue Knoten erstellen und diese mit Ihrem vorhandenen Cluster verbinden. Weitere Informationen finden Sie unter CockroachDB’s scalability model.

Tore

In diesem Handbuch erstellen Sie eine verteilte und fehlertolerante Datenbank, indem Sie CockroachDB auf mehreren Servern bereitstellen, einem verteilten Cluster mit mehreren Knoten. Zunächst installieren Sie CockroachDB auf mehreren Servern, starten sie als Knoten und lassen sie dann als Cluster zusammenarbeiten.

Darüber hinaus zeigen wir die Datenverteilung und das Überleben des Clusters nach einem Ausfall und zeigen Ihnen, wie Sie Ihre Anwendung mit CockroachDB verbinden.

In diesem Handbuch wird das Einrichten einer unsicheren Bereitstellung ohne SSL-Verschlüsselung beschrieben, die wir für die Produktion nicht empfehlen. CockroachDB bietet jedoch auch https://www.cockroachlabs.com/docs/deploy-cockroachdb-on-digital-ocean.html Anleitungen zur sicheren Bereitstellung für DigitalOcean an. (Ungeachtet dessen, was im ersten Absatz des Links steht, ist die * sichere * Version des Artikels ausgewählt.)

Voraussetzungen

Bevor Sie beginnen, benötigen Sie Folgendes:

  • 3 Ubuntu 16.04-Server mit mindestens 2 GB RAM with private networking enabled. Sie sollten alle in der gleichen Region sein. In diesem Handbuch werden die folgenden Hostnamen verwendet:

  • * Kakerlake-01 *

  • * Kakerlake-02 *

  • * Kakerlake-03 *

  • Auf jedem Server kann unter https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 ein Benutzer ohne Rootberechtigung mit sudo-Berechtigungen hinzugefügt werden.]

  • Stellen Sie sicher, dass TCP-Verkehr an den folgenden Ports zulässig ist. Wenn Sie den UFW als Ihren Server eingerichtet haben Firewall müssen Sie diese beiden Ports auf jedem Server zulassen:

  • + 26257 + für die Kommunikation zwischen Knoten und Anwendungen: + sudo ufw allow 26257 / tcp +

  • + 8080 + für die Admin-Benutzeroberfläche: + sudo ufw 8080 / tcp + erlauben

  • Optional: Installieren und konfigurieren Sie auf jedem Server TP . (Für kurze Tests ist dies keine feste Anforderung)

Notieren Sie sich die öffentlichen und privaten IP-Adressen aller Ihrer Server. In diesem Handbuch werden für jeden der drei Server eigenständige Hostnamen und IP-Adressen wie * cockroach-01 *, ` und ` verwendet. Klicken Sie in der DigitalOcean-Systemsteuerung auf den Server, um Ihre private IP-Adresse zu ermitteln. Die * Private IP * ist in der obersten Informationsreihe aufgeführt.

Schritt 1 - Installation von CockroachDB

Jeder Knoten in Ihrem Cluster benötigt eine Kopie der Binärdatei + cockroach + (d. H. Program). Wir installieren CockroachDB auf Ihrem ersten Server, * cockroach-01 *, und machen dasselbe auf den anderen Servern.

Um zu beginnen, melden Sie sich mit SSH bei * cockroach-01 * an.

ssh @

Laden Sie anschließend aus dem Ausgangsverzeichnis Ihres sudo-Benutzers die neueste + cockroach + Binärdatei herunter und installieren Sie sie:

wget https://binaries.cockroachdb.com/cockroach-latest.linux-amd64.tgz?s=do

Extrahieren Sie die Binärdatei:

tar -xf cockroach-latest.linux-amd64.tgz?s=do --strip=1 cockroach-latest.linux-amd64/cockroach

Verschieben Sie die Binärdatei so, dass Sie von der Befehlszeile aus leicht darauf zugreifen können:

sudo mv cockroach /usr/local/bin

Stellen Sie sicher, dass auf die Binärdatei zugegriffen werden kann, indem Sie ihre Version überprüfen:

cockroach version

Wenn Ihr System den Befehl "+ cockroach +" nicht findet, lesen Sie diesen Abschnitt erneut, um sicherzustellen, dass Sie das Programm heruntergeladen und extrahiert haben.

Wiederholen Sie diese Befehle abschließend für die beiden anderen Server, die Sie als Knoten verwenden möchten. In unserem Beispiel sind dies * Kakerlake-02 * und * Kakerlake-03 *.

Jetzt, da CockroachDB auf allen Ihren Computern verfügbar ist, können Sie Ihren Cluster einrichten.

Schritt 2 - Starten Sie Ihren ersten Knoten

Ihr erster CockroachDB-Knoten startet Ihren Cluster. An diesem ersten Knoten ist nichts Besonderes. Es ist nur so, dass Sie mit einem beginnen und dann andere dazu bringen müssen, sich diesem anzuschließen. In diesem Abschnitt wird * cockroach-01 * verwendet.

Notieren Sie sich Ihre private IP-Adresse für * cockroach-01 *. Klicken Sie in der DigitalOcean-Systemsteuerung auf diesen Host. Die * Private IP * ist in der obersten Informationsreihe aufgeführt.

Der folgende Befehl zum Starten des Clusters sollte auf * cockroach-01 * ausgeführt werden. Dieser Befehl startet einen Knoten ohne SSL-Verschlüsselung (+ - unsicher +), gibt die Steuerung der Eingabeaufforderung zurück (+ - Hintergrund +) und richtet diesen Knoten so ein, dass er mit anderen Knoten unter Verwendung seiner internen IP-Adresse (`) kommuniziert --Advertise-Host + `). Ersetzen Sie die hervorgehobene Variable "+" durch die tatsächliche private IP-Adresse:

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

Nachdem Ihr Knoten (und Ihr Cluster) jetzt aktiv sind, können Sie seine Details anzeigen, indem Sie das Dashboard der Admin-Benutzeroberfläche aufrufen (ein Tool, das mit CockroachDB gebündelt ist, um Informationen zu Ihrem Cluster anzuzeigen). Gehen Sie zu "+ http: //: 8080 +". Diesmal ist es die öffentliche IP-Adresse.

Hier sehen Sie, dass ein Knoten ausgeführt wird.

image: https: //assets.digitalocean.com/articles/cockroachdb-ubuntu1604/vCwyWTg.png [CockroachDB-Administratoroberfläche mit einem Cluster, auf dem 1 Knoten ausgeführt wird]

In der Kachel * NODE * wird ein Warnausrufezeichen (!) Angezeigt. Wenn Sie mit der Maus über die Warnung fahren, weist dies darauf hin, dass Ihr Cluster * Low Replication * aufweist. Dies bedeutet, dass Sie nicht über genügend Knoten verfügen. Dies ist zu unterschätzen, da wir momentan nur einen Knoten haben. Mit einem Knoten sind Ihre Daten nicht ausfallsicher, da sie nicht ausreichend auf andere Quellen repliziert werden. Wenn der Knoten ausfällt, gehen Ihre Daten verloren.

Wir werden das im nächsten Schritt beheben, indem wir Ihre anderen beiden Server als Knoten zu diesem Cluster hinzufügen. Mit drei Knoten stellt CockroachDB sicher, dass mindestens drei Kopien Ihrer Daten vorhanden sind, sodass ein Knoten verloren gehen kann, ohne dass Daten unwiederbringlich verloren gehen.

Schritt 3 - Hinzufügen der Knoten Zwei und Drei zu Ihrem Cluster

Starten Sie auf Ihrem * cockroach-02 * -Server den Knoten CockroachDB mit dem Befehl + cockroach start +, wie Sie es in Schritt 2 getan haben. Hier aktualisieren wir den Befehl, um anzugeben, dass er über seine private IP-Adresse dem Cluster des ersten Servers beitreten soll. Sie benötigen die private IP-Adresse für * cockroach-02 * und * cockroach-01 *, um die unten hervorgehobenen Variablen ` und ` zu ersetzen.

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

Wiederholen Sie diesen Befehl auf Ihrem dritten Computer, * cockroach-03 *, mit seiner privaten IP-Adresse. Lassen Sie es auch den ersten Knoten verbinden.

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

Wenn Sie jetzt von einem beliebigen Knoten aus auf die Admin-Benutzeroberfläche zugreifen, werden Sie feststellen, dass der Cluster 3 Knoten hat.

  • + http: //: 8080 +

image: https: //assets.digitalocean.com/articles/cockroachdb-ubuntu1604/ZPudCY8.png [CockroachDB Admin-Benutzeroberfläche mit einem Cluster mit 3 Knoten]

Nachdem alle Ihre Knoten über den Cluster verbunden sind, haben sie alle Zugriff auf dieselben Daten.

(Optional) Schritt 4 - Demonstrieren der Datenverteilung

Wann immer Sie Daten auf einen Knoten schreiben, haben alle anderen Knoten im Cluster Zugriff darauf. Die einfachste Möglichkeit, dies zu demonstrieren, besteht darin, die Beispieldaten von CockroachDB zu verwenden und sie dann über built-in SQL-Client anzuzeigen .

Generieren Sie von Ihrem ersten Knoten * cockroach-01 * die Beispieldaten:

cockroach gen example-data | cockroach sql

Dadurch wird eine Beispieldatenbank mit dem Namen "+ startrek +" erstellt.

Sie können jetzt den SQL-Client starten und anzeigen, welche Datenbanken sich in Ihrem Cluster befinden:

cockroach sql
SHOW DATABASES;

Sie werden die "+ startrek +" - Datenbank sehen, die unsere Beispieldaten enthält.

+--------------------+
|      Database      |
+--------------------+
| information_schema |
| pg_catalog         |
| startrek           |
| system             |
+--------------------+

Gehen Sie nun zum Terminal Ihres zweiten Knotens, * cockroach-02 *, und führen Sie dieselben Befehle aus:

cockroach sql
SHOW DATABASES;

Sie werden sehen, dass die Beispieldaten, obwohl sie auf einem anderen Knoten generiert wurden, verteilt wurden und die Datenbank "+ startrek +" von allen Ihren anderen Servern aus zugänglich ist.

Sie können auch anzeigen, dass die Datenbank in der Seitenleiste * DATABASES * der Admin-Benutzeroberfläche auf einem beliebigen Knoten vorhanden ist. Zum Beispiel unter + http: //: 8080 / # / databases / +.

(Optional) Schritt 5 - Entfernen eines Knotens aus dem Cluster

CockroachDB verteilt nicht nur Daten an alle Knoten in Ihrem Cluster, sondern gewährleistet auch die Verfügbarkeit und Integrität Ihrer Daten bei Serverausfällen.

Die Formel für die Toleranz von CockroachDB für Knotenausfälle lautet * (n - 1) / 2 *, wobei * n * die Anzahl der Knoten in Ihrem Cluster ist. In diesem Beispiel mit drei Knoten können wir also den Verlust eines Knotens tolerieren, ohne Daten zu verlieren.

Um dies zu demonstrieren, entfernen wir einen Knoten aus dem Cluster und zeigen, dass alle Daten des Clusters noch verfügbar sind. Anschließend verbinden wir den Knoten wieder mit dem Cluster und stellen sicher, dass alle Aktualisierungen empfangen werden, die während des Offlinemodus durchgeführt wurden.

Starten Sie auf Ihrem zweiten Knoten, * cockroach-02 *, den SQL-Client, wenn Sie noch nicht darin sind:

cockroach sql

Zählen Sie die Anzahl der Zeilen in der Tabelle "+ Anführungszeichen +" der Beispieldatenbank:

SELECT COUNT(*) FROM startrek.quotes;

Sie werden sehen, dass die Tabelle 200 Zeilen enthält. Beenden Sie den SQL-Client mit + CTRL + C +.

Jetzt entfernen wir diesen Knoten aus dem Cluster und stellen fest, dass alle Daten auf den anderen Knoten noch verfügbar sind.

Beenden Sie auf demselben Knoten, den Sie verwendet haben (* cockroach-02 *), den Kakerlakenprozess:

cockroach quit

Wechseln Sie nun zum Terminal eines Ihrer anderen Knoten (zB * cockroach-03 *) und starten Sie den SQL-Client:

cockroach sql

Führen Sie den gleichen Befehl wie zuvor aus, um die Anzahl der Zeilen in der Tabelle "+ quotes +" zu zählen:

SELECT COUNT(*) FROM startrek.quotes;

Obwohl Sie einen der Knoten im Cluster verloren haben, sehen Sie, dass Sie immer noch 200 Datenzeilen haben! Dies bedeutet, dass CockroachDB einen Systemausfall erfolgreich toleriert und die Integrität Ihrer Daten aufrechterhalten hat.

(Optional) Schritt 6 - Wiederverbinden eines Knotens mit dem Cluster

Wir können auch demonstrieren, dass CockroachDB den Server, der wieder online geht, ordnungsgemäß handhabt. Zuerst werden einige Daten gelöscht, dann wird der Knoten, den wir entfernt haben, wieder dem Cluster hinzugefügt. Sobald es wieder verbunden ist, können wir sehen, dass CockroachDB automatisch dieselben Daten vom wiederauferstandenen Knoten entfernt.

Löschen Sie auf einem Ihrer derzeit aktiven Knoten, z. B. "* cockroach-03 *", alle Anführungszeichen, bei denen "+ episode +" größer als 50 ist.

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

Sie werden sehen, dass jetzt 133 Datenzeilen vorhanden sind.

Kehren Sie nun zum Terminal des Knotens zurück, den wir aus dem Cluster entfernt haben (* cockroach-02 *), und lassen Sie ihn erneut dem Cluster beitreten:

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

Starten Sie den integrierten SQL-Client:

cockroach sql

Zählen Sie nun die Anzahl der Zeilen, die die Tabelle "+ Anführungszeichen +" enthält:

SELECT COUNT(*) FROM startrek.quotes;

Es sollte immer noch 133 sein.

Obwohl der Knoten zum Zeitpunkt der Aktualisierung offline war, wird er aktualisiert, sobald er wieder dem Cluster beitritt.

Wenn Sie möchten, können Sie jetzt die Beispieldaten entfernen (weiterhin mit der CLI "+ cockroach sql +"):

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

(Optional) Schritt 7 - Anschließen einer Anwendung

Wenn Ihr Cluster eingerichtet ist und ausgeführt wird, können Sie ihn als Datenbank für eine Anwendung verwenden. Dies erfordert zwei Teile:

  • einen Treiber zur Verwendung mit Ihrer Anwendung (CockroachDB funktioniert mit PostgreSQL-Treibern)

  • eine entsprechende Verbindungszeichenfolge

Diese Anleitung zeigt ein allgemeines Beispiel. Sie müssen Angaben zu Ihrer eigenen Anwendung machen.

Wählen und installieren Sie einen geeigneten Treiber (https://www.cockroachlabs.com/docs/install-client-drivers.html[aus der Liste der kompatiblen PostgreSQL-Client-Treiber) für Ihre Anwendung.

Verwenden Sie dann an jedem Punkt, an dem Ihre Anwendung eine Verbindung zur Datenbank herstellen soll, eine entsprechende Verbindungszeichenfolge.

Ihre Verbindungszeichenfolge sollte eine Verbindung zum Port "+ 26257 " herstellen und die IP-Adresse eines beliebigen Knotens verwenden. Dies bedeutet, dass Ihre Firewall auch Verbindungen über den Port " 26257 +" zulassen muss (wie in den Voraussetzungen festgelegt).

Hier ist zum Beispiel eine PHP / PDO-Verbindungszeichenfolge, die den Benutzer "+ sammy " mit der Datenbank " bank " auf " localhost +" verbindet:

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

Für weitere Hilfe bei der Verwendung der PostgreSQL-Client-Treiber stellt CockroachDB https://www.cockroachlabs.com/docs/build-a-test-app.html eine Reihe von Codebeispielen zur Verfügung.

Fazit

Zu diesem Zeitpunkt haben Sie einen Cluster mit drei Knoten erstellt, die verteilten und überlebensfähigen Funktionen von CockroachDB und die Vorgehensweise zum Verbinden des Clusters mit einer Anwendung kennengelernt.

Da CockroachDB ein sich schnell bewegendes Projekt ist, wird in Ihrem Dashboard gelegentlich die Meldung * Es ist eine neuere Version von CockroachDB verfügbar. * Verwenden Sie die Schaltfläche * Aktualisieren *, um einen Link zu der aktualisierten Binärdatei anzuzeigen, die zum Zeitpunkt von schriftlich müssen Sie manuell herunterladen und installieren.

Wenn Sie Ihre Bereitstellung horizontal skalieren möchten, indem Sie weitere Knoten hinzufügen, befolgen Sie die Schritte für den zweiten und dritten Knoten oben auf einem vierten Knoten usw. Alles was Sie tun müssen, ist die + cockroach + Binärdatei zu installieren und die neuen Knoten Ihrem bestehenden Cluster beizutreten.

Wenn Sie CockroachDB nach dem Auschecken in der Produktion ausführen möchten, lesen Sie bitte deren recommended production settings.

Und schließlich ist hier ein allgemeiner Link zu CockroachDB’s documentation.