Veeam Software corporate blog
System administration
IT Infrastructure
Backup
Software
12 November 2019

Объектное хранилище в подсобке, или Как стать самому себе сервис-провайдером

Первый прототип объектных хранилищ мир увидел в 1996 году. Через 10 лет Amazon Web Services запустит Amazon S3, и мир начнёт планомерно сходить с ума от плоского адресного пространства. Благодаря работе с метаданными и своей возможности масштабироваться, не проседая под нагрузкой, объектные хранилища быстро стали стандартом для большинства сервисов по хранению данных в облаках, и не только. Другая важная особенность — это хорошая приспособленность для хранения архивов и подобных им редко используемых файлов. Все, кто был связан с хранением данных, ликовали и носили новую технологию на руках.



Но людская молва полнилась слухами, что объектные хранилища — это только про большие облака, а если вам не нужны решения от проклятых капиталистов, то сделать своё будет очень сложно. Про развёртывание своего облака уже написано много, а вот про создание так называемых S3-compatible решений информации маловато.


Поэтому сегодня мы разберёмся, какие есть варианты "Чтобы как у взрослых, а не CEPH и напильник побольше", развернём один из них, а проверять, что всё работает, будем с помощью Veeam Backup & Replication. В нём заявлена поддержка работы с S3-совместимыми хранилищами, и вот это заявление мы будем проверять.


А как у других?


Начать предлагаю с небольшого обзора рынка и вариантов объектных хранилищ. Общепризнанный лидер и стандарт — это Amazon S3. Два ближайших преследователя — Microsoft Azure Blob Storage и IBM Cloud Object Storage.


Неужели и всё? Неужели нет других конкурентов? Конечно, конкуренты есть, но кто-то идёт своим путём, как Google Cloud или Oracle Cloud Object Storage, с неполной поддержкой S3 API. Кто-то использует старые версии API, как Baidu Cloud. А некоторые, вроде Hitachi Cloud, требуют применения особой логики, что непременно вызовет свои трудности. В любом случае, всех сравнивают с Амазоном, который и можно считать индустриальным стандартом.


А вот в on-premise решениях выбор намного больше, поэтому давайте обозначим важные нам критерии. В принципе, хватит всего двух: поддержка S3 API и использование v4 подписывания. Положа руку на сердце, нам как будущему клиенту интересны только интерфейсы для взаимодействия, а внутренняя кухня самого хранилища нас интересует уже не так сильно.


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


  • DellEMC ECS
  • NetApp S3 StorageGrid
  • Nutanix Buckets
  • Pure Storage FlashBlade и StorReduce
  • Huawei FusionStorage

Есть ниша чисто софтовых решений, работающих из коробки:


  • Red Hat Ceph
  • SUSE Enterprise Storage
  • Cloudian

И даже любителей тщательно обработать напильником после сборки не обидели:


  • CEPH в чистом виде
  • Minio (Linux версия, ибо к Windows версии есть много вопросов)

Список далеко не полный, его можно обсудить в комментариях. Только не забывайте перед внедрением проверять помимо API совместимости ещё и производительность системы. Последнее, что вам надо — это потеря терабайтов данных из-за подвисших запросов. Так что не стесняйтесь с нагрузочными тестами. Вообще весь взрослый софт, работающий с большими объёмами данных, имеет как минимум отчёты о совместимости. В случае с Veeam есть целая программа по взаимному тестированию, позволяющая смело заявлять о полной совместимости наших продуктов с конкретным оборудованием. Это уже двухсторонняя работа, не всегда быстрая, но мы постоянно расширяем список протестированных решений.


Собираем наш стенд


Хочется немного поговорить о выборе подопытного.


Во-первых, я хотел найти вариант, который сразу будет работать из коробки. Ну или хотя бы с максимальной вероятностью того, что он заработает без необходимости совершать лишние телодвижения. Танцы с бубном и ковыряние консоли в ночи — это очень увлекательно, но иногда хочется, чтобы работало сразу. Да и общая надёжность таких решений обычно повыше. И да, в нас пропал дух авантюризма, мы перестали лазить в окна к любимым женщинам и т.д.(с).


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


Исходя из всего вышесказанного, выбор мой пал на Dell EMC ECS Community Edition. Это очень интересный проект, и я считаю необходимым рассказать вам о нём.


Первое, что приходит в голову при виде дополнения Community Edition — что это просто калька с полноценного ECS с каким-то ограничениями, которые снимаются покупкой лицензии. Так вот нет!


Запомните:


!!!Community Edition — это отдельный проект, созданный для тестирования, и без техподдержки со стороны Dell!!
И его не превратить в полноценный ECS, даже если очень захочется.


Давайте разбираться


Многие считают, что Dell EMC ECS — чуть ли не самое лучшее решение, если у вас возникла необходимость в объектном хранилищe. Все проекты под маркой ECS, включая коммерческие и корпоративные, лежат на гитхабе. Этакий жест доброй воли от Dell. И помимо софта, который запускается на их брендовом железе, есть опенсорс-версия, которую можно развернуть хоть в облаке, хоть на виртуалке, хоть в контейнере, хоть на любом своём железе. Забегая вперёд — есть даже OVA версия, чем мы и воспользуемся.
Сам DELL ECS Community Edition — это мини-вариант полноценного софта, работающего на брендовых серверах Dell EMC ECS.


Я выделил четыре главных отличия:


  • Нет поддержки шифрования. Обидно, но не критично.
  • Отсутствует Fabric Layer. Эта штука отвечает за построение кластеров, менеджмент ресурсов, обновления, мониторинг и хранение Docker образов. Вот тут уже очень обидно, но Dell тоже можно понять.
  • Самое противное следствие предыдущего пункта: размер ноды нельзя расширить после завершения инсталляции.
  • Нет техподдержки. Это продукт для тестирования, который не возбраняется использовать в небольших инсталяциях, но заливать туда петабайты важных данных лично я бы не решился. Но технически помешать вам это сделать никто не может.


А что в большом варианте?


Галопом по Европам пробежимся по железным решениями, дабы иметь более полное представление об экосистеме.


Как-то подтверждать или опровергать утверждение, что DELL ECS — это лучшее on-prem объектное хранилище, я не буду, но если вам есть что сказать на эту тему, с удовольствием прочитаю в комментариях. Во всяком случае по версии IDC MarketScape 2018 Dell EMC уверенно входит в пятёрку лидеров OBS рынка. Хотя там не учитываются cloud-based решения, но это отдельный разговор.


С технической точки зрения ECS — это объектное хранилище, обеспечивающее доступ к данным по протоколам облачного хранения. Поддерживает AWS S3 и OpenStack Swift. Для file-enabled бакетов ECS поддерживает NFSv3 для возможности пофайлового экспорта.


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


  • При поступлении новых данных создаётся новый объект, у которого есть имя, сами данные и метаданные.
  • Объекты бьются на чанки по 128 Мб, и каждый чанк записывается сразу на три ноды.
  • Происходит обновление файла индекса, где записаны идентификаторы и места хранения.
  • Обновляется файл журнала (лог записи) и тоже записывается на три ноды.
  • Клиенту отправляется сообщение об успешной записи
    Все три копии данных записываются параллельно. Запись считается успешной, только если все три копии были записаны успешно.


Чтение происходит попроще:


  • Клиент запрашивает данные.
  • В индексе ищется место хранения данных.
  • Данные читаются с одной ноды и отправляются клиенту.


Самих серверов довольно много, поэтому посмотрим на самый маленький Dell EMC ECS EX300. Он начинается от 60Тб, имея возможность вырасти до 1,5Пб. А его старший брат Dell EMC ECS EX3000 позволяет уже хранить аж 8,6Пб на стойку.


Деплой


Технически Dell ECS CE можно развернуть сколь угодно большим. Во всяком случае, ограничений в явном виде я не нашёл. Однако всё масштабирование удобно делать методом клонирования самой первой ноды, для которой нам понадобятся:


  • 8 vCPU
  • 64GB RAM
  • 16GB для операционки
  • 1TB непосредственно для хранения
  • Последний релиз CentOS minimal

Это вариант для случая, когда вы хотите устанавливать всё сами с самого начала. Для нас это вариант не актуален, т.к. я буду использовать для деплоя OVA образ.


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


Однако разработчики ECS CE живут в реальном мире, и инсталляция проходит успешно даже с одной нодой, а минимальные требования таковы:


  • 4 vCPU
  • 16 GB RAM
  • 16 GB для операционки
  • 104 GB само хранилище

Именно такие ресурсы нужны для развёртывания OVA образа. Уже намного гуманнее и реалистичней.


Саму установочную ноду можно взять в официальном github. Там же есть подробная документация по деплою всё-в-одном, но можно ещё почитать на официальном readthedocs. Поэтому подробно останавливаться на разворачивании OVA мы не будем, там без фокусов. Главное — не забудьте перед её запуском или расширить диск до нужного объема, или прицепить необходимые.
Запускаем машину, открываем консоль и используем самые лучшие креды по умолчанию:


  • логин: admin
  • пароль: ChangeMe

Затем запускам sudo nmtui и настраиваем сетевой интерфейс — IP/маска, DNS и гейт. Памятуя, что в CentOS minimal нет net-tools, проверяем настройки через ip addr.



И поскольку только смелым покоряются моря, делаем yum update, после чего reboot. На самом деле это довольно безопасно, т.к. всё развертывание делается через плейбуки, а все важные пакеты докера залочены на текущей версии.


Теперь настало время отредактировать установочный скрипт. Никаких вам красивых окошек или псевдо UI — всё через ваш любимый текстовый редактор. Чисто технически есть два пути: можно запускать каждую команду ручками или сразу запустить конфигуратор videploy. Он просто откроет конфиг в vim, а по выходу запустит его проверку. Но сознательно упрощать себе жизнь не интересно, поэтому выполним на две команды больше. Хотя смысла в этом никакого, я вас предупредил =)


Итак, делаем vim ECS-CommunityEdition/deploy.xml и вносим оптимально-минимальные изменения, чтобы ECS включилась и работала. Список параметров можно подсократить, но я сделал вот так:


  • licensed_accepted: true Можно и не менять, тогда при деплое вас в явном виде попросят его принять и покажут милую фразу. Возможно, это даже пасхалочка такая.
  • Раскомментировать строчки autonames: и custom: Ввести как минимум одно желаемое имя для ноды — hostname будет заменён на него в процессе инсталляции.
  • install_node: 192.168.1.1 Указать реальный IP ноды. В нашем случае указываем тот же, что и в nmtui
  • dns_domain: вводим свой домен.
  • dns_servers: вписываем свой dns.
  • ntp_servers: можно указать любой. Я взял первый попавшийся из пула 0.pool.ntp.org (им стал 91.216.168.42)
  • autonaming: custom Если не раскомментировать, то луна назовётся Luna.
  • ecs_block_devices:
    /dev/sdb
    По неведомой причине тут может оказаться несуществующее устройство блочного хранения /dev/vda
  • storage_pools:
    members:
    192.168.1.1 Тут снова указываем реальный IP ноды
  • ecs_block_devices:
    /dev/sdb Повторяем операцию вырезания несуществующих устройств.

Вообще весь файл очень подробно описан в документации, но кто же её читать будет в такое беспокойное время. Там же написано, что минимально-достаточное — это указать IP и маску, но у меня в лабе такой набор заводился плоховато, и пришлось расширить до указанного выше.



После выхода из редактора надо запустить update_deploy /home/admin/ECS-CommunityEdition/deploy.yml, и если всё сделано правильно, про это будет сообщено в явном виде.



Затем всё же придётся запустить videploy, дождаться обновления окружения, и можно запускать саму инсталляцию командой ova-step1, а после её успешного выполнения команду ova-step2. Важно: не останавливайте работу скриптов руками! Некоторые шаги могут занимать значительное время, выполняться не с первой попытки и выглядеть так, будто всё сломалось. В любом случае надо дождаться завершения скрипта естественным путём. В конце вы должны увидеть примерно такое сообщение.



Теперь наконец-то мы можем открыть WebUI панель управления по известному нам IP. Если на этапе конфигурации не изменяли, то дефолтная учётка будет root/ChangeMe. Можно даже сразу пользоваться нашим S3-совместимым хранилищем. Оно доступно на портах 9020 для HTTP, и 9021 для HTTPS. Опять же, если ничего не меняли, то access_key: object_admin1 и secret_key: ChangeMeChangeMeChangeMeChangeMeChangeMe.


Но давайте не будем забегать сильно вперёд и начнём по порядку.



При первом логине вас принудительно попросят сменить-таки пароль на адекватный, что абсолютно правильно. Главный дашборд предельно понятный, поэтому давайте сделаем что-то более интересное, чем объяснение очевидных метрик. Например, создадим пользователя, которого будем использовать для доступа к хранилищу. В мире сервис-провайдеров таких именуют tenant. Делается это в Manage > Users > New Object User



При создании пользователя нас просят указать namespace. Технически, ничего нам не мешает заводить их столько, сколько будет пользователей. И наоборот. Это позволяет управлять ресурсами независимо для каждого тенанта.


Соответственно, выбираем необходимые нам функции и генерим ключи пользователя. Мне будет достаточно S3/Atmos. И не забываем сохранить ключик ;)



Пользователя создали, теперь пора ему и бакет выделить. Переходим в Manage > Bucket и заполняем требуемые поля. Тут всё просто.



Теперь у нас всё готово для вполне себе боевого использования нашего S3 хранилища.


Настраиваем Veeam


Итак, как мы помним, одно из главных применений объектных хранилищ — это долговременное хранение информации, к которой редко обращаются. Идеальным примером служит необходимость хранения бекапов на удалённой площадке. В Veeam Backup & Replication эта функция называется Capacity Tier.


Начнём настройку с добавления нашего Dell ECS CE в интерфейс Veeam. На вкладке Backup Infrastructure запускаем мастер добавления нового репозитория и выбираем пункт Object Storage.



Выбираем то, ради чего всё затевалось — S3 Compatible.



В появившемся окошке пишем желаемое имя и переходим на шаг Account. Здесь надо указать Service point в виде https://your_IP:9021, регион можно оставить как есть, и добавить созданного пользователя. Гейт-сервер необходим, если ваше хранилище находится на удалённой площадке, но это уже тема оптимизации инфраструктуры и отдельной статьи, так что здесь можно смело пропустить.



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



Проходим визард до конца и наслаждаемся результатом.



На следующем шаге нужно или создать новый Scale-out Backup Repository, или добавить наш S3 в существующий — он будет использован в качестве Capacity Tier для архивного хранения. Функции использовать S3-совместимые хранилища напрямую, как обычный репозиторий, в текущем релизе нет. Слишком много довольно неочевидных проблем для этого надо решить, но всё может быть.
Заходим в настройки репозитория и включаем Capacity Tier. Там всё прозрачно, но есть интересный нюанс: если хочется, чтобы все данные в кратчайшие сроки отправлялись на объектное хранилище, просто установите 0 дней.



После прохождения визарда, если не хочется ждать, можно нажать ctrl+ПКМ на репозитории, принудительно запустить Tiering job и наблюдать, как поползут графики.



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


+17
5.5k 38
Support the author
Comments 10
Top of the day