ClasesInformatica

Proxmox 8: Alta disponibilidad (HA), balanceo de cargas y almacenamiento distribuido CEPH

Conoce como crear un almacenamiento distribuido y balanceo de cargas en proxmox 8

Vamos a combinar dos temas importantes para darte una solución completa: un sistema de almacenamiento distribuido adecuado junto con el balanceo de cargas entre nodos proxmox.

Parte 1: Almacenamiento distribuido con Ceph

Ceph es la mejor solución integrada en Proxmox para distribuir el almacenamiento entre todos los nodos:

  1. Configuración básica de Ceph:
    • Instala Ceph en los tres nodos:
           bash

      apt update apt install proxmox-ceph-server

    • Inicia la configuración desde la interfaz web de Proxmox:
      • Ve a Datacenter → Ceph → Create Ceph Monitor
      • Configura un monitor en cada uno de tus tres nodos
    • Añade discos OSD en cada nodo:
      • Ve a cada nodo → Ceph → OSD
      • Selecciona discos dedicados para Ceph (idealmente SSD)
      • Tres OSD (uno por nodo) como mínimo
    • Crea un pool para VMs y contenedores:
           bash

      pveceph pool create vms --size 3 --application rbd

  2. Ventajas de Ceph para tu caso:
    • Los datos se distribuyen entre los tres nodos
    • Si cae proxmox0, los datos siguen disponibles
    • Rendimiento escalable al añadir más discos
    • Integración nativa con Proxmox

Parte 2: Balanceo automático de cargas

Con el almacenamiento Ceph configurado, ahora podemos implementar un balanceo automático efectivo:

  1. Script de balanceo mejorado:
bash

#!/bin/bash

# Configuración
MAX_CPU=80
MIN_CPU=20
MAX_MEM=75
MIN_MEM=25
LOG_FILE="/var/log/pve-balancer.log"

# Función para registrar actividad
log() {
  echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> $LOG_FILE
}

log "Iniciando balanceo de cargas"

# Obtener información de todos los nodos
NODES_INFO=$(pvesh get /nodes --output-format=json)

# Encontrar nodos sobrecargados
OVERLOADED_NODES=$(echo $NODES_INFO | jq -r ".[] | select(.cpu > $MAX_CPU or .mem_usage > $MAX_MEM) | .node")

# Encontrar nodos con baja carga
UNDERLOADED_NODES=$(echo $NODES_INFO | jq -r ".[] | select(.cpu < $MIN_CPU and .mem_usage < $MIN_MEM) | .node")

if [ -z "$OVERLOADED_NODES" ]; then
  log "No hay nodos sobrecargados. No se requiere migración."
  exit 0
fi

if [ -z "$UNDERLOADED_NODES" ]; then
  log "No hay nodos con baja carga disponibles para migración."
  exit 0
fi

log "Nodos sobrecargados: $OVERLOADED_NODES"
log "Nodos con baja carga: $UNDERLOADED_NODES"

# Para cada nodo sobrecargado
for SOURCE_NODE in $OVERLOADED_NODES; do
  # Obtener VMs en ejecución en el nodo sobrecargado
  RUNNING_VMS=$(pvesh get /nodes/$SOURCE_NODE/qemu --output-format=json | jq -r '.[] | select(.status=="running") | .vmid')
  
  for VM in $RUNNING_VMS; do
    # Elegir un nodo de destino con baja carga
    TARGET_NODE=$(echo "$UNDERLOADED_NODES" | tr ' ' '\n' | shuf | head -n1)
    
    if [ -n "$TARGET_NODE" ]; then
      log "Migrando VM $VM desde $SOURCE_NODE a $TARGET_NODE"
      
      # Realizar la migración en vivo
      pvesh create /nodes/$SOURCE_NODE/qemu/$VM/migrate -target $TARGET_NODE -online 1
      
      # Esperar un tiempo para que se complete la migración
      sleep 60
      
      # Verificar si la migración fue exitosa
      CURRENT_NODE=$(pvesh get /cluster/resources --output-format=json | jq -r ".[] | select(.id==\"qemu/$VM\") | .node")
      
      if [ "$CURRENT_NODE" = "$TARGET_NODE" ]; then
        log "Migración exitosa de VM $VM a $TARGET_NODE"
      else
        log "Error en la migración de VM $VM a $TARGET_NODE"
      fi
      
      # Actualizar la lista de nodos con baja carga
      NODES_INFO=$(pvesh get /nodes --output-format=json)
      UNDERLOADED_NODES=$(echo $NODES_INFO | jq -r ".[] | select(.cpu < $MIN_CPU and .mem_usage < $MIN_MEM) | .node")
      
      if [ -z "$UNDERLOADED_NODES" ]; then
        log "No hay más nodos con baja carga disponibles."
        break 2
      fi
    fi
  done
done

log "Balanceo de cargas completado"

  1. Programación del balanceador:
    • Guarda el script como /usr/local/bin/pve-balancer.sh
    • Dale permisos de ejecución: chmod +x /usr/local/bin/pve-balancer.sh
    • Configúralo para ejecutarse cada hora:
           bash

      echo "0 * * * * root /usr/local/bin/pve-balancer.sh" > /etc/cron.d/pve-balancer

Parte 3: Integración con alta disponibilidad

  1. Configurar grupos de alta disponibilidad:
    • En la interfaz web: Datacenter → HA → Groups → Create
    • Añade VMs críticas al grupo HA
  2. Configurar reglas de restricción:
    • Define en qué nodos pueden ejecutarse tus VMs
    • Establece preferencias de ubicación

Esta combinación te dará:

  • Almacenamiento distribuido entre todos los nodos (sin punto único de fallo)
  • Balanceo automático de cargas para optimizar CPU y RAM
  • Alta disponibilidad para recuperación automática ante fallos
Volver