Post

sincro_nubes.sh

sincro_nubes.sh

sincro_nubes.sh

Este script sincroniza datos Nextcloud entre dos nubes/hosts, copia SQL y lanza una importacion remota de BBDD.

Uso en la infraestructura

Se usa para replicar una instancia Nextcloud hacia otro host o nube secundaria.

RolServicioImpacto si falla
Replica datosNextcloud secundarioLa instancia destino queda desactualizada
Replica BBDDSQL NextcloudMetadatos y ficheros no coinciden
RecuperacionHost alternativoNo hay entorno preparado para contingencia

Debe controlarse la compatibilidad de versiones y evitar importar SQL sobre una instancia activa sin mantenimiento.

Estado en cron

La entrada aparece comentada en micron_nextcloud:

#30 3 * * 1-5 /ruta/origen/scripts/sincro_nubes.sh

Flujo

  1. Monta un destino remoto para Nextcloud.
  2. Sincroniza datos desde /ruta/origen/nextcloud-data hacia /ruta/destino/nextcloud-data.
  3. Sincroniza dumps SQL hacia el host destino.
  4. Lanza import_sql.sh por SSH en el host remoto.
  5. Desmonta el destino.

Script original

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/bin/bash
LOG=/var/log/sincro_nubes.log

logline() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $*" >> "$LOG"
}

FECHA=D$(date +%Y%m%d)
FILEIN='etc'
FILEOUT='etc.'
FILEIN1='tools'
FILEOUT1='tools.'

logline "Inicia la sincronizacion de las nubes" > $LOG
logline "Montamos el Disco Remoto"
mount <IP_INTERNA>:/ruta/destino/backups/nextcloud /mnt/destino
if [ $? -ne 0 ]; then
  logline "Error al montar NFS "
  exit 5
else
  logline "Inicia la sincronizacion del disco"
  rsync -r -t -p -o -g -l -H -i -s --exclude-from=/ruta/origen/scripts/exclude_sincro_nextcloud.txt /ruta/origen/nextcloud /mnt/destino >> $LOG
  if [ $? -ne 0 ]; then
    logline "Error en la  sincronizacion del disco"
    exit 7
  else
    logline "Inicia la sincronizacion de la BBDD"
    rsync -r -t -p -o -g -l -H -i -s /ruta/origen/sqls <USUARIO_ADMIN>@<HOSTNAME>:/ruta/destino/ >> $LOG
    if [ $? -ne 0 ]; then
      logline "Error en la  sincronizacion de la BBDD"
      exit 9
    else
      logline "Inicia el import de la BBDD, entra en modo mantenimiento"
      ssh <USUARIO_ADMIN>@<HOSTNAME> "/ruta/origen/scripts/import_sql.sh"
      if [ $? -ne 0 ]; then
        logline "Error en el import de  la BBDD"
        exit 11
      else
        logline "Desmontamos el NFS"
        umount /mnt/destino
        logline "Finaliza el import de la BBDD, salimos de modo manteminiento"
        logline "Sincronizacion de las nubes finalizada OK"
        exit 0
      fi
    fi
  fi
fi
exit 0

Version revisada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/usr/bin/env bash
set -euo pipefail

LOG="/var/log/sincro_nubes_$(date +%Y%m%d).log"
MOUNT_DESTINO="/mnt/destino/nextcloud"
NFS_DESTINO="<HOSTNAME>:/ruta/destino/nextcloud"

mount "$NFS_DESTINO" "$MOUNT_DESTINO"
trap 'umount -l "$MOUNT_DESTINO" 2>/dev/null || true' EXIT

rsync -avh --exclude-from=/ruta/origen/scripts/exclude_sincro_nextcloud.txt \
  /ruta/origen/nextcloud-data/ \
  "$MOUNT_DESTINO/" >> "$LOG" 2>&1

rsync -avh /ruta/origen/sqls/ <USUARIO_ADMIN>@<HOSTNAME>:/ruta/destino/sqls/ >> "$LOG" 2>&1
ssh <USUARIO_ADMIN>@<HOSTNAME> "/ruta/origen/scripts/import_sql.sh"

Script relacionado: import_sql.sh

import_sql.sh activa modo mantenimiento, importa un dump SQL y desactiva mantenimiento en el Nextcloud destino.

Riesgos

  • Importar BBDD sobre un Nextcloud activo requiere ventana controlada.
  • Verificar compatibilidad de versiones origen/destino.
  • Usar mantenimiento y backup previo antes del import.

Cambios y motivo

CambioMotivo
trap para desmontardesmonta aunque falle rsync o ssh
variables para mount y NFShace explicito origen/destino
--exclude-from conservadomantiene tu logica de excluir rutas
validacion previa de versionesevita importar BBDD incompatible en destino
This post is licensed under CC BY 4.0 by the author.