Copias de seguridad¶
Copias de seguridad desde webapp¶
Puedes hacer copias de seguridad manuales, descargar, subir y restaurar partes completas o individuales de las tablas en el sistema.
Para hacer eso deberías ir a administración y luego en configuración puedes operar copias de seguridad.
También, puedes activar una tarea cron programada automatizada a cualquier hora para hacer automáticamente la copia de seguridad.
Las copias de seguridad se pueden encontrar en disco en /opt/isard-local/backups por defecto o variable de entorno BACKUP_DIR.
Copias de seguridad desde sistema¶
Puedes activar copias de seguridad desde sistema (preferido en producción). Deberías volcar las bases de datos, configuración y también discos (usualmente al menos /opt/isard/templates y recomendado la ruta completa /opt/isard).
Para facilitar el proceso de copia de seguridad hemos añadido un nuevo contenedor: isard-backupninja.
Esto creará copias de seguridad de bd y discos, usando borg backup y backupninja. Esto te permite configurar en isardvdi.cfg.example el comportamiento de copia de seguridad como esto para configurarlos todos:
# ------ Backups -------------------------------------------------------------
## Automated backups (https://0xacab.org/liberate/backupninja)
# If BACKUP_NFS_ENABLED is not enabled it will use this directory to create backups
# If BACKUP_NFS_ENABLED is enabled then this variable should be commented
BACKUP_DIR=/opt/isard-local/backup
# If nfs enabled you need to set server and folder also
#BACKUP_NFS_ENABLED=false
#BACKUP_NFS_SERVER=172.16.0.10
#BACKUP_NFS_FOLDER=/remote/backupfolder
BACKUP_DB_ENABLED=true
#BACKUP_DB_WHEN="everyday at 01"
BACKUP_DB_PRUNE="--keep-weekly=4 --keep-monthly=3 --keep-within=14d --save-space"
BACKUP_REDIS_ENABLED=true
#BACKUP_REDIS_WHEN="everyday at 01"
BACKUP_REDIS_PRUNE="--keep-weekly=4 --keep-monthly=3 --keep-within=14d --save-space"
BACKUP_STATS_ENABLED=true
#BACKUP_STATS_WHEN="everyday at 01"
BACKUP_STATS_PRUNE="--keep-weekly=4 --keep-monthly=3 --keep-within=14d --save-space"
BACKUP_CONFIG_ENABLED=true
#BACKUP_CONFIG_WHEN="everyday at 01"
BACKUP_CONFIG_PRUNE="--keep-weekly=4 --keep-monthly=3 --keep-within=14d --save-space"
BACKUP_DISKS_ENABLED=true
#BACKUP_DISKS_WHEN="everyday at 01"
BACKUP_DISKS_PRUNE="--keep-weekly=4 --keep-monthly=3 --keep-within=14d --save-space"
BACKUP_DISKS_TEMPLATES_ENABLED=true
BACKUP_DISKS_GROUPS_ENABLED=true
BACKUP_DISKS_MEDIA_ENABLED=true
Las variables se explican por sí mismas. Por defecto no se activa ninguna copia de seguridad y no se inicia ningún contenedor isard-backupninja. Si activas cualquier (base de datos, discos, ...) descomentando la variable y configurándola a true entonces el contenedor se construirá (./build.sh) y arrancará cuando ejecutes docker-compose up -d de nuevo.
ADVERTENCIA: El BACKUP_DIR (o el directorio de copia de seguridad por defecto /opt/isard-local/backup) contendrá nuevas carpetas db y disks que se crearán la primera vez. Si existen, deberían estar vacías la primera vez ya que backupninja inicializará la primera vez con borg. Si no, la copia de seguridad fallará.
Si tienes un NAS externo con exportación NFS4 (nota: solo se admite nvs v4) puedes configurar las variables BACKUP_NFS_... y se montará antes de ejecutar la copia de seguridad y se desmontará al final. Puedes verificar si funciona ya que la primera vez el contenedor creará carpetas db, disks, etc... basadas en lo que activaste y también mostrará en los registros del contenedor el montaje NFS exitoso. La exportación en el servidor debería permitir el acceso a DOCKER_NET (172.31.255.X/24) y/o el host isard-backupninja (.88) a la ruta exportada. (Release 13.2.2)
Nota: con las copias de seguridad de disco habilitadas, al menos una de las carpetas de disco también debería estar habilitada (plantillas/grupos/media)
Las carpetas creadas dependiendo de la copia de seguridad serán:
4,0K /opt/isard-local/backup/extract # los archivos se extraerán aquí al usar la opción de extracción
952K /opt/isard-local/backup/db # archivos de volcado de rethinkdb de /opt/isard/database/rethinkdb
12M /opt/isard-local/backup/redis # archivos de volcado de redis de /opt/isard/redis/
128K /opt/isard-local/backup/disks # copias de seguridad de discos de /opt/isard/{templates/groups/media}
98M /opt/isard-local/backup/stats # datos de estadísticas de /opt/isard/stats
952K /opt/isard-local/backup/config # el resto de las carpetas en /opt/isard
Si estás haciendo copias de seguridad desde un host diferente a un all-in-one, entonces deberás configurar al menos estas variables en su cfg:
RETHINKDB_HOST=172.31.1.11
REDIS_HOST=172.31.1.11
Y abrir también el puerto del host de rethinkdb en el firewall en all-in-one:
firewall-cmd --zone=intra --add-forward-port=port=28015:proto=tcp:toport=28015:toaddr=172.31.255.12 --permanent
También hemos incluido un script que hará el proceso de restauración de copias de seguridad, listado, verificación de integridad, etc...
- Listar copias de seguridad de discos|bd:
# docker exec -ti isard-backupninja run.sh list disks
2021-11-18T10:35:58
2021-11-18T10:37:05
2021-11-18T10:38:13
# docker exec -ti isard-backupninja run.sh info disks
Warning: Attempting to access a previously unknown unencrypted repository!
Do you want to continue? [yN] yes (from BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK)
Repository ID: 1f195947728add72fd71a5d633f66fd2a17948bc4d474225045ea879274ce709
Location: /backup/disks
Encrypted: No
Cache: /root/.cache/borg/1f195947728add72fd71a5d633f66fd2a17948bc4d474225045ea879274ce709
Security dir: /root/.config/borg/security/1f195947728add72fd71a5d633f66fd2a17948bc4d474225045ea879274ce709
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
All archives: 2.20 GB 1.65 GB 330.91 MB
Unique chunks Total chunks
Chunk index: 169 830
- Comprobar la integridad de la copia de seguridad:
# docker exec -ti isard-backupninja run.sh check-integrity disks 2021-11-18T10:55:58
opt/isard/templates
opt/isard/groups
opt/isard/groups/default
opt/isard/groups/default/default
opt/isard/groups/default/default/local
opt/isard/groups/default/default/local/admin-admin
opt/isard/groups/default/default/local/admin-admin/downloaded_zxspectrum.qcow2
opt/isard/groups/default/default/local/admin-admin/downloaded_tetros.qcow2
opt/isard/groups/default/default/local/admin-admin/downloaded_slax93.qcow2
- Solo listar archivos:
# docker exec -ti isard-backupninja run.sh show-files disks 2021-11-18T10:55:58
opt/isard/templates
opt/isard/groups
opt/isard/groups/default
opt/isard/groups/default/default
opt/isard/groups/default/default/local
opt/isard/groups/default/default/local/admin-admin
opt/isard/groups/default/default/local/admin-admin/downloaded_zxspectrum.qcow2
opt/isard/groups/default/default/local/admin-admin/downloaded_tetros.qcow2
opt/isard/groups/default/default/local/admin-admin/downloaded_slax93.qcow2
- Extraer todos los archivos
# docker exec -ti isard-backupninja run.sh extract disks 2021-11-18T10:55:58
opt/isard/templates
opt/isard/groups
opt/isard/groups/default
opt/isard/groups/default/default
opt/isard/groups/default/default/local
opt/isard/groups/default/default/local/admin-admin
opt/isard/groups/default/default/local/admin-admin/downloaded_zxspectrum.qcow2
opt/isard/groups/default/default/local/admin-admin/downloaded_tetros.qcow2
opt/isard/groups/default/default/local/admin-admin/downloaded_slax93.qcow2
# tree /opt/isard-local/backup/extract/
/opt/isard-local/backup/extract/
└── opt
└── isard
├── groups
│ └── default
│ └── default
│ └── local
│ └── admin-admin
│ ├── downloaded_slax93.qcow2
│ ├── downloaded_tetros.qcow2
│ └── downloaded_zxspectrum.qcow2
└── templates
- Extraer un solo archivo
# rm -rf /opt/isard-local/backup/extract/*
# docker exec -ti isard-backupninja run.sh extract disks 2021-11-18T10:55:58 opt/isard/groups/default/default/local/admin-admin/downloaded_slax93.qcow2
opt/isard/groups/default/default/local/admin-admin/downloaded_slax93.qcow2
# tree /opt/isard-local/backup/extract/
/opt/isard-local/backup/extract/
└── opt
└── isard
└── groups
└── default
└── default
└── local
└── admin-admin
└── downloaded_slax93.qcow2
- Hacer una copia de seguridad manual:
# docker exec -ti isard-backupninja run.sh execute-now disks
------------------------------------------------------------------------------
Archive name: 2021-11-19T09:33:39
Archive fingerprint: 3c0b9403e34830b2baca706bc54ad5e663b5d621f96087ce018fe47b0a77adb7
Time (start): Fri, 2021-11-19 09:33:39
Time (end): Fri, 2021-11-19 09:33:42
Duration: 2.58 seconds
Number of files: 8
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
This archive: 440.85 MB 330.91 MB 510 B
All archives: 2.65 GB 1.99 GB 330.91 MB
Unique chunks Total chunks
Chunk index: 170 996
------------------------------------------------------------------------------
- Comprobar el montaje de nfs
# docker exec -ti isard-backupninja run.sh check-nfs-mount
BACKUP NFS FOLDER MOUNTED:
192.168.0.200:/storage /backup nfs4 rw,relatime,vers=4.1,rsize=32768,wsize=32768,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.31.255.88,local_lock=none,addr=192.168.0.200 0 0
BACKUP NFS UnMOUNTED
Romper bloqueo¶
Si alguna copia de seguridad falló:
isard-backupninja | Jul 30 01:49:49 Info: >>>> starting action /usr/local/etc/backup.d/92-disks-borg.borg (because of --now)
isard-backupninja | Jul 30 01:49:49 Info: Repository was already initialized
isard-backupninja | Jul 30 01:49:51 Error: Failed to create/acquire the lock /backup/disks/lock.exclusive (timeout).
isard-backupninja | Jul 30 01:49:51 Fatal: Failed backing up source.
isard-backupninja | Jul 30 01:49:51 Fatal: <<<< finished action /usr/local/etc/backup.d/92-disks-borg.borg: FAILED
isard-backupninja | Jul 30 01:49:51 Info: FINISHED: 1 actions run. 1 fatal. 1 error. 0 warning.
tendrás que romper el bloqueo en esa carpeta de copia de seguridad:
docker exec -ti isard-backupninja borg break-lock /backup/disks
docker exec -ti isard-backupninja borg list /backup/disks
Warning: Attempting to access a previously unknown unencrypted repository!
Do you want to continue? [yN] y
2024-03-31T01:00:23 Sun, 2024-03-31 01:00:23 [db1fd1ebf613d8701a98a98f42d2e9dbfed59ad647c195f03a3a8282186b946a]
2024-04-30T01:00:17 Tue, 2024-04-30 01:00:18 [5d7b6dc13c4c7f56dc4f243448ee36afbf81e51ec793fe66f59e48ecb5f9aba2]
2024-05-31T01:00:18 Fri, 2024-05-31 01:00:19 [cc0d01366c6753f6e40dc8a9a07a907f47f99829b8dac566d699a0377f6d6224]
2024-06-30T01:00:19 Sun, 2024-06-30 01:00:19 [82c62f48761ca4a6d22d97f8ae4a64e63d2bc09c51347ef980bae90054f1c335]
2024-07-07T01:00:19 Sun, 2024-07-07 01:00:19 [3ef207cb18718bd0833afef16c4f07e23a229235b26f1689d88a49682cc85675]
2024-07-14T01:00:18 Sun, 2024-07-14 01:00:19 [773aa658c1e09f1d7ffb3358a3b9392122f3bd6fe889d3f75a0b78dc3dbaca6e]
2024-07-21T01:00:19 Sun, 2024-07-21 01:00:19 [253380bf29e60d48ce49061fe06dcb5e61ad94e89e6bf566a645e6b16e03ddab]
2024-07-22T01:00:19 Mon, 2024-07-22 01:00:20 [089f91294d6ab345aa6b5ebb9b629f8aed11e8acbb05594c64a428a51797a496]
2024-07-23T01:00:16 Tue, 2024-07-23 01:00:17 [2c02f63226ea34a4118eb618f1876c194c17acf3a70ab725743cc997fecb7e6e]
2024-07-24T01:00:15 Wed, 2024-07-24 01:00:15 [c47ee3559b1c4c0c306b28c6e4dab9c0334277a7d3b07346f3a85d3924e6602c]
2024-07-25T01:00:16 Thu, 2024-07-25 01:00:16 [dd852d5275aa5177a4b12c1006723f1720daed942b05c8cab018f11c58f7c319]
2024-07-26T01:00:04 Fri, 2024-07-26 01:00:04 [05ed4c26bec7fe420f2e9b817fc3a6e60374ea89fadf02c4da88163f07007c28]
2024-07-27T01:00:03 Sat, 2024-07-27 01:00:03 [c4afe05324c7dee73edbbc2067e412eb0669a76f4266a781c0927d7ad8aa865a]
2024-07-28T01:00:03 Sun, 2024-07-28 01:00:03 [eec87c6be908aa5bfd382bdfb4c3d9899e609b29b85ec161aae245cdabe01e69]
2024-07-29T01:00:03 Mon, 2024-07-29 01:00:04 [e2a9911f65f236347ef3d8a342392cc30467ccff8503889b5806db3f7949d921]
## Copias de seguridad de infraestructura
Sáltate esto si ejecutas isard-backupninja en tu infraestructura all-in-one.
En infraestructura mantenemos una red internamente entre nodos. El nodo donde se está realizando la copia de seguridad (SOLO SI NO ES EL ALL-IN-ONE) necesita acceso a donde se ejecutan la base de datos, redi y prometheus. Así que tenemos esta zona firewalld para esta red:
NOTA: ¡Asegúrate de que tienes esta fuente en la lista negra en los cfgs!
firewall-cmd --add-forward-port="port=28015:proto=tcp:toport=28015:toaddr=172.31.255.13" --zone=isard-infra --permanent firewall-cmd --add-forward-port="port=28015:proto=tcp:toport=28015:toaddr=172.31.255.13" --zone=isard-infra
Y en la configuración de backupninja donde se está ejecutando, debemos establecer estas variables correctamente para alcanzar el servidor all-in-one:
RETHINKDB_HOST=172.31.2.10
REDIS_HOST=172.31.2.10