Tres máquinas con systemd

TeselaDB

TeselaDB

Equipo de TeselaDB

45 minIntermedio

Monta un clúster de tres nodos en tres máquinas Linux como servicio de systemd y comprueba que aguanta un reinicio.

Un clúster de producción de TeselaDB son tres o más máquinas con el mismo binario, y aquí lo montas en tres máquinas Linux, cada nodo como servicio de systemd. Al final reinicias una de ellas para ver que el clúster sigue sirviendo.

Lo que vas a construir

Tres nodos, node-01, node-02 y node-03, unidos con tokens de alta y arrancados por systemd en cada arranque de su máquina, con tus aplicaciones conectadas a los tres con TLS y el usuario que crees.

Requisitos

  • Tres máquinas Linux con el binario en /usr/local/bin/teseladb (Instalar en Linux) y los relojes sincronizados con NTP.
  • El puerto 27100 abierto entre las tres máquinas, el 27017 hacia tus aplicaciones y el 27200 hacia tu equipo de operación.

1. El servicio en las tres máquinas

Crea /etc/systemd/system/teseladb.service en cada máquina. La unidad arranca el nodo cuando la red está lista y lo vuelve a arrancar si falla:

[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

2. Arranca el primer nodo

En node-01, el primer arranque crea la CA del clúster y el usuario root:

Shell
sudo systemctl enable --now teseladb

3. Une los otros dos

En node-01, crea un token de un solo uso para cada uno de los otros dos nodos. Cada token caduca a la hora, como fija --ttl 1h, así que créalos justo antes de unir node-02 y node-03 al clúster en marcha:

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

En node-02 y en node-03, el primer arranque lleva --join y el token. Después para ese proceso. Deja el nodo al servicio, que ya no necesita el token:

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>
sudo systemctl enable --now teseladb

4. Conecta tus aplicaciones

Copia la CA del clúster, /var/lib/teseladb/pki/ca.pem, a las máquinas de tus aplicaciones y crea para cada una un usuario con los roles que necesita (Usuarios y roles). La cadena lleva los tres nodos:

mongodb://tienda-api:<contraseña>@node-01:27017,node-02:27017,node-03:27017/tienda?tls=true&tlsCAFile=./ca.pem

Probarlo

teseladb admin --dbpath /var/lib/teseladb nodes lista los tres nodos como activos. Reinicia node-03 con sudo reboot mientras tu aplicación escribe: los rangos que lideraba eligen un líder nuevo en los otros dos nodos y el driver reintenta la operación que estaba en curso. Cuando la máquina vuelve, systemd arranca el nodo y se pone al día solo.

Limpiar

Si era una prueba, para el servicio y borra los datos en cada máquina, con la CA y las claves del clúster:

Shell
sudo systemctl disable --now teseladb
sudo rm -r /var/lib/teseladb

Siguientes pasos