Кілька днів тому ми випустили версію 0.1.0 DREBS, нашого скрипту для відновлення даних з Elastic Block Storage. Ми використовуємо його кожну годину на всіх 3 наших інстансах EC2, створюючи резервні копії 6 різних томів EBS. Цей скрипт критично важливий для нас і спільноти AWS в цілому, оскільки Amazon офіційно не підтримує жодного такого скрипту або інструменту для створення резервних копій. Є кілька SaaS-продуктів, які надають таку функціональність, але відкриті скрипти для хакерів, як ми, зустрічаються нечасто. Нова переписана версія готова до використання у виробництві, і ми сподіваємося, що ви насолодитеся нею так само, як і ми.
Минулого року колишній співробітник dojo4 та вічний друг доджо Гаретт Шульман випустив першу версію DREBS. Вона мала просту мету: дозволити адміністратору визначити стратегії резервного копіювання та завдання перед/після створення резервної копії (mysqldump тощо) для кожного тому EBS, підключеного до інстансу EC2. Просте cron-завдання запускає DREBS кожну годину, яке проходить через кожну стратегію резервного копіювання інстансу EBS, і якщо стратегія вказує, що потрібно створити резервну копію, DREBS використовує right_aws gem для створення резервної копії тому та завантаження її до облікового запису AWS як знімку EBS.
Нова версія DREBS надає ту саму функціональність, але з деякими покращеннями:
- Стан тепер зберігається у невеликій базі даних sqlite замість json-файлу.
- Стійкий до змін стратегій.
- Стійкий до видалення знімків у консолі AWS.
- Оболонка DREBS, яка дозволяє легко та швидко тестувати вашу конфігурацію.
Як приклад налаштування, ось DREBS у нашому crontab на всіх наших машинах:
0 * * * * /home/dojo4/git/drebs/bin/drebs execute /usr/local/var/drebs_config.yml &> /usr/local/var/drebs_cron.out
а ось наш конфігураційний файл для одного з наших інстансів 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
Як завжди, у нас є ще ідеї, як покращити цей скрипт, і якщо цей скрипт допомагає вам так само, як і нам, ми запрошуємо вас внести свій внесок у репозиторій і надіслати нам pull request:
- Покращити тестове покриття
- Використовувати whenever gem для простішого налаштування crontab
- Довільні інтервали виконання (знімки кожні 5 хвилин замість кожної години)
- Ключі API AWS та інші конфігураційні значення з даних інстансу AWS
- Додати приклад конфігурації доступу користувача AWS
Ми вважаємо, що DREBS — це чудовий внесок у спільноту AWS, який допоміг нам створити чудову архітектуру розгортання, яка протягом років хостила чудові вебсайти та продукти. Якщо ви погоджуєтесь і використовуєте його, ми б з радістю почули вашу думку у Twitter @dojo4!