Un clúster de tres nodos con Docker Compose
Arranca tres nodos de TeselaDB en contenedores, únelos con tokens de alta y conéctate.
Esta guía monta un clúster de tres nodos en una sola máquina con Docker Compose. Sirve para probar el reparto de rangos y qué pasa cuando cae un nodo; en producción, cada nodo va en su propia máquina.
1. El fichero de Compose
Guarda esto como compose.yaml. Los nodos 2 y 3 están en el perfil join porque necesitan un token que crea el
primero.
YAML
services:
node1:
image: teseladb/teseladb:<version>
command: start --dbpath /data --bind_ip 0.0.0.0 --peer-listen 0.0.0.0:27100 --admin-listen 0.0.0.0:27200
ports: ["27017:27017"]
volumes: ["node1:/data"]
node2:
image: teseladb/teseladb:<version>
command: >
start --dbpath /data --bind_ip 0.0.0.0 --peer-listen 0.0.0.0:27100 --admin-listen 0.0.0.0:27200
--join node1:27100 --enroll-token ${TOKEN_NODE2}
volumes: ["node2:/data"]
profiles: ["join"]
node3:
image: teseladb/teseladb:<version>
command: >
start --dbpath /data --bind_ip 0.0.0.0 --peer-listen 0.0.0.0:27100 --admin-listen 0.0.0.0:27200
--join node1:27100 --enroll-token ${TOKEN_NODE3}
volumes: ["node3:/data"]
profiles: ["join"]
volumes:
node1:
node2:
node3:2. Arranca el primer nodo
Shell
docker compose up -d node1El primer arranque crea la CA y el usuario root en el volumen del nodo.
3. Crea un token por nodo
Cada token es de un solo uso:
Shell
export TOKEN_NODE2=$(docker compose exec node1 teseladb admin --dbpath /data token create --ttl 1h)
export TOKEN_NODE3=$(docker compose exec node1 teseladb admin --dbpath /data token create --ttl 1h)4. Une los otros dos
Shell
docker compose --profile join up -d node2 node3
docker compose exec node1 teseladb admin --dbpath /data nodes5. Conéctate
Shell
docker compose cp node1:/data/pki/ca.pem ./ca.pem
docker compose exec node1 cat /data/root-credentials.txt
mongosh "mongodb://root:<contraseña>@127.0.0.1:27017/?tls=true&tlsCAFile=./ca.pem"6. Prueba una caída
Inserta datos, para un nodo y comprueba que sigues leyendo y escribiendo:
Shell
docker compose stop node2
docker compose exec node1 teseladb admin --dbpath /data rangesLos rangos que lideraba node2 tienen un líder nuevo. Al arrancarlo otra vez, se pone al día solo.
Última actualización