Статьи

Автоматизация резервного копирования и восстановления экземпляров Amazon EC2, часть первая

Часть первая: планирование снимков с помощью Cron

Уровень умения: Средний
Операционная система (ы): Linux

философия

99,999% безотказной работы. Это прекрасная цель, и для ее достижения мы должны спланировать неизбежные сбои и проблемы, которые приводят к поломке наших серверов.

Лучшее, что мы можем сделать, — это подготовиться с помощью трех принципов: планирование, процесс и практика.

Итак, как мы планируем худшее? Делать резервные копии, конечно! Лучший вид — это те, которые:

  • Запустить автоматически,
  • Хранятся в другом месте, кроме сервера, для которого выполняется резервное копирование,
  • Быстро и легко восстановить,
  • Не стоить целое состояние, чтобы бежать или держать.

Поскольку мы находимся на AWS, это очень легко сделать.

План

Настройте ежедневное событие, чтобы создать резервную копию всего нашего экземпляра EC2.

Мы будем использовать команду cron для планирования моментального снимка AWS Elastic Block Store (EBS), который создает образ всей файловой системы на момент запуска моментального снимка и может быть использован позже для восстановления экземпляра в событие отказа. Обратите внимание, что только экземпляры AWS, поддерживаемые EBS, могут использовать этот метод.

Предпосылки:

Установите необходимые инструменты

Для этого нам понадобятся следующие вещи:

Файлы сертификатов и закрытых ключей AWS X.509

Эти два файла позволяют вашему серверу безопасно выполнять команды экземпляра AWS EC2.

Они получены на странице « Учетная запись AWS » на странице « Учетные данные безопасности». Внизу страницы найдите три вкладки: «Ключи доступа», «Сертификаты X.509» и «Пары ключей». Найдя, нажмите среднюю « Сертификаты X.509 ».

Затем нажмите ссылку «Создать новый сертификат», и появится новое окно с двумя оранжевыми кнопками загрузки: «Загрузить файл закрытого ключа» и «Загрузить сертификат X.509». Вы получаете только одну возможность загрузить свой файл закрытого ключа, поэтому будьте осторожны, чтобы указать, куда загружается этот файл! Также загрузите файл сертификата, который вы можете загрузить снова в любое время.

Файл закрытого ключа будет иметь вид:
pk-{your_specific_32_character_random_string}.pem

и файл сертификата будет выглядеть так:
cert-{your_specific_32_character_random_string}.pem

Затем загрузите два файла в свой экземпляр AWS EC2:

 ~/Downloads% scp -i AWSKeyPair.pem pk-*.pem ec2-user@{yourInstance_FQDN_or_IP}:
~/Downloads% scp -i AWSKeyPair.pem cert-*.pem ec2-user@{yourInstance_FQDN_or_IP}:

Наконец, вам нужно будет скопировать два файла в домашний каталог вашего пользователя root:

 root@yourInstance# cd
root@yourInstance# mkdir .ec2/
root@yourInstance# chmod 700 .ec2/
root@yourInstance# cp ~ec2-user/*.pem .ec2/
root@yourInstance# ls -l .ec2/

Инструменты Amazon EC2 API

Это фактические команды, которые запускаются на вашем экземпляре, чтобы позволить вам создать моментальный снимок (и восстановить его тоже).

 root@yourInstance# yum install aws-apitools-ec2 ec2-utils

Приведенная выше команда устанавливает Инструменты API в /opt/aws/apitools/ec2-1.4.4.2 и создает символическую ссылку на нее:
lrwxrwxrwx 1 root root 13 Oct 20 01:57 /opt/aws/apitools/ec2 -> ./ec2-1.4.4.2

Приведенная выше команда yum также устанавливает три служебные команды EC2:
/etc/udev/rules.d/51-ec2-hvm-devices.rules
/opt/aws/bin/ec2-metadata
/sbin/ec2udev

Если yum недоступен, вы можете скачать и установить вручную:
Инструменты API: http://aws.amazon.com/developertools/351
Утилиты EC2: http://aws.amazon.com/code/1825?_encoding=UTF8&jiveRedirect=1

Получить последнюю версию Sun / Oracle Java JDK

Загрузите соответствующий rpm: http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u1-download-513651.html.

Intel x86 arch: http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-linux-i586.rpm
AMD x64 arch: http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-linux-x64.rpm

 root@yourInstance# wget -Ojdk-7u1-linux-i586.rpm http://download.oracle.com/otn-pub/java/jdk/7u1-b08/jdk-7u1-linux-i586.rpm

Установить:

 root@yourInstance# rpm -i jdk-7u1-linux-i586.rpm

или, чтобы обновить:

 root@yourInstance# rpm -U jdk-7u1-linux-i586.rpm

Чтобы правильно установить переменную среды $ JAVA_HOME только для этого сеанса командной строки:

 root@yourInstance# export JAVA_HOME=/usr/java/latest

Сценарии

Эти сценарии помогают автоматизировать каждый шаг процесса, предоставляя ключевые элементы рабочего процесса, которые позволяют нам быстро выполнить работу.

ВАЖНО: Пожалуйста, создайте каждый из этих сценариев в каталоге /opt/bin

Кроме того, убедитесь, что правильно настроили права на выполнение для всех новых скриптов:

 root@yourInstance# chmod 750 /opt/bin/*

/ Опт / bin / InstanceID

Сценарий instanceid

 #!/bin/sh
#
### /opt/bin/instanceid
#
/opt/aws/bin/ec2-metadata -i | /bin/awk '{print $2}'

/ Опт / bin / ec2do

Основной сценарий оболочки — ec2do Мы делаем это потому, что команда планирования cron

Обязательно измените приведенный ниже пример, включив в него 32-символьный случайный ключ X.509.

 #!/bin/bash
#
### /opt/bin/ec2do
#
## EXAMPLE:
## ec2-describe-volumes
## Becomes:
## ec2do describe-volumes
#
export EC2_HOME='/opt/aws/apitools/ec2'  # Make sure you use the API tools, not the AMI tools
export EC2_BIN=$EC2_HOME/bin
export EC2_PRIVATE_KEY=/root/.ec2/pk-{your_32_char_rand}.pem
export EC2_CERT=/root/.ec2/cert-{your_32_char_rand}.pem
export PATH=$PATH:$EC2_BIN
export JAVA_HOME=/usr/java/latest
$EC2_BIN/ec2-$*

/ Опт / bin / тома

 #!/bin/sh
#
### /opt/bin/volumes
#
/opt/bin/ec2do describe-volumes | /bin/grep ATTACHMENT | /bin/grep `/opt/bin/instanceid`

Выводит одну или несколько строк, например:
ATTACHMENT vol-424ebd4a i-2c765a02 /dev/sda1 attached 2011-08-29T19:08:20+0000
ATTACHMENT vol-88c73d2f i-2c765a02 /dev/sdb1 attached 2011-08-29T19:08:20+0000

Второй столбец содержит {volumeID}, которые вам понадобятся для создания снимков.

Если вы дошли до этого уровня, то вы успешно установили ключи X.509 и использовали инструменты API для получения информации об этом экземпляре. Поздравляем!
Если вы не получите вывод этой команды, остановитесь и перепроверьте каждый из предыдущих шагов. НЕОБХОДИМО, чтобы команда /opt/bin/ec2do describe-volumes

/ Опт / bin / VolSnap

Команда /opt/bin/volsnap Одна строка для получения текущей даты и одна строка для каждого тома для резервного копирования.

Замените {volumeID_X} фактическими идентификаторами томов, возвращенными из команды /opt/bin/volumes Также замените {yourInstance} именем хоста или любой другой идентифицирующей строкой, которую вы хотите использовать.

 #!/bin/sh
#
### /opt/bin/volsnap
#
DATE=`/bin/date '+%Y%m%d%H%M%S'`
/opt/bin/ec2do create-snapshot {volumeID_1} --description "{yourInstance}-{volumeID_1}-$DATE"
/opt/bin/ec2do create-snapshot {volumeID_2} --description "{yourInstance}-{volumeID_2}-$DATE"

Очевидно, что гораздо более сложный скрипт, чем этот, может быть написан (и был), но это немного выходит за рамки этого урока; -}

Запустите скрипт вручную, чтобы убедиться, что он работает:

 root@yourInstance# /opt/bin/volsnap

Вы должны увидеть что-то похожее на это:
SNAPSHOT snap-36380592 vol-424ebd4a pending 2011-10-20T03:46:57+0000 510579120428 8

Войдите в консоль AWS и перейдите к EC2 »Снимки, и вы сможете увидеть только что сделанные снимки.

Вы также можете запустить:

 /opt/bin/ec2do describe-snapshots

Планирование резервного копирования

Наконец, мы добрались до последнего шага — автоматизации резервного копирования скрипта.

 root@yourInstance# crontab -e

11 00 * * * /opt/bin/volsnap > /var/log/volsnap.log 2>&1

Приведенная выше запись cron/var/log/volsnap.log

Резюме

Поздравляем! Отличная работа — вы автоматизировали резервное копирование. В следующей части нашей серии вы узнаете, как использовать моментальный снимок для полного и простого восстановления неисправного экземпляра.

Ссылки на ресурсы

http://aws.amazon.com/ec2/faqs/
http://docs.amazonwebservices.com/AWSEC2/latest/CommandLineReference/
От нуля до облака: настройка песочницы EC2, часть 2

Изображение через Shutswis / Shutterstock