s3ql — файловая система на базе облачного хранилища

    image

    Описание


    При помощи S3QL вы можете создать файловую систему на базе облачного хранилища Selectel Storage, которую можно смонтировать в любой современной версии OS Linux, FreeBSD или Mac OS X.

    Возможности


    Прозрачность

    S3QL практически не отличима от локальной файловой системы. Она поддерживает hardlinks, symlinks, стандартные системные права доступа, расширенные атрибуты, а также файлы размером до 2TB.

    Динамический размер

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

    Компрессия

    Перед сохранением в облачное хранилище данные могут быть сжаты (поддерживается lzma, bzip2, zlib).

    Шифрование

    После компрессии (но до загрузки в хранилище) данные могут быть зашифрованы AES алгоритмом шифрования с 256 битным ключем. Также используется дополнительный SHA256 HMAC checksum для защиты данных от внешних манипуляций.

    Дедупликация данных

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

    Copy-on-Write/Snapshotting

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

    Защита данных от изменения

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

    Высокая производительность независимо от сетевых задержек

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

    Поддержка медленных каналов связи

    S3QL разбивает содержимое файлов на маленькие блоки и локально кеширует их, что уменьшает количество сетевых обращений для чтения и записи данных, а также снижает объем передаваемых данных, так как только измененные блоки данных передаются по сети.

    Установка


    Пакет s3ql доступен в репозиториях Debian (sid) и Ubuntu, установка из которых сводится к обычному запуску apt-get install s3ql.
    Если у вас в репозитории нет данного пакета или вас не устраивает его версия, то всегда можно установить вручную, воспользовавшись инструкцией.

    Создание файловой системы


    mkfs.s3ql swift://auth.selcdn.ru/container
    По умолчанию, все иноды разбиваются на блоки в 10МБ, этот параметр можно задавать при создании файловой системы --max-obj-size. После создания файловой системы этот параметр изменить нельзя.
    Также по умолчанию, при создании файловой системы вам потребуется ввести пароль для шифрования данных, но, если вам не требуется шифрование, то можно указать опцию --plain и тогда данные не будут шифроваться, что может увеличить производительность файловой системы.

    Монтирование


    Подключить облачное хранилище очень просто:
    mount.s3ql swift://auth.selcdn.ru/container /mnt/container

    Компрессия


    При монтировании файловой системы можно указать необходимый алгоритм сжатия данных, но надо понимать, что чем сильнее компрессия, тем больше нагрузка на процессор и меньше скорость при сохранении данных. Алгоритмы сжатия соотносятся друг с другом следующим образом: lzma медленый, но имеет лучшую компрессию относительно bzip2, а bzip2, в свою очередь, имеет лучшую компрессию относительно zlib, но медленнее его. Для максимальной производительности файловой системы лучше выбирать алгоритм сжатия исходя из пропускной способности сети

    Кеширование


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

    Дополнительные команды


    s3qladm — используется для изменения пароля для шифрования, обновления файловой системы, удаление всех данных и загрузки метаданных из хранилища;
    fsck.s3ql — иногда после потери сетевого соединения с хранилищем или после падения самого s3ql необходимо делать проверку файловой системы, без которой нет возможности дальнейшего монтирования;
    s3qlcp — позволяет реплицировать каталоги в рамках одной s3ql файловой системы;
    s3qlctrl — для управления текущими настройками смонтированой файловой системы, например, размер кеша и уровень логирования, а также позволяет принудительное выполнение flushcache и загрузку мета-данных в хранилище;
    s3qllock — делает папки неизменяемыми;
    s3qlrm — рекурсивно удаляет файлы и директории на файловой системе s3ql, также может удалить каталоги, которые отмечены как неизменяемые;
    s3qlstat — отображает статистику для смонтированой файловой системы.

    Отмонтирование


    umount.s3ql /mnt/container
    Отмонтировать файловую систему может только тот пользователь, который её примонтировал или root. При отмонтировании происходит дозагрузка данных в хранилище, которые еще не были записаны — при этом команда блокируется до момента завершения загрузок.

    Итог


    Плюсы

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

    Недостатки

    • Нет возможности множественного монтирования (одновременно на разных машинах).


    P.S. Для более подробного ознакомления с s3ql можно воспользоваться его документацией

    Источник статьи.
    Selectel 158,40
    ИТ-инфраструктура для бизнеса
    Поделиться публикацией
    Похожие публикации
    Комментарии 51
      +2
      Меня смутило: "… иногда после потери сетевого соединения с хранилищем… ". Насколько часто такое «иногда» случается?
      Необходимость восстанавливать подключение хранилища к серверу после каких-либо падений вручную не вызываем оптимизма :-(.
        +1
        это носит больше информационный характер, например, если патчкорд отключить, перезагрузить без отмонтирования, проблемы с магистралью, которая коннект порвала…
        0
        Спасибо за наводку. Судя по документации — s3ql поддерживает разные хранилища, например бесплатный (с бесплатной квотой) Google Storage
          +1
          Есть еще два вопроса:
          1. Подскажите, распределяете ли вы копии данных между датацентрами? Было бы здорово, чтобы три копии оказывались в разных ДЦ.
          2. Не смог найти по этой услуге SLA.
          И одна ремарка — на сайте стоило выложить договор оферты, чтобы можно было четко понять все организационно-правовые нюансы.
            +1
            Договоры есть на сайте:http://selectel.ru/about/documents/.
              0
              Да, точно, спасибо!
              Просто для облака они отдельный сайт запустили, стоило на нем тоже указать ссылки на договор и СЛА.
            0
            А как всё это дело хранится в самом хранилище? Сейчас использую для тех же целей cloudfuse, откровенно говоря совсем недоволен. Как мигрировать?
              +1
              На самом хранилище это всё выглядит как куча мелких шифрованых файлов с максимальным размером --max-obj-size, который был указан при mkfs.s3ql.
              Для перехода вам надо скачать все данные из текущего контейнера и скопировать их на файловую систему s3ql, просто скопировать данные между контейнерами не получится.
              0
              Насколько понял не поддерживаются снэпшоты, это верно? Хотелось бы аналог команды: <zfs shapshot -r>
                0
                Features: copy-on-write/snapshotting
                0
                Это чтоже прямо rsync-ом бэкапы можно делать?
                  0
                  Только что попробовал. Сабж реально работает.

                  Но должен сказать, что есть облачные хранилища, поддерживающие rsync напрямую.

                  Вот, к примеру, несколько:

                  s3rsync.com
                  gogrid.com/products/infrastructure-cloud-storage
                  www.onlinestoragesolution.com/features.html
                  cloudstorage.olbiz.net/support/backup-your-web-site-server-rsync
                  www.bqbackup.com/
                  www.rsync.net/
                  dreamhost.com/cloud/dreamobjects/
                  dreamhost.com/cloud/dreamobjects/
                    0
                    хочется быть ближе к земле.
                      0
                      Почему? Не вижу причины, кроме разве что необходимости в отчетных документах.

                      Но можно быть еще ближе — поставить дома NAS с выделенным IP и бэкапиться на него. Эх, я бы так и делал, если бы не запланированный на ближайшие месяцы переезд.
                        +1
                        причина в большем доверии к Селектелу и Амазону,
                        чем, скажем, к s3rsync, котрый перепродаёт s3 амазона, или cloudstorage.olbiz.net, котрый вообще непонятно что со ссылками на другие сайты.
                          0
                          Как Amazon и Selectel могут для вас быть земляками одновременно?

                          s3rsync.com — это шлюз между Amazon S3 и вашим rsync-клиентом. Они ничего не перепродают, только оказывают услугу. Место на Amazon надо оплачивать самому.

                          Суть наезда на olbiz.net не понял.

                          Я не пытаюсь защищать перечисленные сервисы. Я только дал понять, что есть решения, поддерживающие rsync напрямую, а не через виртуальную файловую систему, которая лишает вас возможности пользоваться вэб-интерфейсом хранилища.
                            0
                            Фразой «ближе к земле» я обозначил недоверчивое отношение к шлюзам и посредникам.
                            И для бэкапа веб интерфейс не особо нужен.
                              0
                              Чем rsync-сервер на облачном хранилище хуже того же Swift API?

                              Вэб-интерфейс крайне полезен, чтобы время от времени контролировать количество, объем и состав бэкапов.
                  –1
                  Попробовал сабж. Действительно работает и действительно очень просто!

                  В пакете для Ubuntu маленькая проблемка — не прописана одна из зависимостей. Так что устанавливать нужно так:

                  aptitude install s3ql python-pkg-resources


                  К сожалению, использование сабжа делает невозможным просмотр и скачивание файлов через вэб-интерфейс Selectel. :( Получается вот такая каша:

                  image

                  akme, вы ведь реализуете поддержку сабжа в вашем вэб-интерфейсе, правда?
                    0
                    не прописана одна из зависимостей. Так что устанавливать нужно так:

                    Что, простите? Aptitude в убунте разучился решать зависимости?

                    packages.ubuntu.com/precise/s3ql

                    Тут вроде все на месте?
                      0
                      Упс, извиняюсь. Не прочитал нормально комментарий, на который отвечал :(
                      0
                      Нет, поддержку веб-интерфейса для s3ql мы делать не будем.
                        0
                        Почему? :(

                        Всего-то надо проверять контейнер на наличие файла, например, s3ql_metadata.txt, монтировать ФС и считывать его содержимое оттуда.
                          0
                          Хотя бы потому что s3ql, к сожалению, не рассчитан на распределенную работу, поэтому любые изменения через веб-панель могут привести к порче или потере данных.
                            0
                            То есть одновременное монтирование сабжа из двух разных мест не будет ограничено, но приведет к потере данных? =-O
                              0
                              Кем ограничено? Нами не будет, потому что s3ql всего-лишь клиентский софт, а клиент волен делать что хочет. А сам s3ql не рассчитан на более чем одно активное монтирование.
                                0
                                > Кем ограничено?

                                Клиентский софт должен иметь защиту от дурака.

                                Представьте такую ситуацию.

                                Поскольку посмотреть содержимое контейнера через вэб-интерфейс теперь невозможно, я монтирую его со своего рабочего компьютера. В это время крон на сервере запускает бэкапы. Пыщ, все пропало.
                                  0
                                  s3ql не наша разработка, мы не отвечаем за то что и как в ней реализовано. Сам вопрос о поддержке множественного монтированная неоднократно поднимался в рассылке s3ql, но что всегда был ответ — imposible by design.
                      +1
                      А кто-нибудь использует s3ql в продакшне с большими объемами на хорошей нагрузке? Как там с надежностью, с сохранностью данных? Я на amazon S3 пару раз сталкивался с тем, что при неудачном размонтировании, или жестком ребуте виртуалки, где примонтирован s3ql, при повторном монтировании просит сделать fsck, мотивируя тем, что система уже примонтирована. Делаю fsck, а он удаляет все файлы, что там есть.
                        0
                        Ох… Звучит ужасно. Особенно имея в виду, что я начал использовать сабж для хранения бэкапов.

                        Значит, надо монтировать перед началом заливки бэкапов и размонтировать сразу после.

                        Интересно, что скажет представитель Selectel по поводу этого:
                        www.rath.org/s3ql-docs/durability.html
                          0
                          Можно быть уверенными, что все переданные данные в Хранилище надежно сохраняются и хранятся, это гарантируется на уровне API и самом устройстве системы.

                          Главное чтобы сам s3ql залил все нужные данные и метаданные. Монтирование и потом размонтирование на время бэкапа будет более надежным, как раз потому что s3ql в таком случае синхронизирует все данные.
                            0
                            Надежность хранилища никто под сомнение не ставит, вопрос не в этом. Вопрос в том, как надежно сам s3ql закачивает, модифицирует и удаляет файлы, как обрабатывает нештатные ситуации, какие меры в нем приняты, чтобы информация в хранилище осталась цела в случае внезапной потери связи, или резета сервера. Может-быть кто-нибудь гонял его на стресс-тестах? Вот у меня к примеру были ситуации, когда он херил все файлы, даже без всяких стресс-тестов — в одном случае сервер по ошибке ребутнули из консоли амазона (хотя с хранилищем на тот момент уже несколько часов подряд никто не работал, файлы все-равно повредились), в другом я просто отмонтировал директорию (успешно) и сразу после этого ребутнул сервер командой reboot (тоже ошибок не выдало), примонтировал после ребута — а файлы повредились. Бывали случаи, когда более часа не мог размонтировать после заливки одного 3-х мегабайтного файла — umount.s3ql просто висел часа 1.5 и молча ждал чего-то.

                            Это мне так не везло, и у всех все надежно работает под большими нагрузками и со всякими нештатными ситуациями, или s3ql никто не юзает в реальной жизни, даже Селектел?
                        0
                        Все хорошо. Одного не понимаю — где и как авторизоваться?
                          0
                          В приведенных примерах утилита спрашивает при запуске. Можно сохранить пароль в файл, выставить минимальный доступ к нему (типа 600) и указывать его с ключом --authfile.
                            0
                            Мне показалось из текста, что это пароль на шифрование, а я спрашиваю про аутентификацию на сервисе.
                            Или я неправ? Шифровать-то мне не надо, duplicity и сама прекрасно справится, а вот выбор контейнера/авторизация…

                              0
                              Имя пользователя и имя конейнера — в урле. Пароль — в --authfile или утилита переспросит.

                              Для автоматического монтирования нужно использовать скрипт, который использует authfile.

                              Про шифрование ничего не знаю.
                                0
                                спасибо
                                  0
                                  Я соврал.

                                  authfile — это INI-подобный файл, структура описана здесь.

                                  Написал скрипт, который использует сабж для резервных копий: #comment_6172351. Вроде даже работает. :)
                                    +1
                                    Я уже в глубинах. Даже с суппортом пообщаться успел :-)
                                    например, если обозвать файло authinfo2 и заложить его в ~/.s3ql/ то опции не нужны. и монтируется все одной командой, без скриптов.
                                    а для бэкапа намереваюсь использовать duplicity. Это прикольней, кмк.
                                    Но вот сейчас лазил там, и обнаружил, что duplicity умеет коннектиться к S3 «искаропки». и залип… это выходит, что после некоторого напилинга можно обойтись без s3ql?
                                    потому как это очень просто написано «демонтирует», а в жизни это операция влегкую небыстрая, я даже на тесте это уже понял.
                                      0
                                      Круто.

                                      Жаль, Duplicity принудительно всё архивирует. У меня созданием и ротацией архивов занимается хостинговая платформа, и архивировать архивы — это как-то черезжопно. :(

                                      Да и S3, как я понимаю, тоже не позволяет просматривать и скачивать содержимое через вэб-интерфейс.

                                      Так что шило на мыло.
                                        0
                                        Если архивные файлы у вас подготавливает другая система, то можете просто воспользоваться специальной утилитой supload. Будет не сложно настроить загрузку архивив в Хранилище и причем обеспечить их автоматическое удаление по времени (если нужно). Подробнее можно почитать в статье про настройку резервного копирования настройку резервного копирования (Использование supload).

                                        Наша Хранилище поддерживает API S3, единственное, само ПО бывает жестко заточено под амазон и перенастроить бывает не совсем просто.
                                          0
                                          Я пробовал supload. Проблема с ним в том, что он не умеет удалять в хранилище файлы, отсутствующие локально.

                                          Средство создания бэкапов проводит ротацию — бэкапы старше одной недели удаляются (на всякий случай сохраняется по одному бэкапу за год, сезон, месяц, неделю).

                                          Если пользоваться supload, в хранилище будут оставаться все бэкапы за все дни. В результате расход дискового пространства и денег становится неоправданно большим. За те же деньги я мог бы взять второй VPS в том же ДЦ, что и первый, и делать бэкапы на него непосредственно rsync'ом.
                                            0
                                            supload позволяет сказать Хранилищу сколько по времени нужно хранить, как раз это позволит обеспечить удаление файлов при их ротации. Об этот как раз написано в той статье, внизу.
                                              0
                                              Средство создания бэкапов само определяет, какие файлы удалить, а какие оставить.

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

                                              Понимаете, идеальным в своей простоте решением задачи является rsync. Существует немало облачных хранилищ, которые поддерживают его напрямую. Может, и вы начнете его поддерживать?
                                                0
                                                Конечно, научить supload задавать разное время требует усилий по написанию более-менее сложного скрипта для этого. В общем, если хочется, то можно сделать так.

                                                Не спорю, rsync очень удобен сам по себе. Но реализовать его протокол для Хранилища пока не представляется возможным.

                                                Кстати, было бы интересно посмотреть на список облачных хранилищ с поддержкой rsync, которыми реально пользуются.
                                          0
                                          так и s3ql тоже создает свой контейнер, который выглядит бессмысленным в веб-панели.
                                          а duplicity умеет не зипать, насколько я помню. не шифровать точно может :-)

                                          и у duplicity бонусы в том, что она здорово уменьшает трафик за счет разумного диффа. Во всяком случае, раньше, когда у меня бэкапы делались без облаков, просто с одного сервера на другой, и трафик тарифицировался — она выглядела лучше других. К тому же, там у нее внутри версионность поддерживается. И если что — ее архив можно просто разобрать, там внутри gpg да тар с гзипом. или бзипом. но ничего такого особенного.
                            0
                            Заливаю бэкапы с лондонского Linode на сабж при помощи rsync --progress.

                            Средняя скорость закачки каждого файла колеблется вокруг значения 2.2 MB/s.
                            +2
                            Написал скрипт, который монтирует сабж, копирует туда бэкапы и демонтирует.

                            github.com/lolmaus/selectel-s3ql-backup

                            Если кто решит воспользоваться, пожалуйста, прежде чем полагаться на него, убедитесь, что он работает исправно.
                              0
                              За две недели использования сабжа второй раз контейнер недоступен с ошибкой «Transport endpoint is not connected». Бэкапы, соответственно, не сохраняются.

                              В общем, штука крайне ненадежная.

                              Перехожу на DigitalOcean.com, там за 150 руб./мес. дают VPS с 20GB SSD, и первые два месяца бесплатно. Буду бэкапиться напрямую rsync'ом.

                            Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                            Самое читаемое