Desplegar con systemd

Une dos nodos más al primero con un token de alta y mira cómo se reparten los rangos.

Despliega un clúster de tres nodos en tres máquinas Linux y déjalo como servicio de systemd. Un clúster de TeselaDB es el mismo binario arrancado en varias máquinas: el primero crea la CA, y cada uno de los demás entra con su propio token de alta de un solo uso, recibe un certificado firmado por esa CA y empieza a recibir réplicas de los rangos que ya existen.

Requisitos

  • Tres máquinas Linux con el binario instalado. Si aún no lo tienes, sigue Instalar en Linux.
  • El puerto 27100 abierto entre las tres máquinas, el 27017 hacia tus aplicaciones y el 27200 hacia tu equipo de operación.
  • Los relojes sincronizados con NTP.

Paso 1. Arranca el primer nodo

Shell
teseladb start --dbpath /var/lib/teseladb \
  --bind_ip 0.0.0.0 --peer-listen 0.0.0.0:27100 --admin-listen 0.0.0.0:27200

En node-01, arranca el nodo escuchando en una dirección que vean las otras dos máquinas. El primer arranque crea la CA del clúster y el usuario root dentro de /var/lib/teseladb.

Paso 2. Crea un token de alta

Shell
teseladb admin --dbpath /var/lib/teseladb token create --ttl 1h

En node-01. El token es de un solo uso y caduca; --ttl fija cuánto dura. teseladb admin se presenta al nodo con el certificado que encuentra en --dbpath.

Paso 3. Une los otros nodos

Shell
teseladb start --dbpath /var/lib/teseladb \
  --bind_ip 0.0.0.0 --peer-listen 0.0.0.0:27100 --admin-listen 0.0.0.0:27200 \
  --join node-01:27100 --enroll-token <token>

Arranca así node-02 y node-03, con un token distinto para cada nodo. El nodo nuevo comprueba la huella de la CA que lleva el token, recibe por ese canal cifrado su certificado y la clave maestra y entra en el clúster. El token solo hace falta la primera vez.

Paso 4. Déjalo como servicio

[Unit]
Description=TeselaDB
After=network-online.target

[Service]
ExecStart=/usr/local/bin/teseladb start --dbpath /var/lib/teseladb --bind_ip 0.0.0.0 --peer-listen 0.0.0.0:27100 --admin-listen 0.0.0.0:27200
Restart=on-failure

[Install]
WantedBy=multi-user.target

En cada máquina, crea /etc/systemd/system/teseladb.service con la misma orden de arranque, sin --join ni --enroll-token, porque el nodo ya tiene su certificado. Después para el proceso que arrancaste a mano y activa el servicio con systemctl enable --now teseladb, que lo arranca ahora y en cada reinicio de la máquina.

Comprobar

Shell
teseladb admin --dbpath /var/lib/teseladb nodes
teseladb admin --dbpath /var/lib/teseladb ranges --collection shop.orders

nodes lista los tres nodos y su estado. ranges muestra los rangos de una colección con sus réplicas y su líder; a medida que la colección crece, sus rangos se dividen y el equilibrador reparte réplicas y líderes entre los tres nodos sin que tengas que moverlos tú.

Problemas frecuentes

  • Si el nodo nuevo no entra y el token se rechaza, ese token ya se usó o caducó. Crea otro con token create.
  • Si el nodo nuevo no llega a node-01, el puerto 27100 está cerrado entre las máquinas o --peer-listen escucha solo en 127.0.0.1.

Ver también

  • Lista para producción, antes de recibir tráfico real.
  • Nodos, para crecer o retirar máquinas más adelante.
  • Para probar en una sola máquina, teseladb dev --nodes 3 arranca tres nodos en un proceso; el nodo k escucha en el puerto de clientes más k.