[Update 2023] Faire un Backup Total de son Serveur Dédié avec Rsnapshot
Dans cet article, je noterai
- Serveur de Sauvegarde : le serveur qui sauvegarde vos données
- Serveur de Donnée : le serveur usité à sauvegarder
Personnellement, pour le serveur de sauvegarde, j’utilise un vieux ordinateur de récupération avec Lubuntu. J’aimerai bien essayer de le remplacer par mon NAS Synology. Ce sera le sujet d’une mise à jour de ce billet 🙂
J’utilise un disque dur externe pour la sauvegarde de mes serveurs. Je le note /media/<computer>/<hdd_backup>.
Chacun de mes serveurs écoutent sur un port SSH différents, je le note <port_ssh>.
On notera respectivement les ips des serveurs de sauvegarde et de donnée <ip_serveur_sauvegarde> et <ip_serveur_donnee>.
Préparation du disque dur externe
Pour préparer votre disque dur externe, commencer par installer GParted :
sudo apt install gparted
Puis formatter votre disque dur en ext4 et redémarrer votre ordinateur de sauvegarde.
Initialisation du serveur de sauvegarde et du serveur de donnée
Exécuter sur le serveur de sauvegarde et le serveur de donnée.
sudo apt update && sudo apt upgrade && sudo apt install gedit rsync grsync rsnapshot -y
Exécuter sur le serveur de donnée.
apt install bzip2
Exécuter sur le serveur de sauvegarde.
sudo su mkdir /media/<computer>/<hdd_backup>/backup chmod a+rwx /media/<computer>/<hdd_backup>/backup chmod o-w /media/<computer>/<hdd_backup>/backup sudo mkdir -p /mnt/backup_test/test_1 sudo mkdir -p /mnt/backup_test/test_2
Test de la connexion SSH à distance
Sur chaque serveur, on réalise le test suivant pour vérifier que rsync est bien installé. Vérifier que votre répertoire /home/ se copie dans /mnt/backup_test/ et annuler la procédure avec CTRL-C.
Exécuter sur le serveur de sauvegarde.
sudo rsync -azv --dry-run /home/ /mnt/backup_test/test_1 sudo rsync -azv -e /home/ /mnt/backup_test/test_1
On réalise le test suivant pour vérifier que l’on puisse copié des clés SSH. Vous devrez entrer votre mot de passe root lors de cette manipulation
Exécuter sur le serveur de sauvegarde.
sudo su backup_user cd $HOME mkdir .ssh chmod 755 .ssh ssh-keygen -N "" -f /$HOME/.ssh/id_rsa ssh-copy-id -i /$HOME/.ssh/id_rsa.pub -p <port_ssh> root@<ip_serveur_donnee> sudo bash exit
Puis on teste la connexion
ssh user@<ip_serveur_donnee> -p <port_ssh> exit
Et la synchronisation rsync à distance
sudo rsync -azv -e 'ssh -p <port_ssh>' root@<ip_serveur_donnee>:/home/ /mnt/backup_test/test_1
Configuration du serveur de donnée
Création de l’utilisateur
On se connecte au serveur de donnée et on créé le profil de l’utilisateur backup
sudo adduser backup_user -u 400 sudo mkdir /home/backup_user/.ssh sudo chmod 700 /home/backup_user/.ssh sudo mkdir /home/backup_user/bin
Script principal
sudo nano /home/backup_user/bin/rsync-wrapper.sh
Remplir le fichier ouvert avec ce script :
#!/bin/bash # This script is a wrapper around rsync, so that rsync can run as root, # and at the same time, eliminate any security risks. # Location of the Log file LOG="/home/backup_user/backup.log" # Place in the log file information concerning the execution of this script echo "rsync wrapper script executed on `date`" >> $LOG echo "options passed to rsync: " $@ >> $LOG echo "---------------------------------------------" >> $LOG # Now execute the script /usr/bin/sudo /usr/bin/rsync $@
Script Externes
On créé ensuite les scripts pour sauvegarder les bases de données, les dossier SVN, ect.
Vous pouvez tester les scripts ci-dessous avec la commande :
su - backup_user -c "sh /home/backup_user/bin/<script_name>.sh"
ou
su - backup_user -c ". /home/backup_user/bin/<script_name>.sh"
Script MySQL v1
sudo nano /home/backup_user/bin/backup_mysql_ext.sh
Remplir le fichier ouvert avec ce script, n’oublier de remplacer <mot_de_passe_mysql> par votre mot de passe MySQL :
#!/bin/sh if [ ! -d "$DIRECTORY" ]; then # Control will enter here if $DIRECTORY doesn't exist. mkdir -p "/home/backup_user/files/mysql" fi # On supprime les fichier vieux de plus de 5 jours find /home/backup_user/files/mysql -type f -name '*.tar.bz2' -mtime +5 -exec rm {} \; date_str=$(date +"%Y%m%d_%H%M%S") # Récupère toutes les bases de données databases=`mysql --user=root --password=<mot_de_passe_mysql> -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"` for i in $databases; do echo "saving" $i ## Sauvegarde des bases de donnees en fichiers .sql mysqldump -uroot -p<mot_de_passe_mysql> ${i} > /home/backup_user/files/mysql/${i}.$date_str.sql ## Compression des exports en tar.bz2 (le meilleur taux de compression) tar jcf /home/backup_user/files/mysql/${i}.$date_str.sql.tar.bz2 /home/backup_user/files/mysql/${i}.$date_str.sql ## Suppression des exports non compresses rm /home/backup_user/files/mysql/${i}.$date_str.sql done
Prendre soin de remplacer les deux chaînes de caractères <mot_de_passe_mysql> par votre mot de passe root de la base de donnée MySQL.
Script MySQL v2
Si une erreur du type « Warning: Using a password on the command line interface can be insecure. » apparaît lors de la sauvegarde des base MySQL alors vous devrez changer le script v1 par le script v2 ci-dessous. Ceci est dû à une mise à jour de MySQL pour la sécurité
#!/bin/sh if [ ! -d "$DIRECTORY" ]; then # Control will enter here if $DIRECTORY doesn't exist. mkdir -p "/home/backup_user/files/mysql" fi cd /home/backup_user/files/mysql # On supprime les fichier vieux de plus de 5 jours find /home/backup_user/files/mysql -type f -name '*.tar.bz2' -mtime +5 -exec rm {} \; date_str=$(date +"%Y%m%d_%H%M%S") # Récupère toutes les bases de données databases=`mysql --defaults-extra-file=/etc/mysql/mysql-backup-script.cnf -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"` for i in $databases; do echo "saving" $i "to" ${i}.$date_str ## Sauvegarde des bases de donnees en fichiers .sql mysqldump --defaults-extra-file=/etc/mysql/mysql-backup-script.cnf --single-transaction --databases ${i} > /home/backup_user/files/mysql/${i}.$date_str.sql echo "compressing" $i ## Compression des exports en tar.bz2 (le meilleur taux de compression) tar jcf ${i}.$date_str.sql.tar.bz2 ${i}.$date_str.sql ## Suppression des exports non compresses rm /home/backup_user/files/mysql/${i}.$date_str.sql done
Et vous devez créer le fichier
sudo nano /etc/mysql/mysql-backup-script.cnf
et le remplir ainsi
[client] user = root password = votremotdepasse
Pour récupérer le mot de passe de MySQL avec myVesta
sudo cat /usr/local/vesta/conf/mysql.conf
Script PostgreSQL
sudo nano /home/backup_user/bin/backup_postgresql_ext.sh
Remplir le fichier ouvert avec ce script :
#!/bin/sh function output_file_size { size=`stat $1 --printf="%s"` kb_size=`echo "scale=2; $size / 1024.0" | bc` echo "Finished backup for $2 - size is $kb_size KB" >> /tmp/db_backup_info.log } # On supprime les fichier vieux de plus de 7 jours find /home/backup_user/files/psql/ -type f -mtime +7 -exec rm {} \; rmdir /home/backup_user/files/psql/* echo "" > /tmp/db_backup.log echo "" > /tmp/db_backup_info.log date_str=$(date +"%Y%m%d_%H%M%S") backup_dir=/home/backup_user/files/psql/pg_backup.$date_str mkdir -p $backup_dir pushd $backup_dir > /dev/null dbs=`sudo -u postgres psql -Upostgres -lt | cut -d \| -f 1 | grep -v template | grep -v -e '^\s*$' | sed -e 's/ *$//'| tr '\n' ' '` #dbs='dgul hrms mailer_server missions postgres' echo "Will backup: $dbs to $backup_dir" >> /tmp/db_backup_info.log for db in $dbs; do echo "Starting backup for $db" >> /tmp/db_backup_info.log filename=$db.$date_str.sql.gz filename_binary=$db.$date_str.bak.gz sudo -u postgres vacuumdb --analyze -Upostgres $db >> /tmp/db_backup.log sudo -u postgres pg_dump -Upostgres -v $db -F p 2>> /tmp/db_backup.log | gzip > $filename sudo -u postgres pg_dump -Upostgres -v $db -F c 2>> /tmp/db_backup.log | gzip > $filename_binary output_file_size $filename "$db sql" output_file_size $filename_binary "$db bin" done echo "Backing up global objects" >> /tmp/db_backup_info.log filename=global.$date_str.sql.gz sudo -u postgres pg_dumpall -Upostgres -v -g 2>> /tmp/db_backup.log | gzip > $filename output_file_size $filename global echo "Ok!" >> /tmp/db_backup_info.log #mail -s "Backup results" spapas@hcg.gr < /tmp/db_backup_info.log #popd > /dev/null
Script SVN
sudo nano /home/backup_user/bin/backup_svn_ext.sh
Remplir le fichier ouvert avec ce script, n’oublier de remplacer <repertoire_svn> par le dossier racine de votre SVN :
#!/bin/sh # Backup SVN svnrepo="<repertoire_svn>" if [ ! -d "$DIRECTORY" ]; then # Control will enter here if $DIRECTORY doesn't exist. mkdir -p "/home/backup_user/files/svn/" fi # On supprime les fichier vieux de plus de 2 jours find /home/backup_user/files/svn/ -type f -name '*.svndump' -mtime +2 -exec rm {} \; #find /home/backup_user/files/svn/ -type f -name '*.svndump.gz' -mtime +2 -exec rm {} \; date_str=$(date +"%Y%m%d_%H%M%S") for i in `ls $svnrepo` do svnadmin -q dump $svnrepo/$i > /home/backup_user/files/svn/$i.$date_str.svndump #gzip -f /home/backup_user/files/svn/$i.$date_str.svndump #rm /tmp/rsnapshot/svn/$i.svndump done
Script Elasticsearch
sudo nano /home/backup_user/bin/elasticsearch_snapshot.sh
Remplir le fichier ouvert avec ce script :
#!/bin/bash #This script automates the creation of elasticsearch index backup(.kibana) mkdir -p /home/backup_user/files/elasticseacrhData/es-backup chown -R elasticsearch:elasticsearch /home/backup_user/files/elasticseacrhData/es-backup sudo apt install curl #add the required path.repo to elasticsearch yaml file cat >> /etc/elasticsearch/elasticsearch.yml << EOF path.repo: ["/home/backup_user/files/elasticseacrhData/es-backup"] EOF URL_REQ="http://localhost:9200/_snapshot/es-backup'" #inform elasticsearch of the backup repository curl -m 30 -XPUT $URL_REQ -H "Content-Type: application/json" -d '{ "type": "fs", "settings": { "location": "/home/backup_user/files/elasticseacrhData/es-backup", "compress": true } }' backup_index=”.kibana” TIMESTAMP=`date +"%Y%m%d_%H%M%S"` #specify the index to backup #include_global_state: to prevent the cluster global state to be stored as part of the snapshot curl -XPUT "$URL_REQ/$TIMESTAMP?wait_for_completion=true" -H "Content-Type: application/json" -d '{ "indices": "$backup_index", "ignore_unavailable": true, "include_global_state": false }' mv /home/backup_user/files/elasticseacrhData/es-backup /home/backup_user/files/elasticseacrhData/es-backup-$TIMESTAMP tar -zcvf /home/backup_user/files/elasticseacrhData/es-backup-$TIMESTAMP.tar.gz /home/backup_user/files/elasticseacrhData/es-backup-$TIMESTAMP rm -R /home/backup_user/files/elasticseacrhData/es-backup-$TIMESTAMP # The amount of snapshots we want to keep. LIMIT=30 # Get a list of snapshots we want to delete omitting the most recent index SNAPSHOTS=`curl -m 30 -s -XGET "$URL_REQ/_all" -H "Content-Type: application/json" \ | jq ".snapshots[:-${LIMIT}][].snapshot"` # Loop over the results and delete old snapshots for SNAPSHOT in $SNAPSHOTS do echo "Deleting snapshot: $SNAPSHOT" curl -m 30 -s -XDELETE "$URL_REQ/$SNAPSHOT?pretty" done echo "Done!"
Configuration de l’arborescence
sudo chmod +x /home/backup_user/bin/* sudo chown backup_user: -R /home/backup_user sudo chmod 754 /home/backup_user/bin/rsync-wrapper.sh
Configuration des droits utilisateurs
Ouvrir le fichier sudoers :
sudo nano /etc/sudoers
Et rajouter les lignes suivantes :
# allows this user to not need a password to sudo the specified command(s) backup_user ALL=NOPASSWD: /usr/bin/rsync
Et si il faut sauvegarder des bases MySQL
backup_user ALL=(mysql) NOPASSWD:/usr/bin/mysql,/usr/bin/mysqldump
Et si il faut sauvegarder des bases PostgreSQL
backup_user ALL=(postgres) NOPASSWD:/usr/bin/psql,/usr/bin/vacuumdb,/usr/bin/pg_dump,/usr/bin/pg_dumpall
Configuration du serveur de sauvegarde
Configuration des droits utilisateurs
sudo adduser backup_user -u 400
Ouvrir le fichier sudoers :
sudo nano /etc/sudoers
Et rajouter les lignes suivantes :
# allows this user to not need a password to sudo the specified command(s) backup_user ALL=NOPASSWD: /usr/bin/rsync backup_user ALL=NOPASSWD: /usr/bin/rsnapshot
Ouvrir le fichier de configuration SSH :
sudo nano /etc/ssh/sshd_config
Et rajouter les lignes suivantes :
Host *RPi StrictHostKeyChecking no UserKnownHostsFile=/dev/null
Configuration des clés SSH
sudo su backup_user cd ~ ssh-keygen -N "" -f ~/.ssh/id_rsa ssh-copy-id -i /$HOME/.ssh/id_rsa.pub -p <port_ssh> backup_user@<ip_serveur_donnee> exit
Puis on test la connexion
ssh backup_user@<ip_serveur_donnee> -p <port_ssh> exit
Si vous avez plusieurs serveurs à sauvegarder, lancer la commande suivante pour chaque serveur
ssh-copy-id -i /$HOME/.ssh/id_rsa.pub -p <port_ssh> backup_user@<ip_serveur_donnee_n>
Et la synchronisation rsync à distance
rsync -azv -e 'ssh -p <port_ssh>' backup_user@<ip_serveur_donnee>:/home/ /mnt/backup_test/test_2 exit
Configuration de Rsnapshot
mkdir /home/backup_user/bin nano /home/backup_user/bin/rsnapshot-wrapper.sh
Remplir le fichier ouvert comme ci-dessous :
#!/bin/bash # This script is a wrapper around rsnapshot, so status information is logged # and notification are made via Pushover app. It also makes sure the log file # doesn't grow too large. # Capture scripts start time STARTTIME=`date +%s` # Location of the Log file LOG="/home/backup_user/backup.log" # Number of lines in the log file required to trigger it's truncation MAXLINES=7000 # Number of lines remaining in the log file after its truncated MINLINES=2000 # Calculate the size of the Log file LOGSIZE=$( wc $LOG | awk '{ print $1 }' ) # Place in the log file information concerning the execution of this script echo -e "\n\n+++++ rsnapshot script started on `date` +++++" >> $LOG echo "options passed to rsnapshot: " $@ >> $LOG # Now execute the scriptme ##/usr/bin/sudo /usr/bin/rsnapshot -v "$@" >> $LOG 2>&1 /usr/bin/sudo /usr/bin/rsnapshot -v "$@" EXITSTATUS=$? # Capture scripts end time and calculate run time ENDTIME=`date +%s` INTERVAL=$((ENDTIME - STARTTIME)) RUNTIME="$(($INTERVAL / 60)) min. $(($INTERVAL % 60)) sec." # Place time-stamped completion message in the Log echo "rsnapshot exited with status $EXITSTATUS" >> $LOG echo "+++++ rsnapshot ran" $RUNTIME "and script completed on `date` +++++" >> $LOG # Send status notification to Pushover app # /home/joedoe/bin/apprise -t "Incremental Backup Status" -m "Filesystem backup took $RUNTIME and completed on `date` with exit status $EXITSTATUS. Log file $LOG has $LOGSIZE lines." # Truncate the log file if needed if [ $LOGSIZE -ge $MAXLINES ] then LINECUT=`expr $LOGSIZE - $MINLINES` sed -i "1,$LINECUT d" $LOG sed -i "1i //////////////// File truncated here on `date`. //////////////// " $LOG fi
Puis
chmod +x /home/backup_user/bin/rsnapshot-wrapper.sh
Configuration des exclusions
nano /home/backup_user/rsync-exclude
Remplir le fichier ouvert avec les dossiers qui sont exclus et qui ne seront pas sauvegarder :
- /var/lib/pacman/sync/* - /lost+found - /media - /cdrom - /proc - /mnt - /run - /tmp - /sys - /dev
Remplir le fichier de configuration
sudo su nano /etc/rsnapshot.conf
Le répertoire principal de sauvegarde
snapshot_root /media/<computer>/<hdd_backup>
Les intervalles de sauvegarde, ici on garde 6 sauvegardes horaires, 7 sauvegardes journalière, 4 sauvegardes hebdomadaires et 3 sauvegardes mensuelles.
######################################### # BACKUP INTERVALS # # Must be unique and in ascending order # # i.e. hourly, daily, weekly, etc. # ######################################### retain hourly 6 retain daily 7 retain weekly 4 retain monthly 3
Les arguments de rsync
# Default rsync args. All rsync commands have at least these options set. # NO TABS FOR SPACES rsync_short_args -aev rsync_long_args --rsync-path=/home/backup_user/bin/rsync-wrapper.sh --delete --numeric-ids --no-relative --delete-excluded
La configuration du port SSH (si il est identique pour l’ensemble des serveurs à sauvegarder)
# ssh has no args passed by default, but you can specify some here. # ssh_args -i /home/backup_user/.ssh/id_rsa -p <port_ssh>
Le lancement des scripts, à placer à la fin du fichier de configuration. Ici, un exemple avec 4 scripts de sauvegardes (ceux que nous avons défini plus haut) c’est à dire les scripts de sauvegarde de MySQL, PostgreSQL, SVN, Elasticsearch.
backup_script /usr/bin/ssh -i /home/backup_user/.ssh/id_rsa -p <port_ssh> backup_user@<ip_serveur_donnee> "/home/backup_user/bin/backup_mysql_ext.sh" unused_1/ backup_script /usr/bin/ssh -i /home/backup_user/.ssh/id_rsa -p <port_ssh> backup_user@<ip_serveur_donnee> "/home/backup_user/bin/backup_postgresql_ext.sh" unused_2/ backup_script /usr/bin/ssh -i /home/backup_user/.ssh/id_rsa -p <port_ssh> backup_user@<ip_serveur_donnee> "/home/backup_user/bin/backup_svn_ext.sh" unused_3/ backup_script /usr/bin/ssh -i /home/backup_user/.ssh/id_rsa -p <port_ssh> backup_user@<ip_serveur_donnee> "/home/backup_user/bin/elasticsearch_snapshot.sh" unused_4/
et le backup des données prends la forme de :
backup backup_user@<ip_serveur_donnee>:/ backup_directory ssh_args=pPORT exclude_file=/home/backup_user/rsync-exclude
Configuration de l’automatisation
sudo crontab -e -u backup_user
Rajouter les lignes suivantes au cron :
# m h dom mon dow command 0 */4 * * * /home/backup_user/bin/rsnapshot-wrapper.sh hourly 30 2 * * * /home/backup_user/bin/rsnapshot-wrapper.sh daily 30 10 * * 6 /home/backup_user/bin/rsnapshot-wrapper.sh weekly 30 14 1 * * /home/backup_user/bin/rsnapshot-wrapper.sh monthly
Divers : attribuer un chemin fixe pour le disque dur
Sur lubuntu il faut installer gnome-disks
sudo apt-get install gnome-disk-utility
Puis on va dans l’application gnome-disks
gnome-disks
Puis éditer le Mount point.
Divers : envoyer un mail après chaque backup
On copie l’outil de rapport rsnapshot, pour cela on commence par le rechercher
sudo find . -name rsnapreport.pl
J’obtiens
/usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl
Et on le copie dans le dossier local
cp /usr/share/doc/rsnapshot/examples/utils/rsnapreport.pl /usr/local/bin chmod +x /usr/local/bin/rsnapreport.pl
On installe le paquet sSMTP
sudo apt update sudo apt install ssmtp
On édite le fichier de configuration
nano /etc/ssmtp/ssmtp.conf
Et on remplit les champs
root=user@domain.com mailhub=smtp_server:smtp_port (exemple : ssl0.ovh.net:465) rewriteDomain=domain.com hostname=domain.com FromLineOverride=YES AuthUser=user@domain.com AuthPass=password UseTLS=YES
On édite le fichier de configuration des aliases
nano /etc/ssmtp/revaliases
Et on rajoute
root:user@domain.com:smtp_server:smtp_port
Et on teste la configuration en envoyant un mail
echo "Test" | ssmtp adressemail@test.com
Puis on met à jour le crontab
sudo crontab -e -u backup_user
Et
# m h dom mon dow command 0 */4 * * * /home/backup_user/bin/rsnapshot-wrapper.sh hourly 2>&1 | /usr/local/bin/rsnapreport.pl | ssmtp "backup hourly" info@mcdavidian.com 30 2 * * * /home/backup_user/bin/rsnapshot-wrapper.sh daily 2>&1 | /usr/local/bin/rsnapreport.pl | ssmtp "backup daily" info@mcdavidian.com 30 10 * * 6 /home/backup_user/bin/rsnapshot-wrapper.sh weekly 2>&1 | /usr/local/bin/rsnapreport.pl | ssmtp "backup weekly" info@mcdavidian.com 30 14 1 * * /home/backup_user/bin/rsnapshot-wrapper.sh monthly 2>&1 | /usr/local/bin/rsnapreport.pl | ssmtp "backup monthly " info@mcdavidian.com
Divers : cas d’une protection DynHost
Si vous utilisez une protection DynHost sur votre serveur de donnée, suivez cette partie.
Sur le serveur de donnée, installer ddclient.
sudo apt install ddclient
Editez le fichier /etc/ddclient.conf afin d’y saisir les informations nécessaires à la mise à jour du couple IP/DNS. Ci-dessous, avec notre exemple pour OVH :
Enfin, redémarrez ddclient pour prendre en compte les modifications :
sudo service ddclient restart
Divers : sauvegarde d’Elasticsearch
Je me sers d’Elasticsearch pour Akeneo PIM. Elasticsearch utilise un procédé différent de ce que l’on a vu précédemment pour sauvegarder ses données. Voici donc un petit aparté consacré à ce dernier.
Premièrement, on installe cURL si ce n’est pas déjà fait sur le serveur de sauvegarde et de donnée où se trouve le PIM.
apt install curl
Pour éviter des erreurs, on lance ces trois commandes sur le serveur de donnée où se trouve le PIM.
mkdir -p /tmp/pim/file_storage mkdir -p /tmp/pim/upload_tmp_dir chown -R www-data: /tmp/pim/
On se connecte ensuite au serveur de sauvegarde puis on lance les commandes suivantes :
mkdir -p /home/backup_user/files/elasticseacrhData/es-backup chown -R elasticsearch:elasticsearch /home/backup_user/files/elasticseacrhData
cat >> /etc/elasticsearch/elasticsearch.yml << EOF path.repo: ["/home/backup_user/files/elasticseacrhData/es-backup"] EOF
service elasticsearch restart
curl -XGET 'http://localhost:9200/_snapshot/_all?pretty'
On doit recevoir une double accolade : { }
curl -XPUT -H "Content-Type: application/json;charset=UTF-8" 'http://localhost:9200/_snapshot/es-backup' -d '{ "type": "fs", "settings": { "location": "/home/backup_user/files/elasticseacrhData/es-backup", "compress": true } }'
curl -XGET 'http://localhost:9200/_snapshot/_all?pretty'
On doit recevoir une réponse non vide.
On réalise la sauvegarde :
curl -XPUT "http://localhost:9200/_snapshot/es-backup/linuxpoint_snapshot?wait_for_completion=true"
On vérifie la sauvegarde :
curl -XGET "http://localhost:9200/_snapshot/es-backup/_all?pretty"
Pour effacer la sauvegarde on utilise la commande :
curl -XDELETE 'http://localhost:9200/_snapshot/es-backup/linuxpoint_snapshot'
Pour restorer une sauvegarde on utilise la commande :
curl -XPOST “localhost:9200/_snapshot/my_backup/es-backup/_restore?wait_for_completion=true”
Si lors de l’installation, Elasticsearch ne démarre plus, lancer la commande :
sudo chown elasticsearch: -R /etc/elasticsearch/
Source :
https://linuxaws.wordpress.com/2018/09/21/how-to-create-snapshots-of-elasticsearch-cluster-data-and-restore/
https://discuss.elastic.co/t/incremental-snapshot-in-elasticsearch/93874/2
https://www.elastic.co/fr/blog/found-elasticsearch-snapshot-and-restore
https://qbox.io/blog/elasticsearch-data-snapshots-restore-tutorial
https://medium.com/@ebaneckatuh/how-to-create-and-restore-an-elasticsearch-index-using-a-bash-script-1ff1e66f0e8f
Divers : mise en veille pour la nuit
Lorsque je ne suis pas au bureau, je préfère que le serveur de sauvegarde reste en veille.
L’ordinateur reste en veille de 00:17 à 10:00.
sudo touch /home/rtc.log sudo chmod 777 /home/rtc.log sudo crontab -e -u backup_user
On ajoute la ligne
0 17 * * * sudo rtcwake -m mem -l -t "$(date -d 'tomorrow 10:00:00' '+\%s')" >> /home/rtc.log 2>&1
Puis on redémarre cron
sudo service cron restart
Divers : limiter la bande passante du serveur de sauvegarde
Si le serveur de donnée se trouve ralenti lors des phases de sauvegarde, vous pouvez ajouter l’argument –bwlimit=1MiB à rsync_long_args
rsync_long_args --rsync-path=/home/backup_user/bin/rsync-wrapper.sh --delete --numeric-ids --no-relative --delete-excluded --bwlimit=1MiB
Je vous conseille aussi, pour garder un œil sur les performances du serveur de sauvegarde, de télécharger un logiciel comme Open Hardware Monitor qui vous permettra de surveiller les températures de votre serveur. En effet, j’ai eu le problème d’un serveur de sauvegarde qui s’est éteint à la suite de forte température interne. Veillez donc à mettre des alarmes au cas échéant.
Problèmes possibles
Erreur « Access denied for user ‘root’@’localhost' »
Ce problème provient de la sauvegarde d’une base de donnée MySQL. Il est dû à un problème de gestion des privilèges.
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'PASSWORD'; GRANT ALL PRIVILEGES ON *.* TO 'backup_user'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES;
mysql --user=backup_user --password=PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema)"
Source : https://askubuntu.com/questions/763336/cannot-enter-phpmyadmin-as-root-mysql-5-7/763359#763359
Erreur « Replace space by tabs »
Si vous avez ce problème c’est qu’il faut remplacer les espaces par des tabulations dans le fichier /etc/rsnapshot.conf
0 commentaire