Часть первая: планирование снимков с помощью Cron
Уровень умения: Средний
Операционная система (ы): Linux
философия
99,999% безотказной работы. Это прекрасная цель, и для ее достижения мы должны спланировать неизбежные сбои и проблемы, которые приводят к поломке наших серверов.
Лучшее, что мы можем сделать, — это подготовиться с помощью трех принципов: планирование, процесс и практика.
Итак, как мы планируем худшее? Делать резервные копии, конечно! Лучший вид — это те, которые:
- Запустить автоматически,
- Хранятся в другом месте, кроме сервера, для которого выполняется резервное копирование,
- Быстро и легко восстановить,
- Не стоить целое состояние, чтобы бежать или держать.
Поскольку мы находимся на AWS, это очень легко сделать.
План
Настройте ежедневное событие, чтобы создать резервную копию всего нашего экземпляра EC2.
Мы будем использовать команду cron для планирования моментального снимка AWS Elastic Block Store (EBS), который создает образ всей файловой системы на момент запуска моментального снимка и может быть использован позже для восстановления экземпляра в событие отказа. Обратите внимание, что только экземпляры AWS, поддерживаемые EBS, могут использовать этот метод.
Предпосылки:
- доступ к вашей учетной записи AWS »Страница учетных данных безопасности
- доступ к веб-интерфейсу консоли управления AWS
- root-доступ к работающему экземпляру Linux с поддержкой AWS EC2 EBS, например:
ssh -i AWSKeyPair.pem ec2-user@{yourInstance_FQDN_or_IP} % sudo su root@yourInstance#
Установите необходимые инструменты
Для этого нам понадобятся следующие вещи:
Файлы сертификатов и закрытых ключей 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