Notas de estudo Armazenamento de objetos MinIo - Armadilhas de construção de cluster distribuído Docker!

1. Visão Geral

1.1 Significado

MinIO é um serviço de armazenamento de objetos de alto desempenho baseado na linguagem Go e tem mais de 39 mil estrelas no Github. Ele adota o protocolo de código aberto Apache License v2.0 e é muito adequado para armazenar dados não estruturados de grande capacidade, como fotos, vídeos, arquivos de log, dados de backup e imagens de contêineres/máquinas virtuais. Este artigo usará MinIO para construir um serviço de armazenamento de objetos para armazenar imagens.

MinIO é um serviço de armazenamento de objetos distribuídos de alto desempenho projetado para aplicativos nativos da nuvem e em contêineres. Possui os seguintes recursos e funções principais:

  1. Armazenamento de objetos: MinIO fornece uma interface de armazenamento de objetos simples, mas poderosa, permitindo armazenar e recuperar arquivos de qualquer tamanho, de alguns KB a vários TB.
  2. Alto desempenho: MinIO foi projetado como um serviço de armazenamento de objetos de alto desempenho. Ele usa algoritmos paralelos e distribuídos para acelerar uploads e downloads de dados e fornece velocidades de acesso rápidas por meio de multithreading e streaming.
  3. Escalabilidade: MinIO suporta expansão horizontal e pode aumentar a capacidade de armazenamento e poder de processamento de acordo com as necessidades. Você pode construir um cluster de armazenamento distribuído adicionando mais instâncias MinIO para obter alta disponibilidade de dados e tolerância a falhas.
  4. Altamente compatível: MinIO é compatível com a API AWS S3, o que significa que você pode usar suas ferramentas e bibliotecas S3 existentes para interagir com MinIO sem modificação.
  5. Segurança: MinIO oferece uma variedade de recursos de segurança, incluindo criptografia de dados, controle de acesso, autenticação e criptografia de transmissão de rede. Você pode configurar políticas de segurança apropriadas para proteger os dados armazenados com base nas suas necessidades.
  6. Altamente disponível: MinIO possui uma arquitetura altamente disponível que suporta redundância de dados e failover. Quando um nó falha, o cluster de armazenamento se recupera e mantém a disponibilidade automaticamente.
  7. Código aberto e gratuito: MinIO é um software de código aberto licenciado sob a Licença Apache 2.0. Você é livre para usar, modificar e distribuir o MinIO.

MinIO é muito adequado para cenários como construção de nuvens privadas, armazenamento e distribuição de conteúdo estático, backup e arquivamento, etc. Ele fornece uma interface fácil de usar e funcionalidades avançadas, permitindo que os desenvolvedores criem e gerenciem facilmente serviços de armazenamento de objetos.

​ Este tutorial pressupõe que todos os hosts que executam o MinIO usam um sistema operacional Linux recomendado , como RHEL8+ ou Ubuntu 18.04+.

1.2 Cenários de aplicação

Como mostrado na figura abaixo, o cenário de aplicação do MinIO pode ser usado não apenas como um serviço de armazenamento de objetos em uma nuvem privada, mas também como uma camada de gateway para armazenamento de objetos em nuvem, conectando-se perfeitamente Amazon S3ouMicroSoft Azure

Insira a descrição da imagem aqui

1.3 Recursos

Alto desempenho:
Como um armazenamento de alto desempenho, sob condições de hardware padrão, suas taxas de leitura e gravação podem atingir 55Gb/se, respectivamente 35Gb/s, . E o MinIO permite que um arquivo objeto possa ser de qualquer tamanho, variando de alguns kb a um máximo de 5T.

Escalável:
Diferentes clusters MinIO podem formar uma federação e formar um namespace global e oferecer suporte a vários data centers.

Nativo da nuvem:
conteinerização, orquestração baseada em K8S, suporte multilocatário.

Compatível com Amazon S3:
usa API Amazon S3 v2/v4. O servidor Minio pode ser acessado usando Minio SDK, Minio Client, AWS SDK e AWS CLI.

Pode ser conectado a uma variedade de armazenamento back-end:
além do próprio sistema de arquivos do Minio, ele também suporta armazenamento DAS, JBODs, NAS, Google Cloud Storage e Azure Blob.

Suporte SDK:

Computação Lambda:
O servidor Minio aciona a função Lambda por meio de seu serviço de notificação de eventos compatível com AWS SNS/SQS. Os destinos suportados são filas de mensagens como Kafka, NATS, AMQP, MQTT, Webhooks e bancos de dados como Elasticsearch, Redis, Postgres e MySQL.

A interface gráfica
possui uma página de operação.

Funcionalidade simples:
menos propensa a erros e rápida de iniciar.

Código de eliminação de suporte:
MinIO usa código de eliminação e soma de verificação para evitar erros de hardware e poluição silenciosa de dados. Na configuração de redundância mais alta, os dados podem ser recuperados mesmo se metade dos discos for perdida.

1.4 Conceitos básicos

Objeto: Objetos básicos armazenados no Minio, como arquivos, fluxos de bytes, qualquer coisa...

Bucket: O espaço lógico usado para armazenar objetos. Os dados entre cada bucket são isolados uns dos outros. Para o cliente, equivale a uma pasta de nível superior que armazena arquivos.

Drive: O disco onde os dados são armazenados é passado como parâmetro quando o MinlO é iniciado. Todos os dados do objeto no Minio serão armazenados no Drive.

Conjunto : é uma coleção de unidades. A implantação distribuída divide automaticamente um ou mais conjuntos de acordo com o tamanho do cluster. As unidades em cada conjunto são distribuídas em locais diferentes. Um objeto é armazenado em um Conjunto. (Por exemplo: {1…64} é dividido em 4 conjuntos de tamanho 16, cada um.)

  • Um objeto é armazenado em um conjunto
  • Um cluster é dividido em vários conjuntos
  • O número de unidades incluídas em um conjunto é fixo e calculado automaticamente pelo sistema com base no tamanho do cluster por padrão. —As unidades em um SET são distribuídas em nós diferentes tanto quanto possível

1.5 Código de Apagamento CE (Código de Apagamento)

​ Erasure Code (Erasure Code) é uma tecnologia de codificação de dados usada para redundância de dados e tolerância a falhas. Ele alcança tolerância a falhas e recuperação de dados dividindo os dados originais em vários blocos de dados e gerando blocos de dados redundantes adicionais.

A codificação de eliminação é frequentemente usada em sistemas de armazenamento distribuído para melhorar a confiabilidade e durabilidade dos dados. Em comparação com os métodos tradicionais de backup com redundância de dados, a codificação de eliminação tem maior eficiência de armazenamento.

A seguir estão os principais recursos e vantagens da codificação de eliminação:

  1. Menor redundância : a codificação de eliminação pode dividir os dados originais em vários blocos de dados e gerar alguns blocos de dados redundantes.Em comparação com os métodos tradicionais de backup, a redundância necessária é menor. Isso significa que a codificação de eliminação pode fornecer redundância de dados e tolerância a falhas com maior eficiência de armazenamento.
  2. Forte tolerância a falhas : a codificação de eliminação pode recuperar blocos de dados originais perdidos ou danificados com base em parte das informações em blocos de dados redundantes. Mesmo em caso de perda de dados ou falha de hardware, os dados completos ainda podem ser recuperados. Diferentes esquemas de codificação de eliminação fornecem diferentes níveis de tolerância a falhas, e o esquema apropriado pode ser selecionado de acordo com necessidades específicas.
  3. Distribuição equilibrada de dados : os códigos de eliminação podem distribuir dados em vários nós de armazenamento para realizar o armazenamento distribuído de dados. Isso pode evitar a concentração de dados em um único nó e melhorar o equilíbrio e o desempenho de carga do sistema.
  4. Economize espaço de armazenamento : a codificação de eliminação pode fornecer tolerância a falhas de dados com menor redundância e economizar espaço de armazenamento em comparação com os métodos tradicionais de backup. Especialmente em cenários de armazenamento de dados em grande escala, a codificação de eliminação pode reduzir significativamente os custos de armazenamento.

A codificação de eliminação tem uma ampla gama de aplicações, incluindo armazenamento em nuvem, sistemas de arquivos distribuídos, data centers de grande escala e outros campos. Tem vantagens únicas em redundância de dados e tolerância a falhas, e tornou-se um importante meio técnico ao enfrentar requisitos de processamento e armazenamento de dados em grande escala.

1.6 Formulário de armazenamento

Quando o objeto de arquivo é carregado no MinlO, ele estará no disco de armazenamento de dados correspondente, com o nome do bucket como o diretório, o nome do arquivo como o diretório de próximo nível e o nome do arquivo sob o nome do arquivo é part.1 e xl.meta (a versão antiga, a versão mais recente é mostrada abaixo), o primeiro é um bloco de dados codificados e um bloco de verificação, e o último é um arquivo de metadados.

Insira a descrição da imagem aqui

ilustrar:

  • Os códigos de eliminação são armazenados de maneira paritária.
  • Na nova versão do MinIo, um código Hash será armazenado para verificar a integridade do arquivo. Se a verificação do código hash for diferente, significa que o arquivo está incompleto.

1.7 Solução de armazenamento

Insira a descrição da imagem aqui

ilustrar:

​ Quando o cluster MinIO for construído, uma interface API será fornecida. Você só precisa expor uma porta adicional para obter armazenamento distribuído.

Insira a descrição da imagem aqui
ilustrar:

8 nós, cada nó possui 1 disco rígido

Insira a descrição da imagem aqui
ilustrar:

​ 4 nós, 4 discos por nó

2. Casos de uso básicos

2.1 Implantação autônoma

2.1.2 Sem modo de codificação de apagamento

2.1.2.1 Visão geral

Insira a descrição da imagem aqui

ilustrar:

​ Quando o modo de codificação sem eliminação é iniciado em uma implantação de máquina única, para cada parte dos dados do objeto, o minio armazena os dados diretamente nos dados, sem criar uma cópia ou ativar o mecanismo de codificação de eliminação. Portanto, neste modelo, tanto a instância de serviço quanto o disco são "pontos únicos" sem qualquer garantia de alta disponibilidade. Danos no disco significam perda de dados.

2.1.2.2Método Linux

Etapa 1: instalar o serviço MinIO

As guias a seguir fornecem exemplos de instalação do MinIO em um sistema operacional Linux de 64 bits usando RPM, DEB ou binário. Os pacotes RPM e DEB instalarão automaticamente o MinIO nos caminhos de sistema necessários e criarão serviços. MinIO recomenda fortemente o uso de RPM ou DEB para instalar o roteamento. Para atualizar uma implantação gerenciada com systemctl, consulte Atualizando uma implantação MinIO gerenciada por systemctl .

wget https://dl.min.io/server/minio/release/linux-amd64/archive/minio-20230527055619.0.0.x86_64.rpm -O minio.rpm
sudo dnf install minio.rpm

ilustrar:

As etapas da operação acima são executadas em um sistema cuja arquitetura de sistema é AMD de 64 bits

Etapa 2: iniciar o serviço MinIO

Execute o seguinte comando em um terminal do sistema ou shell para iniciar uma instância local do MinIO usando esta pasta. Você pode substituir esse caminho por outro caminho de pasta na sua máquina local:~/minio

mkdir ~/minio
minio server ~/minio --console-address :9090

ilustrar:

​ Use este comando para iniciar o serviço MinIO e identificar a pasta na qual o servidor está sendo executado especificando o parâmetro Path

Quando o programa for iniciado com sucesso, o console imprimirá o seguinte:

Insira a descrição da imagem aqui

ilustrar:

  • Você pode ver que a senha de login padrão e o usuário de login são:minioadmin

Perceber:

  • As etapas acima são o processo normal de execução, mas neste momento você descobrirá que há um aviso:

    Insira a descrição da imagem aqui

  • O conteúdo do aviso indica que a porta do controlador é dinâmica e não fixa estaticamente. Neste caso, a porta precisa ser especificada manualmente. Se precisar modificar a senha inicial da conta, você também precisará especificá-la adicionalmente. por favor, assista a seguinte parte.

Reabastecimento:

  • O nome de usuário e a senha padrão são minioadmin:minioadmin. Para modificar o nome de usuário e a senha padrão, você pode usar:

    export MINIO_ROOT_USER=root
    export MINIO_ROOT_PASSWORD=qweasdzxc
    
  • O diretório de configuração padrão é ${HOME}/.minio. Você pode personalizar o diretório de configuração através do comando –config-dir:

    minio server --config-dir /mnt/config /mnt/data
    
  • A porta de escuta do console é gerada dinamicamente e uma porta estática pode ser especificada através de –console-address ":port"

    minio server --console-address ":9090" /mnt/data
    

    Insira a descrição da imagem aqui

Etapa 3: Conecte o navegador ao serviço MinIO

​ Abra http://127.0.0.1:9000 em um navegador da web para acessar o console do MinIO . Você também pode inserir qualquer endereço de rede especificado como parte da saída do comando do servidor. Por exemplo, o console na saída de exemplo : http://192.0.2.10:9090 http://127.0.0.1:9090 indica dois endereços possíveis para conexão com o console.

Insira a descrição da imagem aqui

2.1.2.3Método Docker

Passo 1: Verifique a ocupação da porta designada do sistema

sudo netstat -tuln | grep 9000
sudo netstat -tuln | grep 9090

ilustrar:

  • Verifique as portas especificadas 9000 e 9090 para se preparar para o próximo mapeamento de portas do Docker
  • Formato de uso: sudo netstat -tuln | grep

Se ocorrer ocupação de porta, conforme mostrado abaixo, a porta mapeada do Docker precisa ser substituída adequadamente.

Caso não haja ocupação do porto, nenhuma mensagem será retornada.

Insira a descrição da imagem aqui

Etapa 2: iniciar o serviço MinIO
docker run -d \
-p 9000:9000 \
-p 9090:9090 \
--name=minio \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /home/data:/data -v /home/config:/root/.minio \
minio/minio server /data \
--console-address ":9000" \
--address ":9090"

Perceber:

  • Minio começa com uma porta dinâmica por padrão, aqui você precisa definir uma porta fixa--console-address ":9000" --address ":9090"
  • Entre na armadilha, aqui você precisa mapear a porta da interface S3-API do serviço MinIO para o host do sistema.

ilustrar:

  • docker run: usado para executar um novo contêiner no Docker.
  • -d: indica a execução do contêiner em modo de segundo plano (daemon).
  • -p 9000:9000: Mapeie a porta 9000 do host para a porta 9000 do contêiner, permitindo que os serviços MinIO sejam acessados ​​a partir do host.
  • -p 9090:9090: Mapeie a porta 9090 do host para a porta 9090 do contêiner, permitindo acesso à interface S3-API do serviço MinIO a partir do host.
  • --name=minio: Especifique o nome do contêiner como "minio".
  • --restart=always: configure o contêiner para reiniciar automaticamente na inicialização.
  • -e "MINIO_ROOT_USER=root": Defina o usuário root do MinIO como "root".
  • -e "MINIO_ROOT_PASSWORD=qweasdzxc": Defina a senha do usuário root do MinIO como "qweasdzxc".
  • -v /home/data:/data: Monte o diretório "/home/data" do host no diretório "/data" do contêiner para armazenar dados MinIO.
  • -v /home/config:/root/.minio: Monte o diretório "/home/config" do host no diretório "/root/.minio" do contêiner para armazenar o arquivo de configuração do MinIO.
  • minio/minio: imagem Docker usando MinIO.
  • server /data: Especifique o diretório de dados do servidor MinIO como "/data".
  • --console-address ":9000": Especifique o endereço do console MinIO como ":9000" para permitir acesso à interface web do MinIO por meio deste endereço.
  • --address ":9090": Especifique o endereço do servidor MinIO como ":9090" para permitir acesso à interface API MinIO por meio deste endereço.
Etapa 3: visualizar informações da porta de escuta

Insira a descrição da imagem aqui

Visualize informações de conexão de rede e porta de escuta no sistema

netstat -tpnl

ilustrar:

Como você pode ver, a porta de escuta já existe

Etapa 4: Conecte o navegador ao serviço MinIO

​ Abra http://127.0.0.1:9000 em um navegador da web para acessar o console do MinIO . Você também pode inserir qualquer endereço de rede especificado como parte da saída do comando do servidor. Por exemplo, o console na saída de exemplo : http://192.0.2.10:9090 http://127.0.0.1:9090 indica dois endereços possíveis para conexão com o console.

[Falha na transferência da imagem do link externo. O site de origem pode ter um mecanismo anti-leeching. Recomenda-se salvar a imagem e carregá-la diretamente (img-75QJ5Qwx-1686235487719) (MiNIO.assets/image-20230605111810325.png)]

2.1.3 Com modo de codificação de eliminação

2.1.3.1 Visão geral

Minio usa codificação de eliminação e somas de verificação para proteger os dados contra falhas de hardware e corrupção silenciosa de dados. Mesmo se você perder metade (N/2) dos seus discos rígidos, ainda poderá recuperar seus dados.

Insira a descrição da imagem aqui

A codificação de eliminação é um algoritmo matemático para recuperar dados perdidos e danificados.Minio usa o código Reed-Solomon para dividir o objeto em dados N/2 e blocos de paridade N/2. Isso significa que se forem 12 discos, um objeto será dividido em 6 blocos de dados e 6 blocos de paridade. Você pode perder quaisquer 6 discos (independentemente de serem blocos de dados armazenados ou blocos de paridade). A restauração ainda é possível a partir do dados nos discos restantes.

ilustrar:

​ Comece em uma implantação de máquina única sem modo de codificação de eliminação. Neste modo, vários parâmetros de disco local são passados ​​para a instância do servidor minio. Quando mais de um parâmetro de disco for encontrado, o servidor minio ativará automaticamente o modo de código de eliminação. O código de eliminação tem requisitos para o número de discos. Se os requisitos não forem atendidos, a inicialização da instância falhará. Após a habilitação do código de eliminação, são necessários pelo menos 4 endpoints (no modo autônomo, ou seja, diretórios no disco local) passados ​​para o servidor minio.

Insira a descrição da imagem aqui

ilustrar:

​ Se o arquivo tiver menos de 10M, ele será armazenado na forma de um arquivo. Se o arquivo for maior que 10M, o objeto do arquivo será armazenado em blocos.

2.1.3.2 Etapas de operação

Etapa 1: iniciar o serviço MinIO
docker run -d \
-p 9000:9000 \
-p 9090:9090 \
--name=minio \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /home/minio/data1:/data1 \
-v /home/minio/data2:/data2 \
-v /home/minio/data3:/data3 \
-v /home/minio/data4:/data4 \
-v /home/minio/data5:/data5 \
-v /home/minio/data6:/data6 \
-v /home/minio/data7:/data7 \
-v /home/minio/data8:/data8 \
minio/minio server /data{1...8} \
--console-address ":9000" \
--address ":9090"

Perceber:

  • Minio começa com uma porta dinâmica por padrão, aqui você precisa definir uma porta fixa--console-address ":9000" --address ":9090"
  • Entre na armadilha, aqui você precisa mapear a porta da interface S3-API do serviço MinIO para o host do sistema.

ilustrar:

  • docker run: usado para executar um novo contêiner no Docker.
  • -d: indica a execução do contêiner em modo de segundo plano (daemon).
  • -p 9000:9000: Mapeie a porta 9000 do host para a porta 9000 do contêiner, permitindo que os serviços MinIO sejam acessados ​​a partir do host.
  • -p 9090:9090: Mapeie a porta 9090 do host para a porta 9090 do contêiner, permitindo acesso à interface S3-API do serviço MinIO a partir do host.
  • --name=minio: Especifique o nome do contêiner como "minio".
  • --restart=always: configure o contêiner para reiniciar automaticamente na inicialização.
  • -e "MINIO_ROOT_USER=root": Defina o usuário root do MinIO como "root".
  • -e "MINIO_ROOT_PASSWORD=qweasdzxc": Defina a senha do usuário root do MinIO como "qweasdzxc".
  • -v /home/data:/data: Monte o diretório "/home/data" do host no diretório "/data" do contêiner para armazenar dados MinIO.
  • -v /home/config:/root/.minio: Monte o diretório "/home/config" do host no diretório "/root/.minio" do contêiner para armazenar o arquivo de configuração do MinIO.
  • minio/minio: imagem Docker usando MinIO.
  • server /data: Especifique o diretório de dados do servidor MinIO como "/data".
  • --console-address ":9000": Especifique o endereço do console MinIO como ":9000" para permitir acesso à interface web do MinIO por meio deste endereço.
  • --address ":9090": Especifique o endereço do servidor MinIO como ":9090" para permitir acesso à interface API MinIO por meio deste endereço.

Suplemento: Verifique o diretório de armazenamento

Insira a descrição da imagem aqui

  • Você pode ver por meio da ferramenta mc client que os códigos de verificação e as informações do arquivo de origem dos arquivos do disco estão armazenados nos 8 discos do intervalo de fotos.
Etapa 2: Conecte o navegador ao serviço MinIO

Insira a descrição da imagem aqui

ilustrar:

Depois de ver esta interface, você pode usar o serviço MinIo com sucesso

2.2 Implantação de cluster distribuído

2.2.1 Visão geral

2.2.1.1 Significado

O Distributed Minio permite combinar vários discos rígidos (mesmo em máquinas diferentes) em um serviço de armazenamento de objetos. Como os discos rígidos são distribuídos em nós diferentes, o Minio distribuído evita pontos únicos de falha.

Insira a descrição da imagem aqui

2.2.1.2 Métodos comuns

​ Armazenamento distribuído, um ponto chave é a confiabilidade dos dados, ou seja, garantir a integridade dos dados, sem perdas ou danos. Somente com a premissa de alcançar a confiabilidade poderemos ter a base para buscar consistência, alta disponibilidade e alto desempenho. No campo do armazenamento, geralmente existem dois tipos principais de métodos para garantir a confiabilidade dos dados, um é o método de redundância e o outro é o método de verificação.

Redundância O método de redundância é o mais simples e direto, ou seja, fazer uma cópia dos
dados armazenados . Quando os dados são perdidos ou danificados, o conteúdo do backup pode ser usado para restaurá-los. O número de cópias determina a confiabilidade dos dados . Isto implicará considerações de custos: quanto mais cópias de dados, mais fiáveis ​​serão os dados, mas quanto mais equipamento for necessário, maior será o custo. A confiabilidade permite a perda de um dado. Atualmente, muitos sistemas distribuídos são implementados desta forma, como o sistema de arquivos do Hadoop (3 cópias), cluster Redis, modo de espera ativo do MySQL, etc.

Verificação O método de verificação utiliza o cálculo matemático
do código de verificação para verificar e restaurar dados perdidos ou danificados. Observe que existem duas funções aqui. Uma é a verificação. Ao calcular a soma de verificação dos dados, você pode verificar se os dados estão completos e se estão danificados ou alterados. É frequentemente usado na transmissão e armazenamento de dados, como o protocolo TCP . ; A segunda é a recuperação e restauração. Ao combinar dados com códigos de verificação e cálculos matemáticos, dados perdidos ou danificados podem ser restaurados, o que pode reduzir a redundância e ao mesmo tempo garantir a confiabilidade dos dados, como tecnologia RAID e codificação de eliminação em armazenamento autônomo em disco rígido . Tecnologia (Código de Apagamento), etc. MinIO usa tecnologia de codificação de eliminação.

2.2.1.3 Vantagens

Proteção de dados
distribuída O Minio usa códigos de eliminação para evitar tempo de inatividade de vários nós e apodrecimento de bits. O Minio distribuído requer pelo menos 4 discos rígidos , e o uso do Minio distribuído introduz automaticamente a função de código de apagamento .

Alta disponibilidade
: Existe um único ponto de falha no serviço Minio autônomo, pelo contrário, se for um Minio distribuído com N discos rígidos, desde que N/2 discos rígidos estejam online, seus dados estarão seguros. Mas você precisa de pelo menos discos rígidos N/2+1 para criar novos objetos.
Por exemplo, um cluster Minio de 16 nós tem 16 discos rígidos por nó. Mesmo que 8 servidores estejam inativos, o cluster ainda será legível, mas você precisa de 9 servidores para gravar dados.

Consistência
Minio no modo distribuído e autônomo, todas as operações de leitura e gravação obedecem estritamente ao modelo de consistência leitura após gravação.

2.2.1.4 Precauções

​ Para iniciar uma instância distribuída do Minio, você só precisa passar a localização do disco rígido como parâmetro para o comando do servidor minio. Em seguida, você precisa executar o mesmo comando em todos os outros nós.

  • Todos os nós no Minio distribuído precisam ter a mesma chave de acesso e chave secreta para que esses nós possam estabelecer conexões. Para conseguir isso, você precisa exportar a chave de acesso e a chave secreta para variáveis ​​de ambiente antes de executar o comando minicserver. A nova versão usa MINIO_ROOT_USER&MINIO_ROOT_PASSWORD.
  • O disco usado pelo Minio distribuído deve estar limpo e não conter dados.
  • A diferença de tempo do nó no Minio distribuído não pode exceder 3 segundos. Você pode usar o NTP para garantir a consistência do tempo.
  • A execução do Minio distribuído no Windows está em fase experimental, por favor, vá com calma.

2.2.2 Casos de uso básicos

Experimento 3: iniciar o modo cluster Docker

premissa:

Este tutorial pressupõe que todos os hosts que executam o MinIO estão usando o sistema operacional Linux recomendado , como RHEL8+ ou Ubuntu 18.04+.

Etapa 1: crie um diretório de arquivos
cd /opt
mkdir minio
Etapa 2: montar o diretório de recursos
sudo mount /dev/sda3 /opt/minio

ilustrar:

  • Verifique o diretório de recursos com antecedência

    lsblk
    

    Insira a descrição da imagem aqui

Etapa 3: configurar a montagem automática na inicialização
sudo nano /etc/fstab
/dev/sda3 /info/minio ext4 defaults 0 0
Etapa 4: iniciar o Docker

Perceber:

  • Todos os nós precisam ser construídos em 3 segundos
  • Os recursos em todos os nós precisam estar vazios
  • Os nomes de host de todos os nós devem ser distintos e ordenados

Execute os seguintes comandos nas quatro máquinas virtuais, respectivamente

sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host1" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \
sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host2" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \
sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host3" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \
sudo docker run -d -p 9000:9000 -p 9090:9090 \
--name=minio-node \
--restart=always \
-e "MINIO_ROOT_USER=root" \
-e "MINIO_ROOT_PASSWORD=qweasdzxc" \
-v /info/minio/data1:/data1 \
-v /info/minio/data2:/data2 \
-v /info/minio/data3:/data3 \
-v /info/minio/data4:/data4 \
-v /info/minio/data5:/data5 \
-v /info/minio/data6:/data6 \
-v /info/minio/data7:/data7 \
-v /info/minio/data8:/data8 \
-v /info/minio/config:/root/.minio \
--network host \
--hostname "host4" \
minio/minio server http://10.13.165.121:9000/data{1...8} http://10.13.165.122:9000/data{1...8} http://10.13.165.125:9000/data{1...8} http://10.13.165.199:9000/data{1...8} \
--console-address ":9090" \

ilustrar:

  • A configuração aqui é montar 8 discos rígidos em um nó.
  • Vale ressaltar que o número de discos rígidos montados varia de 2 a 16
  • Quando o serviço de armazenamento de objetos MinIo é construído usando um cluster distribuído, o modo de código de eliminação será ativado automaticamente dentro do MinIo

Reabastecimento:

A premissa é que cada máquina virtual precisa ser capaz de fazer ping entre si

Perceber:

  • Se o arquivo inicial contiver arquivos, o seguinte prompt aparecerá

    ERROR Unable to initialize backend: /data1 drive is already being used in another erasure deployment. (Number of drives specified: 16 but the number of drives found in the 1st drive's format.json: 4)
    

    ilustrar:

    Neste momento, exclua os recursos que requerem o caminho de montagem ou altere o diretório de montagem.

Perceber:

  • Se houver algum problema com outros hosts, o seguinte prompt aparecerá

    API: SYSTEM()
    Time: 08:07:08 UTC 06/06/2023
    Error: Read failed. Insufficient number of drives online (*errors.errorString)
           6: internal/logger/logger.go:258:logger.LogIf()
           5: cmd/prepare-storage.go:246:cmd.connectLoadInitFormats()
           4: cmd/prepare-storage.go:304:cmd.waitForFormatErasure()
           3: cmd/erasure-server-pool.go:103:cmd.newErasureServerPools()
           2: cmd/server-main.go:810:cmd.newObjectLayer()
           1: cmd/server-main.go:611:cmd.serverMain()
    Waiting for a minimum of 2 drives to come online (elapsed 16s)
    

    ilustrar:

    Verifique os logs de outros nós neste momento

Perceber:

Perceber:

  • Se a capacidade do disco rígido montado não for grande o suficiente, o seguinte prompt aparecerá.

    Error: Unable to initialize backend: failed to load rebalance data: Storage resources are insufficient for the read operation .minio.sys/rebalance.bin, retrying in 4.452062213s (*fmt.wrapError)
    

    ilustrar:

    É necessário aumentar a capacidade do disco rígido, verificar se o disco rígido foi montado com sucesso e alterar o caminho de montagem do disco rígido.

Etapa 5: use MinIo

Insira a descrição da imagem aqui

Perceber:

  • Se o nó cair durante o uso normal, o seguinte prompt aparecerá

    Storage resources are insufficient for the write operation .minio.sys/tmp/d74be3f0-856f-4532-802b-871b44204f2a/92c33006-b79a-4560-bd65-0f40cb810d63/part.1
    

    ilustrar:

    Neste ponto, verifique usando o serviço de nó

Etapa 6: crie um balanceador de carga

Pré-requisito: o serviço Nginx precisa estar instalado no computador. Verifique o log para obter detalhes.

1. Modifique o arquivo de configuração default.conf do nginx

upstream minio{
    server 10.13.165.121:9000;
    server 10.13.165.122:9000;
    server 10.13.165.125:9000;
    server 10.13.165.199:9000;
}
upstream console{
    ip_hash;
    server 10.13.165.121:9090;
    server 10.13.165.122:9090;
    server 10.13.165.125:9090;
    server 10.13.165.199:9090;
}

server {
    listen       8000;
    listen  [::]:8000;
    server_name  localhost;

    # To allow special characters in headers
    ignore_invalid_headers off;
    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific value
    client_max_body_size 0;
    # To disable buffering
    proxy_buffering off;

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout 300;
        # Default is HTTP/1, keepalive is only enabled in HTTP/1.1
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        chunked_transfer_encoding off;

        proxy_pass http://minio;
    }
}

server {
    listen       8080;
    listen  [::]:8080;
    server_name  localhost;
    
    # To allow special characters in headers
    ignore_invalid_headers off;
    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific value
    client_max_body_size 0;
    # To disable buffering
    proxy_buffering off;
    
    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://console;
         
     }
}

ilustrar:

O texto acima é um exemplo de arquivo de configuração Nginx e a seguir é uma explicação do significado de cada item de configuração:

  • listen: Especifique o número da porta que o Nginx escuta, aqui é 9000, e use IPv6 [::]:9000para indicar a escuta de solicitações IPv6 e IPv4 ao mesmo tempo.

  • server_name: Define o nome de domínio ou nome de host deste bloco de servidor. É definido aqui localhostpara indicar que a solicitação cujo nome de domínio é localhost será processada.

  • ignore_invalid_headers: controla se devem ser ignorados cabeçalhos de solicitação inválidos. O padrão é off, indicando não ignorar.

  • client_max_body_size: define o tamanho máximo do corpo da solicitação do cliente. Definir como 0 significa que não há limite de tamanho de arquivo.

  • proxy_buffering: Controla se o buffer de proxy está habilitado. O padrão é off, o que significa que está desabilitado.

  • location /: Defina o local de processamento da solicitação do Nginx, aqui está o diretório raiz /. Indica que todas as solicitações serão processadas de acordo com a configuração deste local.

  • proxy_set_header: Defina alguns valores de variáveis ​​no cabeçalho da solicitação, como Host, e etc.X-Real-IPX-Forwarded-ForX-Forwarded-Proto

  • proxy_connect_timeout: defina o tempo limite para estabelecer uma conexão com o servidor back-end.

  • proxy_http_version: especifique a versão do protocolo HTTP usada para comunicação com o servidor back-end.

  • proxy_set_header Connection "";: defina o campo no cabeçalho da solicitação Connectioncomo vazio, indicando que a conexão não será mantida.

  • chunked_transfer_encoding: controla se a codificação de transferência em partes deve ser habilitada; o padrão é off, o que significa desabilitado.

  • proxy_pass: especifica o endereço do servidor de destino para encaminhamento de proxy, aqui http://minio, indicando que a solicitação será encaminhada para minioo servidor backend nomeado.

Por meio da configuração acima, o Nginx escutará as solicitações na porta 9000 e encaminhará as solicitações para minioo servidor backend nomeado para processamento. Ao mesmo tempo, você também pode personalizar a solicitação definindo o cabeçalho da solicitação, o período de tempo limite, a versão do protocolo HTTP, etc.

2. Inicie o Nginx

docker run \
-p 8000:8000 \
-p 8080:8080 \
--name nginx \
--restart=always \
-v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/log:/var/log/nginx \
-v /opt/nginx/html:/usr/share/nginx/html \
-d nginx:latest

ilustrar:

Neste ponto, a configuração do nginx está concluída. Visite http://10.13.165.121:8080/, http://10.13.165.121:8000/ e o agente terá sucesso.

Insira a descrição da imagem aqui

3. Uso da interface

3.1 Obtenha accessKey e secretKey

1.Criar usuário
Insira a descrição da imagem aqui

2. Crie uma chave

Insira a descrição da imagem aqui

Registro

Documentação de referência:

MinIO | Alto desempenho, armazenamento de objetos nativos do Kubernetes

SDKs Minio - Documentação da API do cliente Python - "Minio Cookbook versão chinesa" - BookStack.com · BookStack

minio/minio-py: SDK do cliente MinIO para Python (github.com)

Exemplo completo - Java Photo API Service - "Minio Cookbook versão chinesa" - BookStack.com · BookStack

minio/minio: armazenamento de objetos de alto desempenho para IA (github.com)

Perceber:

Ao consultar a documentação, isso é uma armadilha. Você precisa consultar o documento em inglês porque o documento chinês não é atualizado a tempo.

Instalação do Docker Nginx

Etapa 1: crie um diretório

# 创建挂载目录
mkdir -p /opt/nginx/conf
mkdir -p /opt/nginx/log
mkdir -p /opt/nginx/html

Etapa 2: adicionar permissões de execução

chmod 777 nginx

Etapa 3: gerar contêiner

docker run --name nginx -p 9001:80 -d nginx

Etapa 4: copie o arquivo nginx.conf

docker cp nginx:/etc/nginx/nginx.conf /opt/nginx/conf/nginx.conf

Insira a descrição da imagem aqui

Etapa 5: copie a pasta conf.d

docker cp nginx:/etc/nginx/conf.d /opt/nginx/conf/conf.d

Insira a descrição da imagem aqui

Etapa 6: copie a pasta html

docker cp nginx:/usr/share/nginx/html /opt/nginx/

Insira a descrição da imagem aqui

Etapa 7: excluir o contêiner

# 关闭该容器
docker stop nginx
# 删除该容器
docker rm nginx

Etapa 8: execute novamente o contêiner

docker run \
-p 8080:80 \
--name nginx \
--restart=always \
-v /opt/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/log:/var/log/nginx \
-v /opt/nginx/html:/usr/share/nginx/html \
-d nginx:latest

Etapa 9: acesse o nginx através do navegador

Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/D_boj/article/details/131117462
Recomendado
Clasificación