Réplication XDCR
XDCR (Cross Data Center Replication) est un mécanisme qui permet de répliquer les données entre des clusters de data centers distants.
Contrairement à la réplication intra-cluster qui protège les vBuckets actifs en cas de défaillance d'un nœud, XDCR offre une protection en cas de défaillance d'un data centre, ainsi qu'une haute disponibilité et des performances élevées pour les applications critiques.
XDCR copie les données d'un bucket spécifique d'un cluster source vers un bucket d'un cluster cible, mais on peut également spécifier un scope ou une collection comme source de réplication. Les données sont poussées depuis la source par un agent XDCR qui utilise le protocole DCP (Database Change Protocol) sur le cluster source.
Dans la suite de ce document, nous allons configurer la réplication XDCR entre deux clusters.
Préparation de la réplication
Nous allons maintenant créer un deuxième cluster destiné à la réplication. Nous allons suivre les mêmes étapes que dans le chapitre "Installation" pour créer ce cluster cible en utilisant docker-compose comme indiqué ci-dessous.
version: '3.5' services: dbServer1-rep: container_name: dbServer1-rep image: couchbase/server:enterprise-7.0.5 volumes: - type: volume source: data1-rep target: /opt/couchbase/var networks: dbNetwork: ipv4_address: 172.18.56.21 ports: - 48091-48096:8091-8096 - 41210-41211:11210-11211 ulimits: nproc: 65535 core: soft: 100000000 hard: 100000000 memlock: soft: 100000000 hard: 100000000 nofile: soft: 40960 hard: 40960 dbServer2-rep: container_name: dbServer2-rep image: couchbase/server:enterprise-7.0.5 volumes: - type: volume source: data2-rep target: /opt/couchbase/var networks: dbNetwork: ipv4_address: 172.18.56.22 ports: - 58091-58096:8091-8096 - 51210-51211:11210-11211 ulimits: nproc: 65535 core: soft: 100000000 hard: 100000000 memlock: soft: 100000000 hard: 100000000 nofile: soft: 40960 hard: 40960 networks: dbNetwork: name: dbNetwork driver: bridge ipam: config: - subnet: 172.18.56.0/24 volumes: data1-rep: data2-rep:
On construit les deux conteneurs.
root@data-resilience:/app/couchbase# docker-compose -f rep/docker-compose-rep.yml up -d Creating dbServer1-rep ... done Creating dbServer2-rep ... done
Les commandes suivantes nous permettront d'initialiser et configurer le cluster de réplication sans trop d'explications, car cela a déjà été vu dans les chapitres précédents.
root@data-resilience:/app/couchbase# docker exec -ti dbServer1-rep sh # couchbase-cli cluster-init -c 172.18.56.21 \ --cluster-username admin \ --cluster-password admin123 \ --cluster-name db-cluster-rep \ --services data,index,query \ --cluster-ramsize 256 \ --cluster-index-ramsize 256> > > > > > SUCCESS: Cluster initialized # couchbase-cli server-add -c 172.18.56.21:8091 \ --username admin \ --password admin123 \ --server-add http://172.18.56.22:8091 \ --server-add-username admin \ --server-add-password admin123 \ --services data,index,query> > > > > > SUCCESS: Server added # couchbase-cli rebalance -c 172.18.56.21:8091 \ --username admin \ --password admin123> > Rebalancing Bucket: 00/00 () 0 docs remaining [============================================================================================================================] 100.00% SUCCESS: Rebalance complete # couchbase-cli server-list -c 172.18.56.21:8091 \ --username admin \ --password admin123> > ns_1@172.18.56.21 172.18.56.21:8091 healthy active ns_1@172.18.56.22 172.18.56.22:8091 healthy active
Création d'une référence de réplication
Pour mettre en place une réplication, il est nécessaire de déclarer une référence de réplication sur le cluster local, comprenant les informations permettant d'identifier le cluster cible pour la réplication XDCR.
La commande suivante permet de créer une référence de réplication.
root@data-resilience:/app/couchbase# docker exec -ti dbServer1 sh # couchbase-cli xdcr-setup -c 172.18.56.11 -u admin -p admin123 \ --create \ --xdcr-cluster-name db-cluster-rep \ --xdcr-hostname 172.18.56.21 \ --xdcr-username admin \ --xdcr-password admin123> > > > > SUCCESS: Cluster reference created
On peut obtenir la liste de toutes les références en utilisant la commande xdcr-setup avec l'option list.
# couchbase-cli xdcr-setup -c 172.18.56.11 \ -u admin -p admin123 --list> cluster name: db-cluster-rep uuid: e561e2278273c53e0187302ac76d971c host name: 172.18.56.21:8091 user name: admin uri: /pools/default/remoteClusters/db-cluster-rep
Créer une réplication
Avant de démarrer la réplication, il est nécessaire de créer le bucket, le scope et la collection que l'on souhaite répliquer sur le cluster cible.
Dans cet exemple, nous commençons par créer le bucket 'étudiant-bucket'. Le scope 'étudiant-scope' et la collection 'étudiant' cibles seront créés ultérieurement.
root@data-resilience:/app/couchbase# docker exec -ti dbServer1-rep sh # couchbase-cli bucket-create \ --cluster 172.18.56.21:8091 \ --username admin \ --password admin123 \ --bucket ecole-bucket \ --bucket-type couchbase \ --bucket-ramsize 256 \ --max-ttl 500000000 \ --durability-min-level persistToMajority \ --enable-flush 0> > > > > > > > > SUCCESS: Bucket created
En utilisant la commande xdcr-replicate avec l'option create, nous pouvons créer la réplication comme illustré dans l'exemple ci-dessous.
root@data-resilience:/app/couchbase# docker exec -ti dbServer1 sh # couchbase-cli xdcr-replicate -c 172.18.56.11 -u admin -p admin123 \ --create \ --xdcr-cluster-name db-cluster-rep \ --xdcr-from-bucket ecole-bucket \ --xdcr-to-bucket ecole-bucket \ --xdcr-replication-mode xmem> > > > > DEPRECATED: Specifying --xdcr-replication-mode is deprecated SUCCESS: XDCR replication created
Il est possible de vérifier l'état de la réplication en accédant à la console web puis en naviguant dans la section XDCR.
Il convient de noter que, dans cet exemple, la réplication comporte deux erreurs liées au mapping du scope et de la collection, car le scope 'étudiant-scope' et la collection 'étudiant' n'ont pas été créés préalablement.
Les commandes suivantes permettent de créer la scope 'étudiant-scope' et la collection 'étudiant' pour corriger le problème précédent.
root@data-resilience:/app/couchbase# docker exec -ti dbServer1-rep sh # couchbase-cli collection-manage \ --cluster 172.18.56.21:8091 \ --username admin \ --password admin123 \ --bucket ecole-bucket \ --create-scope ecole-scope> > > > > SUCCESS: Scope created # couchbase-cli collection-manage \ --cluster 172.18.56.21:8091 \ --username admin \ --password admin123 \ --bucket ecole-bucket \ --create-collection ecole-scope.etudiant \ --max-ttl 0> > > > > > SUCCESS: Collection created
Lister les réplications
La commande xdcr-replicate avec l'option 'list' permet de lister toutes les réplications existantes. L'identifiant unique 'stream id' sert à gérer la réplication.
root@data-resilience:/app/couchbase# docker exec -ti dbServer1 sh # couchbase-cli xdcr-replicate -c 172.18.56.11 -u admin -p admin123 \ --list> stream id: e561e2278273c53e0187302ac76d971c/ecole-bucket/ecole-bucket status: running source: ecole-bucket target: /remoteClusters/e561e2278273c53e0187302ac76d971c/buckets/ecole-bucket
Suspendre la réplication
On peut suspendre la réplication en utilisant la commande xdcr-replicate avec l'option 'pause'.
# couchbase-cli xdcr-replicate -c 172.18.56.11 -u admin -p admin123 \ --pause \ --xdcr-replicator=e561e2278273c53e0187302ac76d971c/ecole-bucket/ecole-bucket> > SUCCESS: XDCR replication paused
Reprendre la réplication
La commande xdcr-replicate avec l'option 'resume' permet de reprendre la réplication.
# couchbase-cli xdcr-replicate -c 172.18.56.11 -u admin -p admin123 \ --resume \ --xdcr-replicator=e561e2278273c53e0187302ac76d971c/ecole-bucket/ecole-bucket> > SUCCESS: XDCR replication resume
Supprimer la réplication
La commande xdcr-replicate avec l'option 'delete' permet de supprimer la réplication.
couchbase-cli xdcr-replicate -c 172.18.56.11 -u admin -p admin123 \ --delete \ --xdcr-replicator=e561e2278273c53e0187302ac76d971c/ecole-bucket/ecole-bucket
Supprimer la référence
La commande xdcr-setup avec l'option 'delete' permet de supprimer la référence de la réplication.
couchbase-cli xdcr-setup -c 172.18.56.11 -u admin -p admin123 \ --delete \ --xdcr-cluster-name db-cluster-rep