Reparte tus VPS entre Hosts con Grupos de Disponibilidad

Un Grupo de Disponibilidad evita que tus servidores compartan un único punto de fallo. Pon varios VPS en un grupo y CubePath coloca cada uno en un host físico distinto, de modo que si una máquina cae, el resto siguen funcionando. Es la forma de tener una pareja redundante o un pequeño clúster sin comprobar a mano dónde acabó cada servidor.

Es la configuración habitual para todo lo que debe mantenerse en pie: capas web con balanceo, réplicas de base de datos, y cualquier servicio donde dos servidores en el mismo host arruinarían el sentido de tener dos.

Cómo funciona

Creas un grupo en un proyecto y una ubicación, y luego le añades VPS. Aquí un host es uno de los hipervisores de CubePath: un servidor físico del datacenter que ejecuta muchas máquinas virtuales a la vez. A medida que cada VPS se coloca, CubePath lo pone en un hipervisor distinto al de los demás miembros del grupo, de modo que un único fallo de hardware solo puede tumbar a uno de ellos. Por ejemplo, un grupo de tres servidores web acaba en tres hipervisores separados; si una de esas máquinas falla o se reinicia por mantenimiento, pierdes un servidor mientras los otros dos siguen sirviendo. El grupo no es más que esa regla de colocación, más una forma cómoda de ver tus servidores juntos; los VPS funcionan con total normalidad. Lo gestionas en el panel o por la API.

Antes de empezar

  • En el panel: my.cubepath.com → VPS → Grupos de Disponibilidad.
  • Por la API: URL base https://api.cubepath.com, autentica con Authorization: Bearer <token> (scopes vps:read / vps:write) y añade X-Requested-With: XMLHttpRequest en las escrituras. Consigue un token en Cuenta → Tokens de API.
  • Un grupo vive en un proyecto y una ubicación; los VPS que añadas deben estar en ese mismo proyecto y ubicación.

Crear un grupo

curl -X POST https://api.cubepath.com/vps/availability-groups/ \
  -H "Authorization: Bearer $CUBEPATH_TOKEN" \
  -H "X-Requested-With: XMLHttpRequest" \
  -H "Content-Type: application/json" \
  -d '{
    "project_id": 1,
    "name": "capa-web",
    "description": "Servidores web repartidos entre hosts",
    "location_name": "us-mia-1"
  }'

Eso es todo lo que necesita un grupo: un proyecto, un nombre y una ubicación. Un grupo reparte a sus miembros entre hosts y admite hasta 50 VPS.

Añadir servidores a un grupo

Añade un VPS existente por su id:

curl -X POST https://api.cubepath.com/vps/availability-groups/<group_uuid>/vps/<vps_id> \
  -H "Authorization: Bearer $CUBEPATH_TOKEN" \
  -H "X-Requested-With: XMLHttpRequest"

O asigna el grupo al crear un VPS, pasando availability_group_uuid en la petición de creación, para que se coloque correctamente desde el principio.

Para sacar un servidor, DELETE /vps/availability-groups/<group_uuid>/vps/<vps_id>. El VPS sigue funcionando; solo deja de formar parte del reparto del grupo. Algunas reglas:

  • El VPS debe estar en el mismo proyecto y ubicación que el grupo.
  • Tiene que estar en un estado en el que se pueda modificar (no en pleno despliegue ni borrado).

Ver el grupo en conjunto

GET /vps/availability-groups/<group_uuid> lista el grupo y sus servidores miembros, y GET /vps/availability-groups/<group_uuid>/metrics te da las métricas de rendimiento combinadas del grupo, para vigilar toda la capa en un solo sitio. También puedes apuntar una Cloud Alert a un grupo de disponibilidad para que te avise sobre las métricas del grupo.

Límites

ConceptoLímite
VPS por grupo50
AlcanceUn proyecto y una ubicación por grupo

Lo que esto no hace

  • Es colocación, no un balanceador de carga. Solo controla en qué hipervisor físico se ejecuta cada VPS para que tus servidores no acaben en el mismo; no reparte el tráfico entre ellos. Pon un Load Balancer delante para repartir las peticiones entre los miembros.
  • No mueve servidores en marcha. El reparto se aplica al colocar los VPS. Añadir un VPS existente lo agrupa para gestión y decisiones de colocación futuras; no migra en caliente un servidor que ya está corriendo en otro sitio.
  • Es de una sola ubicación. Un grupo reparte entre hosts dentro de una ubicación. Para resiliencia entre regiones, ten un grupo en cada ubicación.

Referencia de la API

GET    /vps/availability-groups/project/{project_id}     Listar los grupos de un proyecto.   (scope: vps:read)
GET    /vps/availability-groups/{uuid}                    Ver un grupo y sus miembros.        (scope: vps:read)
POST   /vps/availability-groups/   { project_id, name, location_name }  Crear un grupo.       (scope: vps:write)
DELETE /vps/availability-groups/{uuid}                    Eliminar un grupo (debe estar vacío). (scope: vps:write)
POST   /vps/availability-groups/{uuid}/vps/{vps_id}       Añadir un VPS al grupo.             (scope: vps:write)
DELETE /vps/availability-groups/{uuid}/vps/{vps_id}       Quitar un VPS del grupo.            (scope: vps:write)
GET    /vps/availability-groups/{uuid}/metrics            Métricas combinadas del grupo.      (scope: vps:read)
POST   /vps/availability-groups/{uuid}/move-project  { project_id }  Mover a otro proyecto.   (scope: vps:write)

Todas las peticiones se autentican con Authorization: Bearer <token> (o X-API-Key). Las peticiones de escritura necesitan además X-Requested-With: XMLHttpRequest.