Clúster
Varios nodos pueden unirse en un clúster para que usted ingrese a cualquier nodo y administre todos. El clúster requiere la licencia Multinodo en el maestro y una licencia en cada nodo (ver Licencias).
El modelo
- La base del panel (cuentas, planes, sitios, zonas, casillas, configuración, auditoría) se replica a todos los nodos con un almacén de consenso Raft embebido. No hay ningún servicio adicional que instalar.
- Los datos de los clientes no se mueven. Cada cuenta de cliente vive en un nodo, el nodo dueño: su directorio home, sus bases y su correo están en esa máquina. La base del panel sólo sabe qué nodo es el dueño. Los datos de los clientes se protegen con backups, no con el clúster.
- Las lecturas se atienden desde la copia local. Las escrituras van al líder; si usted ingresó a otro nodo, el panel reenvía la escritura al líder por el canal TLS con autenticación mutua del clúster. Las sesiones se comparten, así que un ingreso en un nodo es válido en todos.
- Se requiere quórum para modificar cualquier cosa. Un nodo en una partición minoritaria sigue sirviendo sitios, correo y DNS con normalidad, y muestra el panel en sólo lectura. Nunca queda un estado que haya que reconciliar a mano después.
- La identidad de un nodo es su ID de clúster, no su nombre de host ni su IP. Los roles se transfieren: "maestro" es un rol que se mueve; el nodo 1 sigue siendo el nodo 1.
Topologías
| Nodos | Comportamiento |
|---|---|
| 1 | Independiente. |
| 2 | Primario y secundario. Con dos nodos, "el primario murió" y "se cortó el enlace entre nosotros" se ven igual desde cualquiera de los dos lados, así que la promoción necesita un desempate (abajo). |
| 3 o más | Clúster completo: Raft elige un nuevo líder automáticamente si se pierde el líder, siempre que haya mayoría activa. |
Dos nodos: el desempate
Con dos nodos, el servidor de licencias actúa como testigo (tercer voto). Si el secundario no ve al primario, consulta al testigo; si el testigo tampoco ve al primario (se comprueba en vivo, repetidamente, durante aproximadamente un minuto para que un reinicio normal no dispare la acción), el secundario se promueve a sí mismo y el contador de generación avanza. El primario anterior, al volver, ve la generación más alta y se reincorpora como seguidor; no recupera el rol.
Esto no funciona cuando los dos nodos comparten una misma IP pública (NAT): el testigo no puede distinguirlos. En ese caso la conmutación es manual. La pantalla del secundario indica cuándo el primario es inalcanzable y qué verificar. Promueva sólo después de confirmar que el otro nodo está realmente caído, y no sólo inalcanzable desde aquí:
panel cluster-tomar-mando
El comando se niega a correr cuando el clúster tiene tres o más nodos, donde la promoción es automática. Inicia un clúster nuevo de un solo miembro a partir de la copia de la base que tiene este nodo; el primario anterior queda fuera de la configuración hasta que lo vuelva a invitar.
Fundar un clúster
En el primer nodo (se convierte en fundador; es el único que tiene la clave de la autoridad de certificación del clúster, de modo que un seguidor comprometido no puede agregar miembros):
panel cluster-fundar node1 node1.ejemplo.com:7000
panel cluster-estado
El instalador puede hacerlo por usted (MODO_CLUSTER=master). Respalde la clave de autoridad del fundador: si se pierde, el clúster sigue funcionando pero no puede crecer. El respaldo diario que el panel hace de su propia base incluye esa clave en el fundador.
Agregar un nodo
Desde el panel del fundador (Clúster → Nodos) puede agregar un nodo por SSH: indique su dirección, usuario y clave o contraseña; el panel verifica la huella del servidor (usted la confirma la primera vez), instala el binario, y el líder lo agrega cuando está en línea. También puede hacerlo a mano:
# en el fundador
panel cluster-invitar node2 node2.ejemplo.com:7000 /root/node2.json
# copie node2.json al nuevo nodo por un canal seguro, y luego en node2
panel cluster-unirse /root/node2.json
El archivo de invitación contiene la clave privada del nuevo nodo: se crea con modo 0600, el nodo se niega a usarlo si otros pueden leerlo, y conviene borrarlo después. La base del nuevo nodo empieza vacía y recibe una copia completa de la base del clúster.
Los puertos 7000 (consenso) y 7001 (reenvío de escrituras) se abren automáticamente una vez que el nodo está en un clúster. Una VPN interna de WireGuard (Clúster → VPN) entre nodos está disponible donde el kernel la soporta (el kernel de AlmaLinux 8 no).
Quitar un nodo
Antes de apagar un nodo de forma definitiva:
panel cluster-quitar node2
Un nodo que queda en la configuración sigue contando para el quórum, así que un clúster de tres con un miembro muerto que no fue declarado necesita que los dos sobrevivientes estén de acuerdo y no tolera ninguna falla adicional.
Qué nodo es dueño de una cuenta
Al crear una cuenta, el formulario permite elegir el nodo (por defecto: el nodo en el que usted ingresó; la API y WHMCS pueden indicar uno, si no va al líder).
Las operaciones que tocan los archivos, bases o correo de un cliente se ejecutan en su nodo dueño. Si intenta una desde un nodo que no es el dueño y no puede reenviarse, el panel responde 409 "esta cuenta vive en el nodo X": ingrese a ese nodo. Eliminar una cuenta cuyo nodo dueño está caído se rechaza con el mismo mensaje en lugar de hacerlo a medias, porque liberaría el nombre de la cuenta mientras sus archivos y bases siguen existiendo en el nodo caído. Una cola de eliminaciones pendientes que se completa cuando el nodo vuelve está Próximamente.
La configuración por nodo (qué servidor web de borde, servicios detenidos, reglas de cortafuegos, canal de actualización, licencia) pertenece al nodo para el que se fijó, aunque la modifique desde la pantalla de otro nodo.
- DNS: cada nodo sirve todas las zonas, así que el DNS sigue respondiendo si se pierde un nodo.
- Certificados: cada nodo emite los de sus propios sitios con su propia cuenta ACME, así que los límites de Let's Encrypt no se comparten.
- Registro de auditoría: se replica, de modo que puede leer la auditoría completa del clúster desde cualquier nodo. Cada nodo también exporta sus propias entradas a su SIEM si está configurado.
Reinicio coordinado
Clúster → Reiniciar reinicia los nodos de a uno: saca un nodo de servicio, lo reinicia con el kernel nuevo, lo vuelve a poner en servicio, y luego pasa al siguiente, dejando al líder para el final. Si un paso no termina en unos diez minutos, la secuencia se detiene y espera a una persona. El reinicio individual "reiniciar ahora" se rechaza en los nodos del clúster.
CLI en un clúster
En un nodo que está en un clúster, la CLI está cerrada para cualquier operación que escriba datos compartidos (eludiría el consenso y divergiría). Sólo funcionan los comandos del clúster y los de sólo lectura; use la interfaz web o la API para todo lo demás.
| Comando | Qué hace |
|---|---|
cluster-fundar <id> [host:puerto] | Funda un clúster con este nodo |
cluster-invitar <id> <host:puerto> <archivo> | Crea el paquete de incorporación para un nodo nuevo |
cluster-unirse <archivo> [host:puerto] | Incorpora este nodo con un paquete |
cluster-estado | Muestra el rol de este nodo y si es el fundador |
cluster-tomar-mando | Promoción manual (sólo dos nodos) |
cluster-quitar <id> | Quita un nodo |