L'autre jour, nous avons publié la version 0.1.0 de DREBS, notre script de Récupération après Sinistre pour Elastic Block Storage. Nous l'utilisons toutes les heures sur nos 3 instances EC2, sauvegardant 6 volumes EBS différents. Ce script est crucial pour nous et pour la communauté AWS en général car Amazon ne supporte officiellement aucun script ou outil de sauvegarde. Il existe plusieurs produits SaaS qui offrent cette fonctionnalité, mais les scripts open source pour les hackers comme nous sont rares. La nouvelle version réécrite est prête pour la production et nous espérons que vous l'apprécierez autant que nous.
L'année dernière, l'ancien employé de dojo4 et ami éternel du dojo Garett Shulman a publié la première version de DREBS. Il avait pour objectif simple de permettre à un administrateur de définir des stratégies de sauvegarde et des tâches pré/post-sauvegarde (mysqldump, etc.) pour chaque volume EBS monté sur une instance EC2. Une simple tâche cron exécute DREBS toutes les heures, qui passe en revue chaque stratégie de sauvegarde d'instance EBS et, si la stratégie indique qu'une sauvegarde doit être effectuée, DREBS utilise le gem right_aws pour sauvegarder le volume et le télécharger sur le compte AWS en tant qu'instantané EBS.
La nouvelle version de DREBS offre la même fonctionnalité mais avec quelques améliorations :
- L'état est maintenant stocké dans une petite base de données sqlite au lieu d'un fichier json.
- Résilient lorsque les stratégies changent.
- Résilient lorsque les instantanés sont supprimés dans la console AWS.
- Un shell DREBS qui vous permet de tester votre configuration facilement et rapidement.
Voici un exemple de configuration de DREBS dans notre crontab sur toutes nos machines :
0 * * * * /home/dojo4/git/drebs/bin/drebs execute /usr/local/var/drebs_config.yml &> /usr/local/var/drebs_cron.out
et voici notre fichier de configuration pour l'une de nos instances EC2 :
---
aws_access_key_id: XXXX
aws_secret_access_key: XXX
region: us-west-1
strategies:
- hours_between: 6
num_to_keep: 12
mount_point: /dev/sdh
pre_snapshot_tasks:
- pg_dump -U postgres -f /ebs/databases/postgresql/backups/project_name_production.sql project_name_production
post_snapshot_tasks:
- hours_between: 1
num_to_keep: 2
mount_point: /dev/sda1
pre_snapshot_tasks:
post_snapshot_tasks:
- hours_between: 24
num_to_keep: 4
mount_point: /dev/sda1
- hours_between: 96
num_to_keep: 4
mount_point: /dev/sda1
log_path: /usr/local/var/drebs.log
email_on_exception: miles@dojo4.com
email_host: smtp.gmail.com
email_port: 587
email_domain: gmail.com
email_user: xxx
email_password: xxx
Comme toujours, nous avons d'autres idées pour améliorer ce script et si ce script vous aide autant qu'il nous aide, nous vous invitons à forker le dépôt et à nous envoyer une pull request :
- Améliorer la couverture des tests
- Utiliser le gem whenever pour une configuration crontab plus facile
- Intervalles d'exécution arbitraires (instantanés toutes les 5 minutes au lieu de toutes les heures)
- Clés API AWS et autres valeurs de configuration à partir des données d'instance AWS
- Ajouter un exemple de configuration d'accès utilisateur AWS
Nous pensons que DREBS est une grande contribution à la communauté AWS qui nous a aidés à construire une grande architecture de déploiement qui a hébergé des sites web et des produits incroyables au fil des ans. Si vous êtes d'accord et que vous l'utilisez, nous aimerions entendre vos commentaires sur Twitter à @dojo4 !