Introduction
CockroachDB est une base de données SQL distribuée conçue pour la résilience et la scalabilité horizontale. Ce tutoriel avancé couvre le déploiement d'un cluster multi-région avec réplication fine, la configuration de zones et l'utilisation de fonctionnalités comme les changefeeds. Vous apprendrez à garantir la haute disponibilité tout en optimisant les performances pour des charges de travail transactionnelles critiques.
Prérequis
- Docker et Docker Compose v2.20+
- CockroachDB v24.3+
- Connaissances solides en SQL et administration systèmes
- Accès à 3 machines ou VMs dans des régions distinctes
- Certificats TLS prêts à l'emploi
Créer le fichier Docker Compose
version: '3.8'
services:
roach1:
image: cockroachdb/cockroach:v24.3.0
command: start --certs-dir=/certs --join=roach1,roach2,roach3 --advertise-addr=roach1:26257
volumes:
- ./certs:/certs
- roach1-data:/cockroach/cockroach-data
roach2:
image: cockroachdb/cockroach:v24.3.0
command: start --certs-dir=/certs --join=roach1,roach2,roach3 --advertise-addr=roach2:26257
volumes:
- ./certs:/certs
- roach2-data:/cockroach/cockroach-data
roach3:
image: cockroachdb/cockroach:v24.3.0
command: start --certs-dir=/certs --join=roach1,roach2,roach3 --advertise-addr=roach3:26257
volumes:
- ./certs:/certs
- roach3-data:/cockroach/cockroach-data
volumes:
roach1-data:
roach2-data:
roach3-data:Ce fichier compose définit un cluster à trois nœuds avec des volumes persistants et des certificats. Chaque nœud utilise --join pour former le cluster et --advertise-addr pour la communication inter-nœuds.
Initialiser le cluster
#!/bin/bash
cockroach init --certs-dir=certs --host=roach1:26257
cockroach sql --certs-dir=certs --host=roach1:26257 \
--execute="SET CLUSTER SETTING cluster.organization = 'Learni';
SET CLUSTER SETTING enterprise.license = 'your-license-key';"La commande init démarre le cluster. Les paramètres enterprise activent les fonctionnalités avancées comme les changefeeds et les sauvegardes chiffrées.
Configurer les zones de réplication
ALTER DATABASE defaultdb CONFIGURE ZONE USING
num_replicas = 5,
constraints = '+region=us-east1:2,+region=eu-west1:2,+region=ap-south1:1',
lease_preferences = '[[+region=us-east1], [+region=eu-west1]]';
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
amount DECIMAL(12,2) NOT NULL
) WITH (zone = 'orders-zone');Les zones permettent de contrôler la réplication par région. Ici nous imposons 5 replicas avec une préférence de lease pour minimiser la latence sur les requêtes transactionnelles.
Mettre en place un changefeed
CREATE CHANGEFEED FOR TABLE orders
INTO 'kafka://kafka:9092'
WITH
updated, resolved = '10s',
format = json,
envelope = row,
diff;
-- Vérification
SELECT * FROM [SHOW CHANGEFEED JOBS];Le changefeed diffuse les modifications en temps réel vers Kafka. Les options resolved et diff garantissent la cohérence et permettent de détecter les suppressions.
Script de sauvegarde incrémentielle
#!/bin/bash
BACKUP DATABASE defaultdb
TO 's3://cockroach-backups/$(date +%Y%m%d)'
AS OF SYSTEM TIME '-10m'
WITH revision_history, encryption_passphrase = 'strong-passphrase';Cette sauvegarde incrémentielle utilise AS OF SYSTEM TIME pour cohérence et revision_history pour permettre des restores point-in-time.
Configuration TLS et authentification
#!/bin/bash
mkdir -p certs my-safe-directory
cockroach cert create-ca --certs-dir=certs --ca-key=my-safe-directory/ca.key
cockroach cert create-node --certs-dir=certs --ca-key=my-safe-directory/ca.key roach1 roach2 roach3 localhost 127.0.0.1
cockroach cert create-client root --certs-dir=certs --ca-key=my-safe-directory/ca.keyLa génération de certificats node et client est obligatoire pour un cluster sécurisé. Ne jamais exposer la clé CA.
Bonnes pratiques
- Toujours définir des lease_preferences pour minimiser la latence
- Utiliser des zones par table plutôt que par base de données
- Surveiller les métriques de réplication avec la table crdb_internal.zones
- Activer la collecte de statistiques automatiques
- Tester les scénarios de perte de région avant la mise en production
Erreurs courantes à éviter
- Oublier d'inclure les certificats dans les volumes Docker
- Définir num_replicas impair sans contrainte de région
- Lancer des changefeeds sans resolved timestamps
- Ignorer les alertes de sous-réplication dans le dashboard
Pour aller plus loin
Approfondissez la gestion des workloads distribués avec nos formations CockroachDB avancées.