MinIO roda em qualquer coisa – bare metal, Kubernetes, Docker, Linux e muito mais. As organizações optam por executar o MinIO para hospedar seus dados em qualquer uma dessas plataformas e dependem cada vez mais de múltiplas plataformas para satisfazer diversos requisitos. A escolha do hardware e sistema operacional subjacentes é baseada em vários fatores, principalmente a quantidade de dados a serem armazenados no MinIO, além dos requisitos de integração com outros softwares nativos da nuvem, desempenho e segurança.
Muitos de nossos clientes executam MinIO em bare metal, enquanto a maioria executa em Kubernetes. A execução de várias instâncias do MinIO em uma arquitetura em contêiner orquestrada pelo Kubernetes é extremamente eficiente. Os clientes MinIO implementam novas regiões e atualizam serviços sem interrupções, com clusters Kubernetes separados em execução em cada região e o objetivo operacional de não compartilhar nada para maior resiliência e escalabilidade.
Os clientes mudam para o MinIO por vários motivos, incluindo:
Devido a esses diversos motivos e ambientes onde o MinIO pode ser utilizado e instalado, é realista presumir que há uma série de fontes de dados onde os dados já estão armazenados e que você gostaria de inserir no MinIO.
Nesta postagem, vamos revisar algumas das ferramentas disponíveis para obter dados do S3, FileSystem local, NFS, Azure, GCP, Hitachi Content Platform, Ceph e outros, e em clusters MinIO onde podem ser expostos à IA nativa da nuvem /ML e pacotes analíticos.
Para começar, usaremos o MinIO Client (mc) durante esta postagem para algumas dessas opções. Certifique-se de instalá-lo e definir o alias para o MinIO Server em execução.
mc alias set destminio https://myminio.example.net minioadminuser minioadminpassword
Adicionaremos mais alguns aliases de “fonte” à medida que percorremos os diferentes métodos.
A maioria dos casos de uso para migração de dados para o MinIO começa com um sistema de arquivos montado ou volume NFS. Nesta configuração simples, você pode usar o mc mirror para sincronizar os dados da origem ao destino. Pense no mc mirror
como um canivete suíço para sincronização de dados. Isso tira o fardo do usuário de determinar a melhor maneira de interagir com a fonte da qual você está buscando os objetos. Ele oferece suporte a várias fontes e, com base na fonte de onde você está extraindo, as funções corretas são usadas para habilitá-las.
Por exemplo, vamos começar com um sistema de arquivos simples montado a partir de um disco rígido físico, disco virtual ou até mesmo algo como uma montagem GlusterFS. Contanto que seja um sistema de arquivos legível pelo sistema operacional, o MinIO também pode lê-lo:
filesystem kbytes used avail capacity mounted on /dev/root 6474195 2649052 3825143 41% / /dev/stand 24097 5757 18340 24% /stand /proc 0 0 0 0% /proc /dev/fd 0 0 0 0% /dev/fd /dev/_tcp 0 0 0 0% /dev/_tcp /dev/dsk/c0b0t0d0s4 10241437 4888422 5353015 48% /home /dev/dsk/c0b0t1d0sc 17422492 12267268 5155224 71% /home2
Vamos supor que seus objetos estejam em /home/mydata
, você executaria o seguinte comando para espelhar os objetos (se o bucket mydata
ainda não existir, você teria que criá-lo primeiro):
mc mirror /home/mydata destminio/mydata
Este comando garantirá que os objetos que não estão mais no local de origem sejam removidos do destino ou quando novos objetos forem adicionados à origem, eles serão copiados para o destino. Mas se você quiser sobrescrever objetos existentes modificados na fonte, passe o sinalizador --overwrite
.
O Network File Share (NFS) geralmente é usado para armazenar objetos ou dados que não são acessados com frequência porque, embora onipresente, muitas vezes o protocolo é muito lento na rede. No entanto, muitos ETL e alguns sistemas legados usam NFS como repositório de dados a serem usados para operações, análises, IA/ML e casos de uso adicionais. Faria mais sentido que esses dados residissem no MinIO devido à escalabilidade, segurança e alto desempenho de um cluster MinIO, juntamente com a capacidade do MinIO de fornecer serviços para aplicativos nativos da nuvem usando a API S3.
Instale os pacotes necessários para montar o volume NFS
apt install nfs-common
Certifique-se de adicionar o diretório /home
a /etc/exports
/home client_ip(rw,sync,no_root_squash,no_subtree_check)
Nota: Certifique-se de reiniciar seu servidor NFS, por exemplo em servidores Ubuntu
systemctl restart nfs-kernel-server
Crie um diretório para montar a montagem NFS
mkdir -p /nfs/home
Monte o volume NFS
mount <nfs_host>:/home /nfs/home
Copie os dados do NFS para o MinIO
mc mirror /nfs/home destminio/nfsdata
Pronto, agora você pode mover seus objetos grandes do NFS para o MinIO.
Como mencionamos anteriormente, mc mirror
é um canivete suíço de sincronização de dados. Além dos sistemas de arquivos, ele também copia objetos de armazenamentos compatíveis com API S3 ou S3 e os espelha no MinIO. Um dos casos de uso mais populares é o espelhamento de um bucket do Amazon S3.
Siga estas etapas para criar um bucket AWS S3 em sua conta. Se você já possui uma conta com dados, também podemos usá-la.
Depois que um bucket for criado ou os dados forem adicionados a um bucket existente, crie uma nova política IAM com chave de acesso e chave secreta permitindo acesso apenas ao nosso bucket. Salve as credenciais geradas para a próxima etapa.
Podemos trabalhar com qualquer armazenamento compatível com S3 usando o MinIO Client. A seguir, vamos adicionar um alias usando o nome do bucket S3 que criamos junto com as credenciais que baixamos
mc alias set s3 https://s3.amazonaws.com BKIKJAA5BMMU2RHO6IBB V7f1CwQqAcwo80UEIJEjc5gVQUSSx5ohQ9GSrr12 --api S3v4
Use mc mirror para copiar os dados do S3 para MinIO
mc mirror s3/mybucket destminio/mydata
Dependendo da quantidade de dados, da velocidade da rede e da distância física da região onde os dados do bucket estão armazenados, pode levar alguns minutos ou mais para você espelhar todos os dados. Você verá uma mensagem quando mc terminar de copiar todos os objetos.
Para o próximo conjunto de ferramentas, escrevemos scripts dedicados para satisfazer alguns dos requisitos não padrão de migração de dados de casos extremos que precisamos cumprir. Uma delas é a migração do HDFS e do Hadoop. Muitas empresas têm tantos dados armazenados no Hadoop que é impossível ignorá-los e começar do zero com uma plataforma nativa da nuvem. É mais viável transferir esses dados para algo mais moderno (e nativo da nuvem) como MinIO e executar seu ETL e outros processos dessa forma. É bastante simples de configurar.
Crie um arquivo chamado core-site.xml
com o seguinte conteúdo
<configuration> <property> <name>fs.s3a.path.style.access</name> <value>true</value> </property> <property> <name>fs.s3a.endpoint</name> <value>https://minio:9000</value> </property> <property> <name>fs.s3a.access.key</name> <value>minio-sample</value> </property> <property> <name>fs.s3a.secret.key</name> <value>minio-sample123</value> </property> </configuration>
Defina as seguintes variáveis de ambiente
export HDFS_SOURCE_PATH=hdfs://namenode:8080/user/minio/testdir export S3_DEST_PATH=s3a://mybucket/testdir
Baixe o seguinte arquivo, chmod +x e execute-o
curl -LSs -o https://github.com/minio/hdfs-to-minio/blob/master/hdfs-to-minio.sh chmod +x hdfs-to-minio.sh ./hdfs-to-minio.sh
Se você armazena dados no Hadoop há vários anos, esse processo pode levar várias horas. Se estiver em um cluster de produção, recomendamos migrar os dados fora do horário de expediente durante as janelas de manutenção para minimizar o impacto de qualquer degradação de desempenho em seu cluster Hadoop enquanto os dados estão sendo espelhados.
Mais detalhes sobre a migração do HDFS para o MinIO estão disponíveis neste GitHub Repo e também temos uma postagem no blog Migrating from HDFS to Object Storage .
Anteriormente, escrevemos uma postagem incrível no blog sobre Hitachi Content Platform e como migrar seus dados para um cluster MinIO. Eu recomendaria a leitura da postagem do blog para obter detalhes completos, mas o ponto crucial é o seguinte.
Depois de configurar o cluster HCP e o arquivo de entrada necessários, baixe a ferramenta de migração e execute o seguinte comando para iniciar o processo de migração
$ hcp-to-minio migrate --namespace-url https://finance.europe.hcp.example.com --auth-token "HCP bXl1c2Vy:3f3c6784e97531774380db177774ac8d" --host-header "s3testbucket.sandbox.hcp.example.com" --data-dir /mnt/data --bucket s3testbucket --input-file /tmp/data/to-migrate.txt
Por último, mas não menos importante, mantivemos o elefante na sala até o fim. Embora antigo, o Ceph é um armazenamento de dados popular e possui uma API compatível com S3. Ele é usado por outros projetos Kubernetes como backend para armazenamento de objetos, como Rook. Ceph, no entanto, é um gigante difícil de configurar e executar. Portanto, é natural que as pessoas queiram migrar seus dados para algo mais simples, mais fácil de manter e com maior desempenho.
Existem duas maneiras de copiar dados do Ceph:
Replicação de bucket: cria o objeto, mas se o objeto for excluído da origem, não o excluirá no destino. https://min.io/docs/minio/linux/administration/bucket-replication.html
Espelho Mc: Sincroniza objetos e versões, vai até deletar objetos que não existem https://min.io/docs/minio/linux/reference/minio-mc/mc-mirror.html
Semelhante ao S3, como o Ceph possui API compatível com S3, você pode adicionar um alias ao MinIO Client
mc alias set ceph http://ceph_host:port cephuser cephpass
Você pode então usar mc mirror
para copiar os dados para o seu cluster MinIO
mc mirror ceph/mydata destminio/mydata
Sugerimos que você execute o comando mc mirror
com o sinalizador --watch
para monitorar continuamente os objetos e sincronizá-los com o MinIO.
Existem apenas alguns exemplos que mostram como é fácil migrar seus dados para o MinIO. Não importa se você está usando protocolos legados mais antigos, como NFS, ou os melhores e mais recentes, como S3, o MinIO está aqui para apoiá-lo.
Neste post detalhamos como migrar de sistemas de arquivos e outros armazenamentos de dados, como NFS, sistema de arquivos, GlusterFS, HDFS, HCP e, por último, mas não menos importante, Ceph. Independentemente da pilha de tecnologia executada nele, o backend MinIO fornece uma solução de armazenamento de objetos definidos por software de alto desempenho, durável, segura e escalonável, mas simples.
Se você tiver alguma dúvida, sinta-se à vontade para entrar em contato conosco no Slack !
Também publicado aqui .