paint-brush
Как перейти с AWS S3 на MinIO на Equinix Metalк@minio
5,812 чтения
5,812 чтения

Как перейти с AWS S3 на MinIO на Equinix Metal

к MinIO13m2023/11/16
Read on Terminal Reader

Слишком долго; Читать

Использование MinIO на твердотельных накопителях Equinix Metal NVMe обеспечит тот же уровень производительности, надежности и отказоустойчивости данных за небольшую часть стоимости S3.
featured image - Как перейти с AWS S3 на MinIO на Equinix Metal
MinIO HackerNoon profile picture
0-item
1-item

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


Почему вы хотите, чтобы данные были ближе к дому? Причин несколько, но в первую очередь это стоимость. Публичное облако стало очень дорогим. Например, некоторое время назад у меня был управляемый кластер ElasticSearch, работающий в AWS. Мне очень хотелось опробовать эту новую управляемую услугу, но мне не хотелось обсуждать с начальником неожиданный счет в 30 тысяч долларов. Это был болезненный, но знакомый тревожный звонок, потому что в тот момент я понял, что только что заплатил AWS за шесть месяцев облачного бюджета, чтобы сделать что-то, что я мог бы настроить самостоятельно. Мораль этой истории такова: если вы не будете очень осторожны и внимательно не будете следить за своими расходами на облако, они могут очень быстро выйти из-под контроля.


Есть еще вопрос безопасности. Независимо от того, где в общедоступном облаке расположены ваши данные, они почти всегда находятся на узле или в пуле хранения, которым совместно пользуется кто-то, совершенно не связанный с вами; такова природа облака, потому что именно так работает виртуализация. Облако дает теплое чувство комфорта, потому что теперь кто-то другой должен решать проблемы безопасности, но если есть какие-либо проблемы, связанные с безопасностью, не будет понимания проблемы (если кто-то вообще смог ее обнаружить) и способов ее решения. . Ощущение комфорта быстро улетучивается, когда вам приходится защищать чужую инфраструктуру ради защиты своих данных. Многие предприятия получили возможность вернуться к полному контролю благодаря репатриации на MinIO на оборудование, которым они управляют.


Чтобы максимально эффективно использовать ваши усилия по репатриации, MinIO поставляется с рядом готовых к использованию функций, таких как Bitrot Protection для обеспечения целостности данных, Tiering для перекачивания данных на уровень холодного хранения, Erasure Coding , который сохраняет объекты как набор данных и блоков четности и восстанавливает их «на лету» без какого-либо дополнительного оборудования или программного обеспечения. В дополнение к этому MinIO поддерживает как шифрование при хранении , так и при передаче . Это гарантирует, что данные шифруются на всех этапах транзакции с момента совершения вызова до помещения объекта в корзину, где он затем защищается политиками в стиле IAM S3 и встроенным или внешним IDP, см. MinIO . Рекомендации — Безопасность и контроль доступа для получения дополнительной информации.


Репатриацию необходимо планировать тщательно и тщательно. Если вы имеете дело с петабайтами данных, как правило, более рентабельно иметь собственную инфраструктуру и серверы для работы, вы даже можете создать частное облако с собственным (или арендованным) оборудованием. Кроме того, это также включает в себя управление недвижимостью (колокольным пространством), электропитанием/ИБП, охлаждением/ОВиК и другими компонентами. Это вас не пугает: мы покажем вам, как можно мигрировать, при этом общая рентабельность инвестиций по-прежнему выше, чем в общедоступном облаке.


Частное облако похоже на квартиру (как любит говорить наш генеральный директор AB Periasamy). Вы полностью контролируете затраты и расходы, связанные с этим, вы никогда не просыпаетесь от предупреждения о неожиданном счете, вызванном какой-либо функцией рекурсивного цикла, которая выполнялась ночью. Конечно, при переезде возникают некоторые трудности, когда вы пытаетесь улучшить ситуацию. Например, когда вы пытаетесь расширить шоссе, вам неизбежно приходится перекрывать некоторые полосы движения, чтобы строительство могло продолжаться безопасно, но как только это будет сделано, вы иметь возможность ездить не только по первоначальным полосам движения, но и по вновь построенным полосам, чтобы обеспечить пропускную способность.


Двумя наиболее важными факторами, которые нам необходимо учитывать в публичном облаке, являются объем необходимого вам места для хранения и затраты на исходящие данные при доступе к этим данным или их перемещении — они могут быть примерно на 39 % и 42 % выше соответственно по сравнению с вашим собственным оборудованием. в вашем центре обработки данных или колокейшн-центре. В дополнение к этому, некоторые другие факторы затрат, которые следует учитывать, — это программное обеспечение, оборудование, сети/коммутаторы, аренда недвижимости/стойки/колокейшн, вызовы S3-API – все, о чем вы только можете подумать, и многое другое. Узнайте больше о возможной экономии в результате перехода на собственное частное облако в разделе «Жизненный цикл облака» .


Между общедоступным облаком и вашим центром обработки данных существует золотая середина, где вы можете иметь полный контроль над инфраструктурным оборудованием без высоких первоначальных инвестиций. Equinix Metal , как следует из названия, предоставляет серверы «голого железа» с точными характеристиками, запрошенными клиентом. Если вы хотите использовать твердотельные накопители NVMe, вы можете добавить эти диски к серверу без операционной системы. Equinix предоставляет API управления для упрощения развертывания и эксплуатации оборудования. Для разработчика/конечного пользователя это так же просто, как запустить экземпляр в облаке. На самом деле, существует даже поставщик Terraform для Equinix Metal (о котором мы покажем вам позже).


Давайте начнем!

Развертывание инфраструктуры

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

Настройте Equinix Metal Terraform

Equinix — один из немногих поставщиков «голого железа», у которых есть API для полной автоматизации процесса управления инфраструктурой. Используя их API , вы можете автоматизировать развертывание физических серверов, их выключение и даже прекращение работы. Все это вы можете сделать, не используя собственное оборудование, коммутаторы, маршрутизаторы и другие ресурсы. Это максимально близко к автоматизации на уровне общедоступного облака, при этом гарантируя, что никто другой не будет использовать ваше оборудование совместно. Потому что Equinix Metal поддерживает множество типов экземпляров, вариантов хранения и межсоединений, таких как SAS или SATA, а также SSD, NVMe SSD или HDD различных размеров. Вы также можете настроить оборудование, на котором работает MinIO, в соответствии с вашими спецификациями — вплоть до точного типа диска для размещения разделов MinIO.


Никто не ожидает, что вы напишете сценарии Python для взаимодействия с Metal API; У Equinix Metal есть поставщик Terraform, который позволяет нам подключаться к нему и предоставлять высокоуровневую информацию, необходимую для развертывания ресурсов кластера, абстрагируя при этом внутреннюю манипуляцию, необходимую для настройки сети, оборудования, MinIO и других приложений.


 provider "metal" { auth_token = var.auth_token }


Если у вас еще не установлен Terraform, вы можете загрузить его со страницы загрузок .


Клонируйте репозиторий GitHub equinix/terraform-metal-distributed-minio на свою локальную рабочую станцию.


git clone https://github.com/equinix/terraform-metal-distributed-minio.git


Зайдите в репозиторий и инициализируйте Terraform, чтобы он мог загрузить все необходимые модули и плагины из исходной версии.


 $ cd terraform-metal-distributed-minio $ terraform init


Это обеспечит автоматическую загрузку всех необходимых модулей. Теперь давайте удостоверимся, что установлены несколько обязательных переменных. Вы можете либо установить их как переменные среды , либо в клонированном выше репозитории есть файл с именем vars.template , который вы можете скопировать как cp vars.template terraform.tfvars .


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

  • auth_token
  • идентификатор_проекта


Дополнительную информацию об этом можно найти в документации API .


Есть несколько других переменных, которые вы можете изменить в terraform.tfvars , а следующие мы изменим позже, когда будем выполнять репликацию между сайтами.



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


 $ terraform plan $ terraform apply --auto-approve


Если ресурсы были применены правильно с правильной конфигурацией, результирующий результат должен выглядеть примерно так:


 Apply complete! Resources: 10 added, 0 changed, 0 destroyed. Outputs: minio_access_key = Xe245QheQ7Nwi20dxsuF minio_access_secret = 9g4LKJlXqpe7Us4MIwTPluNyTUJv4A5T9xVwwcZh minio_endpoints = [ "minio-storage-node1 minio endpoint is http://147.75.65.29:9000", "minio-storage-node2 minio endpoint is http://147.75.39.227:9000", "minio-storage-node3 minio endpoint is http://147.75.66.53:9000", "minio-storage-node4 minio endpoint is http://147.75.194.101:9000", ] minio_region_name = us-east-1


В этом вся фигня. Когда вы видите этот вывод, это значит, что ваши физические серверы не только подготовлены, но и MinIO развернут на этих узлах, а узлы настроены как кластер распределенного хранилища.

Доступ к кластеру MinIO

Мы использовали Terraform для автоматизации большей части процесса, поэтому теперь осталось только получить доступ к кластеру MinIO. Наш рекомендуемый инструмент — использовать mc . Используйте следующую команду для загрузки двоичного файла


 curl https://dl.min.io/client/mc/release/linux-amd64/mc \ --create-dirs \ -o $HOME/minio-binaries/mc chmod +x $HOME/minio-binaries/mc export PATH=$PATH:$HOME/minio-binaries/


Создайте псевдоним, указывающий на развернутый нами кластер MinIO.


 mc config host add minio1 $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY


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


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


 $ mc admin info minio1 --json | jq .info.backend { "backendType": "Erasure", "onlineDisks": 48, "rrSCData": 6, "rrSCParity": 2, "standardSCData": 6, "standardSCParity": 2 }


Если вы видите вывод, аналогичный приведенному выше, вы можете успешно получить доступ к кластеру MinIO с помощью команды mc . Ну и что дальше? Когда нам следует перенести данные из S3?

Балансировка нагрузки кластера MinIO

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


Теперь мы можем увидеть красоту небольшой автоматизации, которую мы сделали ранее с помощью Terraform. Позвольте мне показать вам, как просто создать еще один регион MinIO в Equinix Metal.


Давайте снова git clone наш репозиторий с исходным кодом, но на этот раз в новый каталог terraform-metal-distributed-minio-site-2


git clone https://github.com/equinix/terraform-metal-distributed-minio.git terraform-metal-distributed-minio-site-2


Зайдите в репозиторий terraform-metal-distributed-minio-site-2 и инициализируйте Terraform, чтобы он мог загрузить все необходимые модули и плагины из исходной версии, аналогично исходному развертыванию MinIO.


 $ cd terraform-metal-distributed-minio-site-2 $ terraform init


После загрузки всех модулей скопируйте файл переменных cp vars.template terraform.tfvars и установите две переменные.


  • auth_token
  • идентификатор_проекта


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


Давайте установим переменные, которые отличают второй сайт от первого.


Во-первых, давайте установим facility sv16 или выберем его из этого списка . Затем установите для minio_region_name значение us-west-1 или любое другое значение, которое отличает его от другого кластера.


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


 $ terraform plan $ terraform apply --auto-approve


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


 Apply complete! Resources: 10 added, 0 changed, 0 destroyed. Outputs: minio_access_key = Xe245QheQ7Nwi20dxsuF minio_access_secret = 9g4LKJlXqpe7Us4MIwTPluNyTUJv4A5T9xVwwcZh minio_endpoints = [ "minio-storage-node1 minio endpoint is http://144.45.65.29:9000", "minio-storage-node2 minio endpoint is http://144.45.39.227:9000", "minio-storage-node3 minio endpoint is http://144.45.66.53:9000", "minio-storage-node4 minio endpoint is http://144.45.194.101:9000", ] minio_region_name = us-west-1


Если вы видите minio_region_name как us-west-1 значит, вы успешно запустили второй кластер. Давайте добавим это в mc .


 mc config host add minio2 $MINIO_ENDPOINT $MINIO_ACCESS_KEY $MINIO_SECRET_KEY


Установите псевдоним minio2 и проверьте, можете ли вы успешно подключиться, получив некоторые метаданные из кластера.


 $ mc admin info minio2 --json | jq .info.backend { "backendType": "Erasure", "onlineDisks": 48, "rrSCData": 6, "rrSCParity": 2, "standardSCData": 6, "standardSCParity": 2 }


На этом этапе у вас должно быть 2 сайта: minio1 и minio2 .


Настроим репликацию между обоими кластерами


 $ mc admin replicate add minio1 minio2 Requested sites were configured for replication successfully.


Убедитесь, что оба сайта настроены правильно.


 mc admin replicate info minio1 SiteReplication enabled for: Deployment ID | Site Name | Endpoint f96a6675-ddc3-4c6e-907d-edccd9eae7a4 | minio1 | http://<site1_public_ip> 0dfce53f-e85b-48d0-91de-4d7564d5456f | minio2 | http://<site2_public_ip>


Убедитесь, что репликация работает правильно.


 mc admin replicate status minio1 Bucket replication status: No Buckets present Policy replication status: ● 5/5 Policies in sync User replication status: No Users present Group replication status: No Groups present


Протестируйте, создав корзину в minio1


/opt/minio-binaries/mc mb minio1/testbucket


Добавьте любой объект в ведро


/opt/minio-binaries/mc cp my_object minio1/testbucket


Перечислите объекты на других сайтах, в данном случае на minio2


 /opt/minio-binaries/mc ls minio2/testbucket [2023-07-20 18:52:09 UTC] 3.0KiB STANDARD my_object


Как видите, реплицировать данные в другие развертывания MinIO практически мгновенно, даже если они географически несопоставимы.


Давайте проведем быстрый тест и посмотрим, действительно ли это так просто, как кажется. Помните, что MinIO — это полная замена AWS S3, поэтому все, что должно работать с S3, будет работать и с MinIO. В этом случае мы будем использовать Terraform для загрузки объекта в корзину MinIO. В Terraform это делается через провайдера AWS, который по сути представляет собой модуль, который подключается к API AWS для выполнения различных операций в экосистеме AWS, но в этом случае мы будем использовать ресурс Terraform AWS S3 для доступа к корзине MinIO.


Создайте поставщика AWS в Terraform, как показано ниже. Обязательно обновите данные, чтобы они соответствовали кластеру Equinix Metal minio1 , который мы только что развернули.


 provider "aws" { region = "us-east-1" access_key = "Xe245QheQ7Nwi20dxsuF" secret_key = "9g4LKJlXqpe7Us4MIwTPluNyTUJv4A5T9xVwwcZh" skip_credentials_validation = true skip_metadata_api_check = true skip_requesting_account_id = true s3_force_path_style = true endpoints { s3 = "http://147.75.65.29:9000" } }


Загрузите файл, используя ресурс terraform aws_s3_bucket_object .


 resource "aws_s3_bucket_object" "object" { bucket = "public" key = "my_file_name.txt" source = "path/to/my_file_name.txt" etag = filemd5("path/to/my_file_name.txt") }


Как вы можете видеть выше, мы не использовали какой-либо ресурс Terraform, специфичный для MinIO, мы используем ресурс aws_s3_bucket_object поставщика AWS. Несмотря на то, что мы используем существующий ресурс AWS S3 Terraform, хранилище объектов полностью работает на базе MinIO корпоративного уровня.

Миграция данных из AWS S3

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


Существует несколько способов переноса данных из AWS S3 в MinIO, но мы рекомендуем использовать mc .


mc mirror — это швейцарский армейский нож для синхронизации данных. Он может копировать объекты из хранилищ объектов S3 или S3-API и отражать их в MinIO. Один из наиболее популярных вариантов использования — зеркалирование корзины Amazon S3 в MinIO, чтобы предоставлять данные приложениям и сервисам, не принадлежащим AWS.


Создайте новую политику IAM с ключом доступа и секретным ключом, разрешающую доступ только к нашему сегменту. Сохраните сгенерированные учетные данные для следующего шага.


 /opt/minio-binaries/mc alias set s3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 --api S3v4


Используйте зеркало mc для копирования данных из S3 в MinIO.


mc mirror s3/mybucket minio1/testbucket


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


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


 /opt/minio-binaries/mc ls minio2/testbucket [2022-12-19 18:52:09 UTC] 3.0KiB STANDARD all_object s


В конечном счете, ноутбук, на котором вы запускаете mc mirror является узким местом, поскольку данные должны проходить через систему, где выполняется команда mc mirror . Это может быть несколько петабайт данных, миграция которых может занять дни, а то и недели, в зависимости от скорости сети. Для переноса данных из S3 в MinIO существует более эффективный метод, называемый пакетной репликацией. Дополнительную информацию о пакетной репликации и других передовых практиках миграции см. в разделе «Как выполнить репатриацию из AWS S3 в MinIO ».

Поставьте педаль в пол

В этом сообщении блога показано, что MinIO, работающий на твердотельных накопителях Equinix Metal NVMe в конфигурации репликации между площадками, обеспечит тот же, если не больший, уровень производительности, надежности и отказоустойчивости данных за небольшую часть стоимости S3, в то время как сохраняя полный контроль над вашим облаком.


У вас есть 100% контроль над всей инфраструктурой? Не совсем. Коммутаторы, маршрутизаторы и другое сетевое оборудование управляются Equinix, но преимущества подключения к их сети превышают недостатки. Вы можете получить двухточечную, глобальную сеть или другие выделенные каналы для виртуального подключения к любому другому провайдеру. По сути, вы можете подключить частный канал напрямую к AWS (через Equinix Connect), а затем вы сможете перемещать свои данные в 10 раз быстрее, при этом оставаясь в безопасности, поскольку они не проходят через открытый общедоступный Интернет, и через него проходят только ваши данные. эта схема.


Более того, тесты MinIO постоянно показывают очень незначительное (<1%) снижение производительности пропускной способности при включенном шифровании, поэтому мы рекомендуем, чтобы все развертывания MinIO использовали шифрование в состоянии покоя, а все развертывания MinIO также должны защищать сетевые соединения с помощью TLS. Поздравляем, теперь ваши данные находятся в более безопасной и прозрачной системе, где вы имеете полный контроль и подотчетность.


Если у вас есть вопросы по переходу с AWS S3 на MinIO на Equinix Metal, обязательно свяжитесь с нами в Slack !


Также опубликовано здесь .