Armazenamento de objetos: implante rapidamente o MinIO com base no docker-compose

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.

imagem

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

imagem

8) acesso à web

http://ip:porta

docker-compose -f docker-compose.yaml ps

Conta/Senha: admin/admin123456

Acho que você gosta

Origin blog.csdn.net/zhanggqianglovec/article/details/132107009
Recomendado
Clasificación