Comment déployer CockroachDB sur un cluster à trois nœuds sur Ubuntu 16.04

Un article de CockroachDB

introduction

CockroachDB est une base de données SQL distribuée open source offrant cohérence, évolutivité et capacité de survie.

La configuration de CockroachDB est simple: vous l’installez sur plusieurs serveurs, nommés node, et vous les associez pour qu’ils agissent comme s’ils ne formaient qu’une seule entité, appelée cluster. Tous les nœuds de votre cluster se comportent alors de manière symétrique et ont accès aux mêmes données.

Avec ce type de conception, à mesure que vos besoins en stockage de données augmentent, vous pouvez facilement augmenter la capacité de votre système en créant de nouveaux nœuds et en les reliant à votre cluster existant. Pour plus de détails, vous pouvez consulter le site CockroachDB.

Buts

Dans ce guide, vous allez créer une base de données distribuée et tolérante aux pannes en déployant CockroachDB sur plusieurs serveurs, un cluster multi-nœuds distribué. Vous commencerez par installer CockroachDB sur plusieurs serveurs, à les démarrer en tant que nœuds, puis à les faire fonctionner ensemble en tant que cluster.

De plus, nous allons vous montrer la répartition des données et la manière dont le cluster survit à l’échec, et vous montrer comment connecter votre application à CockroachDB.

Ce guide traite de la configuration d’un déploiement non sécurisé sans chiffrement SSL, ce que nous ne recommandons pas pour la production. Cependant, CockroachDB offre également des instructions de déploiement secure pour DigitalOcean. (Malgré ce que dit le premier paragraphe du lien, la version * Secure * de l’article est sélectionnée.)

Conditions préalables

Avant de commencer, vous aurez besoin des éléments suivants:

Notez les adresses IP publiques et privées de tous vos serveurs. Dans ce guide, nous utiliserons des noms d’hôte et des adresses IP de substitution, tels que * cockroach-01 *, ` et ` pour chacun des trois serveurs. Pour trouver votre adresse IP privée, cliquez sur le serveur dans le panneau de configuration de DigitalOcean. * L’IP privée * est répertoriée dans la rangée supérieure d’informations.

Étape 1 - Installation de CockroachDB

Chaque nœud de votre cluster doit avoir une copie du binaire + cockroach + (programme, par exemple). Nous allons installer CockroachDB sur votre premier serveur, * cockroach-01 *, puis procéder de la même manière sur les autres serveurs.

Pour commencer, connectez-vous à * cockroach-01 * avec SSH.

ssh @

Ensuite, à partir du répertoire personnel de votre utilisateur sudo, téléchargez et installez le dernier binaire + cockroach +:

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

Extraire le binaire:

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

Déplacez le binaire pour qu’il soit facilement accessible depuis la ligne de commande:

sudo mv cockroach /usr/local/bin

Assurez-vous que le binaire est accessible en vérifiant sa version:

cockroach version

Si votre système ne parvient pas à trouver la commande + cockroach +, veuillez revoir cette section pour vous assurer que vous avez téléchargé et extrait le programme.

Enfin, répétez ces commandes pour les deux autres serveurs que vous prévoyez d’utiliser en tant que nœuds. Dans notre exemple, il s’agit de * cockroach-02 * et * cockroach-03 *.

Maintenant que CockroachDB est disponible sur toutes vos machines, vous pouvez configurer votre cluster.

Étape 2 - Démarrer votre premier nœud

Votre premier nœud CockroachDB démarrera votre cluster. Ce premier noeud n’a rien de spécial; c’est juste que vous devez commencer par un, puis que d’autres le rejoignent. Nous allons utiliser * cockroach-01 * pour cette section.

Notez votre adresse IP privée pour * cockroach-01 *. Dans le panneau de configuration de DigitalOcean, cliquez sur cet hôte. * L’IP privée * est répertoriée dans la rangée supérieure d’informations.

La commande suivante pour démarrer le cluster doit être exécutée sur * cockroach-01 *. Cette commande démarre un nœud sans chiffrement SSL (+ - insecure +), renvoie le contrôle de l’invite de commande (+ - background +) et configure ce nœud pour qu’il puisse communiquer avec les autres nœuds à l’aide de son adresse IP interne (+ --advertise-host + `). Remplacez la variable en surbrillance ci-dessous, `++, par l’adresse IP privée réelle:

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

Maintenant que votre nœud (et votre cluster) est actif, vous pouvez afficher ses détails en consultant son tableau de bord de l’interface utilisateur administrative (un outil fourni avec CockroachDB pour afficher des informations sur votre cluster). Allez sur + http: //: 8080 +. C’est l’adresse IP publique cette fois.

Ici, vous verrez qu’un seul nœud est en cours d’exécution.

image: https: //assets.digitalocean.com/articles/cockroachdb-ubuntu1604/vCwyWTg.png [UI de l’administrateur CockroachDB montrant un cluster exécutant 1 nœud]

Vous remarquerez un point d’exclamation d’avertissement (!) Dans la tuile * NODE *. Si vous passez la souris sur l’avertissement, cela indique que votre cluster dispose de * Réplication faible *, ce qui signifie que vous n’avez pas assez de nœuds. C’est compréhensible, car nous n’avons qu’un seul nœud pour le moment. Avec un nœud, vos données ne résistent pas aux pannes car elles ne sont pas suffisamment répliquées vers d’autres sources. Si le nœud tombe en panne, vos données seront perdues.

Nous allons résoudre ce problème à l’étape suivante en ajoutant vos deux autres serveurs en tant que nœuds à ce cluster. En disposant de trois nœuds, CockroachDB garantit qu’il existe au moins trois copies de vos données, de sorte qu’il est possible de perdre un nœud sans perdre irrémédiablement des données.

Étape 3 - Ajout des nœuds deux et trois à votre cluster

Sur votre serveur * cockroach-02 *, démarrez le nœud CockroachDB avec la commande + cockroach start + comme vous l’avez fait à l’étape 2. Ici, nous mettons à jour la commande pour indiquer que vous souhaitez que le groupe rejoigne le premier cluster via son adresse IP privée. Vous aurez besoin de l’adresse IP privée de * cockroach-02 * et * cockroach-01 * pour remplacer les variables mises en surbrillance ci-dessous, ` et `.

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

Répétez cette commande sur votre troisième machine, * cockroach-03 *, avec son adresse IP privée. Faites-le rejoindre le premier noeud également.

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

Désormais, lorsque vous accédez à l’interface utilisateur administrateur à partir de n’importe quel nœud, vous verrez que le cluster comporte 3 nœuds.

  • + http: //: 8080 +

image: https: //assets.digitalocean.com/articles/cockroachdb-ubuntu1604/ZPudCY8.png [UI de l’administrateur CockroachDB montrant un cluster exécutant 3 nœuds]

Maintenant que tous vos nœuds sont connectés via le cluster, ils auront tous accès aux mêmes données.

(Facultatif) Étape 4 - Démonstration de la distribution de données

Chaque fois que vous écrivez des données sur un nœud, tous les autres nœuds du cluster y ont accès. Le moyen le plus simple de démontrer cela consiste à utiliser les exemples de données de CockroachDB, puis à les afficher à partir du built-in client SQL .

À partir de votre premier noeud, * cockroach-01 *, générez les données d’exemple:

cockroach gen example-data | cockroach sql

Cela crée un exemple de base de données appelé + startrek +.

Vous pouvez maintenant lancer le client SQL et voir quelles bases de données se trouvent dans votre cluster:

cockroach sql
SHOW DATABASES;

La base de données + startrek + est répertoriée. Elle contient nos données d’exemple.

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

Maintenant, déplacez-vous vers le terminal de votre second noeud, * cockroach-02 *, et exécutez les mêmes commandes:

cockroach sql
SHOW DATABASES;

Vous verrez que même si vous avez généré les exemples de données sur un autre nœud, celles-ci ont été distribuées et la base de données + startrek + est accessible à partir de tous vos autres serveurs.

Vous pouvez également voir que la base de données existe à partir de la barre latérale * DATABASES * de l’interface utilisateur d’administration sur n’importe quel nœud; par exemple, à + ​​http: //: 8080 / # / databases / +.

(Facultatif) Étape 5 - Suppression d’un nœud du cluster

En plus de distribuer les données à tous les nœuds de votre cluster, CockroachDB garantit également la disponibilité et l’intégrité de vos données en cas de panne du serveur.

La formule de tolérance de CockroachDB à l’échec des noeuds est * (n - 1) / 2 *, où * n * est le nombre de noeuds de votre cluster. Ainsi, dans cet exemple de trois nœuds, nous pouvons tolérer la perte d’un nœud sans perte de données.

Pour illustrer cela, nous allons supprimer un nœud du cluster et montrer que toutes les données du cluster sont toujours disponibles. Nous allons ensuite rejoindre le nœud au cluster et voir qu’il reçoit toutes les mises à jour effectuées pendant qu’il était hors ligne.

À partir de votre deuxième noeud, * cockroach-02 *, lancez le client SQL si vous n’y êtes pas encore:

cockroach sql

Comptez le nombre de lignes dans la table + quotes + de la base de données exemple:

SELECT COUNT(*) FROM startrek.quotes;

Vous verrez que la table a 200 lignes. Quittez le client SQL en appuyant sur + CTRL + C +.

Nous allons maintenant supprimer ce nœud du cluster et voir que toutes les données sont toujours disponibles à partir des autres nœuds.

À partir du même nœud que vous utilisiez (* cockroach-02 *), arrêtez le processus de blatte:

cockroach quit

Passez maintenant au terminal de l’un de vos autres nœuds (* cockroach-03 *, par exemple) et lancez le client SQL:

cockroach sql

Exécutez la même commande que précédemment pour compter le nombre de lignes dans la table + quotes +:

SELECT COUNT(*) FROM startrek.quotes;

Malgré la perte d’un des nœuds du cluster, vous constaterez qu’il vous reste 200 lignes de données! Cela signifie que CockroachDB a toléré avec succès une défaillance du système et maintenu l’intégrité de vos données.

(Facultatif) Étape 6 - Rejoin d’un nœud au cluster

Nous pouvons également démontrer que CockroachDB gère avec élégance le retour du serveur en ligne. Nous allons d’abord effacer certaines données, puis le nœud que nous avons supprimé doit rejoindre le cluster. Une fois qu’il rejoint, nous pourrons voir que CockroachDB supprime automatiquement les mêmes données du nœud ressuscité.

Dans un de vos noeuds en cours d’exécution, dites * cockroach-03 *, supprimez toutes les citations pour lesquelles le + épisode + est supérieur à 50.

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

Vous verrez qu’il y a maintenant 133 lignes de données.

Revenons maintenant au terminal du nœud que nous avons supprimé du cluster (* cockroach-02 *) et faites-le rejoindre le cluster:

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

Lancez le client SQL intégré:

cockroach sql

Maintenant, comptez le nombre de lignes que contient la table + quotes +:

SELECT COUNT(*) FROM startrek.quotes;

Il devrait encore être 133.

Ainsi, bien qu’il soit hors ligne lors de la mise à jour, le nœud est mis à jour dès qu’il rejoint le cluster.

Si vous le souhaitez, vous pouvez maintenant supprimer les exemples de données (en utilisant toujours la CLI + cockroach sql +):

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

(Facultatif) Étape 7 - Connexion à une application

Lorsque votre cluster est opérationnel, vous pouvez l’utiliser comme base de données pour une application. Cela nécessite deux parties:

  • un pilote à utiliser avec votre application (CockroachDB fonctionne avec les pilotes PostgreSQL)

  • une chaîne de connexion appropriée

Ce guide montre un exemple général; vous devrez fournir des détails pour votre propre application.

Choisissez et installez un pilote approprié de la liste des pilotes de client PostgreSQL compatibles pour votre application.

Ensuite, utilisez une chaîne de connexion appropriée à tout moment où vous avez besoin que votre application se connecte à la base de données.

Votre chaîne de connexion doit se connecter au port + 26257 + et peut utiliser l’adresse IP de n’importe quel nœud. Cela signifie que votre pare-feu doit également autoriser les connexions sur le port + 26257 + (comme indiqué dans les conditions préalables).

Par exemple, voici une chaîne de connexion PHP / PDO qui connecte l’utilisateur + sammy + à la base de données + bank + sur + localhost +:

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

Pour plus d’aide sur l’utilisation des pilotes clients PostgreSQL, CockroachDB propose https://www.cockroachlabs.com/docs/build-a-test-app.html [un nombre d’échantillons de code disponibles].

Conclusion

À ce stade, vous avez créé un cluster à trois nœuds, vu les fonctionnalités distribuées et de survie de CockroachDB, et expliqué comment connecter le cluster à une application.

CockroachDB étant un projet évoluant rapidement, vous verrez parfois apparaître sur votre tableau de bord le message * Une version plus récente de CockroachDB est disponible. * Utilisez le bouton * Mettre à jour * pour afficher un lien vers le binaire mis à jour, qui écrit, vous devrez télécharger et installer manuellement.

Si vous souhaitez redimensionner votre déploiement horizontalement en ajoutant plus de nœuds, suivez les étapes pour les deuxième et troisième nœuds ci-dessus sur un quatrième nœud, etc. Tout ce que vous avez à faire est d’installer le binaire + cockroach + et de faire en sorte que le ou les nouveaux nœuds rejoignent votre cluster existant.

Si, après vérification, vous souhaitez exécuter CockroachDB en production, veuillez lire les https://www.cockroachlabs.com/docs/recommended-production-settings.html (paramètres de production recommandés).

Et enfin, voici un lien général vers la documentation de CockroachDB.