Category Archives: Администрирование

Amazon Glacier как бекап на случай апокалипсиса.

Общее описание сервиса

Amazon уже давно у всех на слуху по теме хранения и раздачи данных в облаках. Его сервис amazon s3 стал очень популярным для тех кто нуждается в раздаче большого количества статики. И я планирую настроить там хранение оперативных бекапов с рабочих серверов.

Но пока я этого не сделал и на днях наткнулся на описание другого их сервиса — amazon glacier. Цена за хранение данных в нем выглядит намного привлекательнее чем s3 — всего 1$/100Gb в месяц. Отлично подходит для долгосрочного хранения данных.

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

Во-первых время скачивания с сервиса составляет не менее 3.5 часов. То есть это даже не скачивание, а подготовка к скачиванию. Процесс выглядит так: вы через апи делаете запрос на скачивание какого то файла, сервис отрабатывает это задание в течении 3.5-5 часов и затем вы можете загрузить себе файл.

amazon glacier processes

Схема работы amazon glacier

Расчет стоимости скачивания данных

И более серьезная особенность — хитрая схема расчетов стоимости скачивания ваших файлов.

На первый взгляд может показаться что схема весьма проста (тарифы здесь): если вы скачиваете до 10Тб в месяц то платите по 0.12$/1Gb.  И далее чем больше скачиваете тем дешевле обходится 1Гб данных.

Но вот здесь нужно быть особенно внимательным. В лучших традициях маркетологов есть дополнительные условия, которые приписаны мелким шрифтом.

Итак, вы можете за сутки скачать бесплатно 1/30 часть от 5% общего объема хранимых данных.

В ФАКе сервиса написали красивый пример: 12 terabytes x 5% / 30 days = 20.5 gigabytes. То есть если вы храните 12Тб данных то вы в сутки можете скачивать бесплатно 20.5Гб. На первый взгляд неплохо, но только если не задумываться о том, что 12Тб это очень много и мало кто хранит там столько информации. Хранение такого объема данных обойдется в 120 000$/месяц.

А если взять более приближенный к жизни пример когда там хранить например бекапы БД, домашний архив фоток и т.п. и для расчет взять скажем 100Гб хранимых данных, то выходит что в день бесплатно можно скачивать всего:

100Гб x 5% / 30 дней = 0.16Гб = 160Мб. То есть совсем совсем мало.

Но идем дальше. Кроме платы за трафик загружаемых данных нужно еще оплачивать дополнительную комиссию если вы за раз запросите много данных.

То есть, если вы захотите загрузить сразу большой архив, то это вам выйдет значительно дороже чем скачать несколько более мелких через день.

Для примера если взять скачивание 10Гб то по трафику это выйдет 1.2$, но с учетом дополнительных комиссий стоимость выйдет около 60$.

Формула расчета запутанная и не имеет понятного описания, поэтому как ни рассчитывай, а все равно итоговая сумма к оплате может оказаться сюрпризом. Вообще принцип формирования этой цены сводится к тому, что амазон берет ваш пиковый объем запрошенных данных, потом от него отнимается объем данных который вам разрешен для скачивания бесплатно (см. выше). И потом полученное значение (получается максимальное Х Гб/час за весь месяц, то есть в любой час на протяжении месяца) умножается на рейт 0.01$ за 1Гб и уможается на количество часов в месяце 720.

Для примера если пиковое значение с вычетом бесплатного объема составило 3Gb, то сумма к оплате будет 3Гб * 0.01$ * 720 = 21,6$.

Важно еще понимать, что объем данных считается не на то, что вы скачиваете, а на то, что вы запросили скачивать. Если вы запросили файл размером 100Гб а потом будете его качать со скоростью 100Мб/час то расчет пикового объема будет происходить из 100Гб/3-5 часов, то есть около 20Гб в лучшем случае, а не 100Мб.

Варианты применения glacier:

И в итоге варианты самого дешевого использования сервиса:

  • Данные которые нужно хранить запаковывать в архивы равные примерно. 0.03% от общего объема хранимых данных (запрос на загрузку и скачивание каждого файла отдельно так же имеет стоимость — 0.05$ за 1000 запросов)
  • Эти архивы загружаются на glacier
  • Когда приходит время скачивания данных нужно начать скачивать архивы по 1 в день.

Таким образом вы не выйдете за границы бесплатного лимита на скачивание. Но конечно же эта процедура восстановления будет долгая.

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

Если у вас все же большие архивы, то API амазона позволяет делать запрос на скачивание только части файла. Указывается начальная позиция и размер в мегабайтах сколько нужно файла получить. То есть вам нужно будет по частям скачивать этот большой архив так само день за днем.

Личные выводы

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

А glacier хочу попробовать как резервную копию домашнего архива фоток, которые хранятся на домашнем NASе. Ну и настроить резервное копирование прямо с него. Об этом будет позже.

Главное помнить, что glacier это сервис хранения архивов, а не данных, которые могут понадобится в любой момент. Это как место, откуда нужно доставать данные когда уже больше не осталось вариантов, например в случае апокалипсиса :-) Ну и доставать аккуратно, а то пришедший в конце месяца счет может несколько удивить.

Делайте бекапы и будьте счастливы.

Правильное подключение ssl сертификата на сайт.

Недавно столкнулся с такой проблемой, что у меня с браузером ФФ 25 сайт по https открывается без проблем, а у нескольких коллег выдает предупреждение о недоверенном сертификате. При чем в остальных браузерах у всех все было нормально.

В итоге проблема оказалась в том, что сертификат был подписан промежуточным центром сертификации, который был не во всех браузерах. Для решения этой проблемы нужно всего лишь слить содержимое файла *.crt и *.ca-bundle (которые выдаются обычно вместе).

Сделать это можно примерно такой командой:

cat www.example.com.crt bundle.crt > www.example.com.chained.crt

И затем прописываем в конфигурации этот файл:

server {
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

Еще одной новой фишкой nginx стала возможность задать в одной секции server настройки как для http так и для httpS. Это можно делать указанием слова ssl в строке listen. Для этого порта затем будет использовать ssl. И это избавляет от необходимости дублировать конфиг если у вас сайт доступен по обеим портам.

Пример конфига с работой по 80 (http) и 443 (https) портам:

server {
    listen              80;
    listen              443 ssl;
    server_name         www.example.com;
    ssl_certificate     www.example.com.chained.crt;
    ssl_certificate_key www.example.com.key;
    ...
}

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

*****.com использует недействительный сертификат безопасности. К сертификату нет доверия, так как отсутствует цепочка сертификатов издателя. (Код ошибки: sec_error_unknown_issuer)

Перемещение/копирование большого количества файлов на freebsd

Есть у фряхи такая проблема, как невозможность задать приоритет доступа к диску для различных команд, как это сделано в линуксе, например. И из-за этого, если вам нужно переместить большой объем данных с одного диска на другой, во время выполнения операции трудности с доступом к диску будут испытывать все остальные программы, например mysql сервер, php скрипты и все остальное. Из-за этого на работающем сервере желательно не производить такие операции.

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

Это конечно подойдет не всем. Если, например нужно переместить один большой файл то это не поможет.

Собственно сама команда:

find /dir/to/src/* -name '*' -exec echo move {} \; -exec cp -R {} /dir/to/dest/ \; -exec rm -rf {} \; -exec sleep 3 \;

Зачем делается cp а затем rm вместо mv? Потому как mv почему то не может за собой удалить папку с файлами, поэтому для универсальности решения используется именно эта комбинация.

Число 3 в конце — это время в секундах, какую паузу нужно сделать после перемещения одного файла/папки.

Настройка собственного Jabber сервера на freebsd

Понадобилось для личных нужд поднять джаббер сервер. Был выбран ejabberd 2, как наиболее простой и в то же время функциональный.

Описывать весь процесс не буду, мне отлично помогла все сделать эта статья.

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

Оригинал инструкции здесь.

  1. Заходим в админ веб интерфейс по пути «Виртуальный хост» — выбираем нужный сервер — «Группы общих контактов»
  2. В поле для добавления новой группы вводим «everybody» и жмем добавить.
  3. Заполняем поля:
    • Название: EveryBody
    • Описание: This group contains everybody
    • Члены: @all@
    • Видимые группы: everybody
  4. Отправляем форму
  5. Готово. Теперь после подключения у вас появится новая группа «EveryBody» в которой будут все пользователи сервера.

Nagios и ошибка проверки PINGа

В какой то момент нагиос стал хаотично выдавать по разным сервисам в разное время ошибку:

CRITICAL — popen timeout received, but no child process

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

Так вот, решение как оказалось простое — для проверки на пинг нужно отключить протокол IPv6.

Для этого открываем на редактирование файл /path/to/nagios/objects/commands.cfg

И там ищем два блока:

define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

и

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

И редактируем их до такого вида:

define command{
        command_name    check-host-alive
        command_line    $USER1$/check_ping -4 -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

и

define command{
        command_name    check_ping
        command_line    $USER1$/check_ping -4 -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
        }

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

После этого перезапуск нагиоса и проблема решена.

service nagios reload