1. Visão geral 2. Comparação entre MinIO e Ceph 1) Comparação de design de arquitetura 2) Comparação de consistência de dados 3) Comparação de implantação e gerenciamento 4) Comparação de ecossistema e compatibilidade 3. Preparação antecipada 1) Implantar docker 2) Implantar docker-compose 4. Criar rede 5. Orquestração e implantação do MinIO 1) Baixe o pacote de instalação do MinIO 2) Configuração 3) Inicie o script bootstrap.sh 4) Construa a imagem Dockerfile 5) Orquestre docker-compose.yaml 6) Inicie a implantação 7) Verificação de teste simples 8) Web acesso
I. Visão geral
MinIO é um servidor de armazenamento de objetos de código aberto , compatível com a API Amazon S3 (Simple Storage Service). Ele foi projetado para construir uma arquitetura de armazenamento distribuído, fornecendo soluções de armazenamento de objetos escalonáveis, de alta disponibilidade e alto desempenho.
Aqui estão alguns dos principais recursos e capacidades do MinIO:
-
Armazenamento de objetos : MinIO usa objetos como unidade básica de armazenamento e pode armazenar e gerenciar arquivos e objetos de dados de qualquer tamanho. Ele fornece operações padrão de armazenamento de objetos, como upload, download, exclusão e gerenciamento de metadados.
-
Arquitetura distribuída : MinIO adota uma arquitetura distribuída, que pode ser implantada em vários nós e distribuir e replicar dados em diferentes nós. Isso fornece alta disponibilidade e redundância de dados, garantindo durabilidade e confiabilidade dos dados.
-
Alto desempenho : MinIO alcança acesso a dados de alto desempenho por meio de processamento paralelo e arquitetura distribuída. Ele utiliza hardware moderno e tecnologia de rede e faz uso total de processadores multi-core e redes de alta largura de banda para obter rápida transmissão e processamento de dados.
-
Expansão horizontal : o MinIO pode ser expandido horizontalmente para aumentar a capacidade de armazenamento e a taxa de transferência adicionando mais nós. Ele suporta fragmentação automática de dados e balanceamento de carga para garantir que os dados sejam distribuídos e acessados uniformemente em cada nó.
-
Proteção de dados : MinIO fornece uma variedade de mecanismos de proteção de dados, incluindo redundância de dados, failover e verificação de dados. Ele pode replicar dados entre nós diferentes para lidar com falhas de nós e corrupção de dados.
-
Segurança : MinIO oferece suporte à criptografia de dados e controle de acesso para proteger a segurança e a privacidade dos dados nele armazenados. Ele fornece criptografia da camada de transporte (TLS/SSL) e opções de criptografia do lado do servidor, bem como mecanismos de autenticação e controle de acesso.
Em geral, MinIO é um servidor de armazenamento de objetos de alto desempenho e código aberto, adequado para a construção de sistemas de armazenamento distribuído. Ele apresenta alta disponibilidade, escalabilidade, mecanismos de proteção de dados e é compatível com a API Amazon S3, tornando-o perfeitamente integrado ao ecossistema e às ferramentas S3 existentes. MinIO é amplamente utilizado em big data, computação em nuvem e ambientes em contêineres, fornecendo serviços de armazenamento de objetos confiáveis e eficientes para aplicativos.
Documentação oficial: MinIO Object Storage for Kubernetes — MinIO Object Storage for Kubernetes , Documentação chinesa: MinIO Object Storage for Kubernetes — MinIO Object Storage for Kubernetes
2. Comparação entre MinIO e Ceph
MinIO e Ceph são soluções populares de armazenamento de código aberto, com características e cenários aplicáveis diferentes na área de armazenamento de objetos. Aqui está uma comparação entre MinIO e Ceph:
1) Comparação do projeto de arquitetura
-
MinIO : MinIO adota uma arquitetura distribuída e é baseada na expansão horizontal. Ele forma um cluster por meio de vários nós MinIO independentes, e cada nó é um servidor independente de armazenamento de objetos. MinIO se concentra em fornecer serviços de armazenamento de objetos simples e leves, adequados para implantações de pequeno e médio porte.
-
Ceph : Ceph é um sistema de armazenamento distribuído que consiste em armazenamento de objetos, armazenamento em blocos e sistema de arquivos. Ele usa RADOS (Reliable Autonomic Distributed Object Store) como sistema de armazenamento subjacente para fornecer alta disponibilidade e redundância de dados. O Ceph é adequado para implantações de nível empresarial em larga escala, com arquitetura complexa e funcionalidades avançadas.
2) Comparação de consistência de dados
-
MinIO: MinIO fornece consistência eventual sob a configuração padrão, ou seja, após a operação de gravação retornar com sucesso, pode haver um atraso dentro de uma determinada janela de tempo antes que os dados sejam completamente consistentes. Isso é adequado para muitos cenários de aplicação, como backup de dados, arquivamento, etc.
-
Ceph: Ceph fornece consistência forte, ou seja, após a operação de gravação retornar com sucesso, os dados atingem consistência imediatamente. Isto é muito importante para cenários de aplicação que exigem fortes garantias de consistência, como bancos de dados e processamento de transações.
3) Comparação de implantação e gerenciamento
-
MinIO: MinIO é relativamente simples de implantar e gerenciar e pode ser rapidamente instalado e configurado a partir de um único binário ou contêiner. Ele fornece uma interface de gerenciamento intuitiva e uma API fácil de usar, simplificando o gerenciamento e o monitoramento.
-
Ceph: a implantação e o gerenciamento do Ceph são relativamente complexos e envolvem vários componentes e configurações. A configuração e a manutenção exigem mais tempo e conhecimento, exigindo familiaridade com a arquitetura e configuração do Ceph.
4) Comparação de ecossistema e compatibilidade
-
MinIO: MinIO é compatível com a API Amazon S3, o que significa que ferramentas e aplicativos S3 existentes podem ser integrados perfeitamente com MinIO. Ele também possui uma comunidade ativa que fornece diversas bibliotecas clientes e plug-ins que ampliam sua funcionalidade e compatibilidade.
-
Ceph: Ceph possui um extenso ecossistema e um rico conjunto de recursos. Ele pode ser integrado a vários protocolos e interfaces (como RADOS, RBD, CephFS) para fornecer soluções abrangentes para armazenamento em blocos, sistemas de arquivos e armazenamento de objetos.
Resumindo, o MinIO é adequado para necessidades simples e leves de armazenamento de objetos , com foco em alto desempenho e facilidade de uso. É adequado para implantações de pequeno e médio porte e é compatível com Amazon S3, facilitando a integração com o ecossistema S3 existente.
-
O Ceph é adequado para requisitos de armazenamento de nível empresarial complexos e em grande escala . Ele fornece forte consistência e um rico conjunto de recursos e é adequado para cenários que exigem alta disponibilidade, redundância de dados e operações de dados complexas. A implantação e o gerenciamento do Ceph são relativamente complexos e exigem mais trabalho de configuração e gerenciamento.
-
A escolha do MinIO ou Ceph depende de necessidades e cenários específicos. Se você precisa de uma solução de armazenamento de objetos simples, fácil de usar e de alto desempenho compatível com S3, o MinIO é uma boa escolha. Se você precisa de um sistema de armazenamento distribuído poderoso e escalável que suporte armazenamento em blocos e sistemas de arquivos e tenha fortes requisitos de consistência, o Ceph é uma escolha mais adequada.
Independentemente de você escolher MinIO ou Ceph, você precisa avaliar cuidadosamente sua compatibilidade com aplicativos e ambientes específicos, necessidades de desempenho, complexidade de gerenciamento e escalabilidade para garantir que a solução escolhida possa atender às necessidades reais e fornecer serviços de armazenamento confiáveis.
3. Preparação preliminar
1) Implantar janela de encaixe
#Instale a ferramenta de configuração yum-config-manager yum -y install yum-utils # É recomendado usar a fonte Alibaba Cloud yum: (recomendado) #yum-config-manager --add-repo https://download.docker .com/linux /centos/docker-ce.repo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # Instale o docker- versão ce yum install -y docker-ce # Inicia e inicializa systemctl enable --now docker docker --version
2) Implantar docker-compose
curl -SL https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose chmod +x /usr/local /bin/docker-compose docker-compose --version
4. Crie uma rede
# Crie, tome cuidado para não usar hadoop_network, caso contrário haverá problemas ao iniciar o serviço hs2! ! ! rede docker criar rede hadoop # Ver rede docker ls
5. Orquestração e implantação do MinIO
1) Baixe o pacote de instalação do MinIO
wget https://dl.min.io/server/minio/release/linux-amd64/minio
2) Configuração
Um pseudocluster é implantado aqui, mas ainda há muitos discos necessários. A seguir estão as etapas para montar os discos:
### 1. Formate mkfs.ext4 /dev/sdb mkfs.ext4 /dev/sdc mkfs.ext4 /dev/sdd mkfs.ext4 /dev/sde mkfs.ext4 /dev/sdf mkfs.ext4 /dev/sdg mkfs . ext4 /dev/sdh mkfs.ext4 /dev/sdi mkfs.ext4 /dev/sdj mkfs.ext4 /dev/sdk mkfs.ext4 /dev/sdl mkfs.ext4 /dev/sdm ### 2. Crie um diretório de montagem mkdir /opt/apache/docker-compose-minio/data/minio-node{1..3}/data{1..4} ### 3. Montagem # minio-node1 mount /dev/sdb / opt/ apache/docker-compose-minio/data/minio-node1/data1 mount /dev/sdc /opt/apache/docker-compose-minio/data/minio-node1/data2 mount /dev/sdd /opt/apache/ docker- compose-minio/data/minio-node1/data3 montar /dev/sde /opt/apache/docker-compose-minio/data/minio-node1/data4# data4 # montagem minio-node2 /dev/sdf /opt/apache/docker-compose-minio/data/minio-node2/data1 montagem /dev/sdg /opt/apache/docker-compose-minio/data/minio-node2/ montagem data2 /dev/sdh /opt/apache/docker-compose-minio/data/minio-node2/data3 montagem /dev/sdi /opt/apache/docker-compose-minio/data/minio-node2/data4 # minio -node3 montar /dev/sdj /opt/apache/docker-compose-minio/data/minio-node3/data1 montar /dev/sdk /opt/apache/docker-compose-minio/data/minio-node3/data2 montar / dev/sdl /opt/apache/docker-compose-minio/data/minio-node3/data3 mount /dev/sdm /opt/apache/docker-compose-minio/data/minio-node3/data4 ### 4、持久化配置 # minio-node1 echo "/dev/sdb /opt/apache/docker-compose-minio/data/minio-node1/data1 ext4 padrões 0 0" >> /etc/fstab echo "/dev/sdc /opt/apache/docker- compose- minio/data/minio-node1/data2 ext4 padrões 0 0" >> /etc/fstab echo "/dev/sdd /opt/apache/docker-compose-minio/data/minio-node1/data3 ext4 padrões 0 0" > > /etc/fstab echo "/dev/sde /opt/apache/docker-compose-minio/data/minio-node1/data4 ext4 padrões 0 0" >> /etc/fstab# minio-node2 echo "/ dev / sdf /opt/apache/docker-compose-minio/data/minio-node2/data1 ext4 padrões 0 0" >> /etc/fstab echo "/ sdg /opt/apache/docker -compose-minio/data/minio-node2/data2 ext4padrão 0 0" >> /etc/fstab echo "/dev/sdh /opt/apache/docker-compose-minio/data/minio-node2/data3 ext4 padrões 0 0" >> /etc/fstab echo "/dev/sdi /opt/apache/docker- compose- minio/data/minio-node1/data4 ext4 padrões 0 0" >> /etc/fstab # minio-node3 echo "/dev/sdj /opt/apache/docker-compose-minio/data/minio-node3/data1 ext4 padrões 0 0" >> /etc/fstab echo "/dev/sdk /opt/apache/docker-compose-minio/data/minio-node3/data2 ext4 padrões 0 0" >> /etc/fstab echo "/dev / sdl /opt/apache/docker-compose-minio/data/minio-node3/data3 ext4 padrões 0 0" >> /etc/fstab echo "/dev/sdm /opt/apache/docker-compose-minio/data/ minio -node3/data4 ext4 padrão 0 0">> /etc/fstab
3) Inicie o script bootstrap.sh
#!/bin/bash source /etc/profile # Execute este arquivo em três máquinas, ou seja, inicie o MINIO de forma distribuída # --address "0.0.0.0:9000" Monte a porta 9001 como a porta api (como Cliente Java) Porta acessada # --console-address ":9000" Monta a porta 9000 como a porta da web; /opt/apache/minio/minio server --address 0.0.0.0:9000 --console-address 0.0 .0.0:9001 --config-dir /etc/minio \ http://minio-node1/opt/apache/minio/data/export1 \ http://minio-node1/opt/apache/minio/data/export2 \ http:// minio-node1/opt/apache/minio/data/export3 \ http://minio-node1/opt/apache/minio/data/export4 \ http://minio-node2/opt/apache/minio/data/export1 \ http://minio-node2/opt/apache/minio/data/export2 \ http://minio-node2/opt/apache/minio/data/export3 \ http://minio-node2/opt/apache/minio/data/export4 \ http://minio-node3/opt/apache/minio/data/export1 \ http://minio-node3/opt/apache/minio/ dados/export2 \ http://minio-node3/opt/apache/minio/data/export3 \ http://minio-node3/opt/apache/minio/data/export4 >/opt/apache/minio/logs/minio_server .log & tail -f /opt/apache/minio/logs/minio_server.log
A porta padrão do Minio é 9000. Adicione –address “127.0.0.1:9029” ao arquivo de configuração para alterar a porta.
-
MINIO_ACCESS_KEY: Nome de usuário, o comprimento mínimo é de 5 caracteres
-
MINIO_SECRET_KEY: Senha. A senha não pode ser definida muito simples, caso contrário o minio não será iniciado. O comprimento mínimo é de 8 caracteres.
-
–config-dir: Especifique o diretório do arquivo de configuração do cluster
-
–address: porta API, o padrão é 9000
-
--console-address: porta web, aleatória por padrão
[Lembrete] O tamanho do disco deve ser> 1 G. Aqui adicionei um disco de 4 * 2 G.
4) Construa o Dockerfile de imagem
FROM registrar.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/centos-jdk:7.7.1908 # Crie o diretório de armazenamento de log RUN mkdir -p /opt/apache/minio/logs # Crie o diretório de armazenamento RUN mkdir nos três nós respectivamente -p /opt/apache/minio/data/export{1..3} # Crie o diretório de configuração RUN mkdir -p /etc/minio # Senha da conta ENV MINIO_ROOT_USER=admin ENV MINIO_ROOT_PASSWORD=admin123456 # copy minio COPY minio / opt/ apache/minio/ # copiar cliente minio mc COPY mc /opt/apache/minio/ RUN ln -s /opt/apache/minio/mc /usr/local/sbin/mc # copiar bootstrap.sh COPY bootstrap .sh /opt/apache/ EXECUTAR chmod +x /opt/apache/bootstrap.sh WORKDIR /opt/apache
Comece a construir a imagem
docker build -t Registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619. --no-cache --progress=plain # Para facilitar o download e o uso dos amigos, enviarei a imagem arquivo para Alibaba Cloud aqui. Mirror warehouse docker push Registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 ### Explicação do parâmetro # -t: Especifique o nome da imagem #.: Diretório atual Dockerfile # -f: Especifique o caminho do Dockerfile # --no -cache: Não armazenar em cache
5) Orquestrar docker-compose.yaml
versão: '3' serviços: minio-node1: imagem: Registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 container_name: minio-node1 hostname: minio-node1 restart: sempre privilegiado: true env_file: - .env expor : - Portas "${MinIO_PORT}" : - Volumes "${MinIO_HTTP_PORT}" : - /opt/apache/docker-compose-minio/data/minio-node1/data1:/opt/apache/minio/data/export1 - /opt/apache/docker-compose-minio/data/minio-node1/data2:/opt/apache/minio/data/export2 - /opt/apache/docker-compose-minio/data/minio-node1/data3: / opt/apache/minio/data/export3 - /opt/apache/docker-compose-minio/data/minio-node1/data4:/opt/apache/minio/data/export4 comando: ["sh","-c","/opt/apache/bootstrap. sh"] redes: - verificação de integridade da rede hadoop : teste: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || exit 1"] intervalo: tempo limite de 10s: tentativas de 10s: 5 minio-node2: imagem: Registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 container_name: minio-node2 hostname: minio-node2 restart: sempre privilegiado: true env_file: - .env expor:- Portas "${MinIO_PORT}" : - "${MinIO_HTTP_PORT}" volumes: - /opt/apache/docker-compose-minio/data/minio-node2/data1:/opt/apache/minio/data/export1 - /opt /apache/docker-compose-minio/data /minio-node2/data2:/opt/apache/minio/data/export2 - /opt/apache/docker-compose-minio/data/minio-node2/data3:/opt/apache/minio/data/export3 - / opt /apache/docker-compose-minio/data/minio-node2/data4:/opt/apache/minio/data/export4 comando: ["sh","-c","/opt/apache/bootstrap.sh"] redes: - verificação de integridade da rede hadoop : teste: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || saída 1"] intervalo: tempo limite de 10s: tentativas de 10s:5 minio-nó3: imagem: Registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/minio:20230619 container_name: minio-node3 hostname: minio-node3 restart: sempre privilegiado: true env_file: - .env expor: - "${MinIO_PORT}" portas: - Volumes "${MinIO_HTTP_PORT}" : - /opt/apache/docker-compose-minio/data/minio-node3/data1:/opt/apache/minio/data/export1 - /opt/ apache/docker-compose-minio/ dados/minio-node3/data2:/opt/apache/minio/data/export2 - /opt/apache/docker-compose-minio/data/minio-node3/data3:/opt/apache/minio/data/export3 - /opt/apache/docker-compose-minio/data/minio-node3/data4:/opt/apache/minio/data/export4 comando: ["sh","-c","/opt/apache/bootstrap. sh"] redes: - verificação de integridade da rede hadoop : teste: ["CMD-SHELL", "netstat -tnlp|grep :${MinIO_PORT} || saída 1"] intervalo: tempo limite de 10s: tentativas de 10s: 5 # 连接外部网络 redes: rede hadoop: externa: verdadeira
conteúdo do arquivo .env
MinIO_PORT=9000 MinIO_HTTP_PORT=9001
6) Iniciar a implantação
# --project-name especifica o nome do projeto, o padrão é o nome do diretório atual docker-compose -f docker-compose.yaml up -d # View docker-compose -f docker-compose.yaml ps # Uninstall docker-compose - f docker- compose.yaml para baixo
7) Verificação de teste simples
# Faça login para testar o docker no contêiner exec -it minio-node1 bash # Faça login, digite a senha (recomendado) [root@minio-node1 apache]# mc config host add minio http://localhost:9000 Digite a chave de acesso: admin Digite a chave secreta: Digite a senha `minio` adicionado com sucesso. # Ver informações do cluster mc admin info minio
8) acesso à web
docker-compose -f docker-compose.yaml ps
Conta/Senha: admin/admin123456