Tres máquinas con systemd
45 minIntermedio

Tres máquinas Linux bastan para un clúster de tres nodos como servicio de systemd; al final compruebas 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,%H --peer-listen 0.0.0.0:27100 --admin-listen 0.0.0.0:27200
Restart=on-failure
[Install]
WantedBy=multi-user.target2. Arranca el primer nodo
En node-01, el primer arranque crea la CA del clúster y el usuario root:
sudo systemctl enable --now teseladb3. 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:
sudo teseladb admin --dbpath /var/lib/teseladb token create --ttl 1hEn 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:
sudo teseladb start --dbpath /var/lib/teseladb --bind_ip 0.0.0.0,$(hostname) --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 teseladb4. 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 y authSource=admin, porque los usuarios viven en la base admin y el driver tiene que autenticarse allí aunque
la aplicación trabaje en tienda:
mongodb://tienda-api:<contraseña>@node-01:27017,node-02:27017,node-03:27017/tienda?tls=true&tlsCAFile=./ca.pem&authSource=adminPara conectarte tú como root, desde node-01, saca su contraseña y la CA del directorio de datos y pasa los tres
nodos en la cadena, con authSource=admin porque los usuarios viven en la base admin:
ROOT_PASSWORD=$(sudo sed -n 's/^password=//p' /var/lib/teseladb/root-credentials.txt)
sudo cat /var/lib/teseladb/pki/ca.pem > ca.pem
mongosh "mongodb://root:$ROOT_PASSWORD@node-01:27017,node-02:27017,node-03:27017/?tls=true&tlsCAFile=./ca.pem&authSource=admin"Probarlo
sudo 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:
sudo systemctl disable --now teseladb
sudo rm -r /var/lib/teseladbSiguientes pasos
- Lista para producción, antes de recibir tráfico real.
- Copias programadas y su prueba de restauración, para la primera copia nocturna.