Como particionar o sistema de diretórios para GlusterFS?

Como particionar o sistema de diretórios para GlusterFS?

Temos 3 pastas em uma máquina Ubuntu 14.04, cada uma contendo 250K imagens com tamanho de 2KB-30KB em cada pasta, esperando crescer até 1M de arquivos por diretório.

Ao tentar escalar o aplicativo para vários servidores, estamos procurando no Glusterfs um armazenamento compartilhado. Como arquivos de 250K não são um problema no ext4, parece ser problemático para o glusterfs. Tentar copiar os arquivos trava totalmente a máquina.

Pretendo particionar os arquivos em diretórios em 2 níveis:

mkdir -p {000..255}/{000..255}

/000/000/filename
/001/000/filename
/001/001/filename
...

Isso parece uma boa maneira viável? Toda a estrutura conterá milhões de arquivos posteriormente. Isso permitiria que o glusterfs fosse confiável na produção com bom desempenho, hospedando milhões de arquivos?

Responder1

Usar o GlusterFS para armazenar e acessar muitos arquivos muito pequenos é uma dificuldade que muitas implementações enfrentam, e parece que você já está no bom caminho para resolver o problema: dividir os arquivos em diretórios separados.

Você poderia implementar uma solução como essa. Basta criar vários diretórios, escolher um limite para quantos arquivos podem caber em cada diretório e esperar que você não fique sem lugares para colocar os arquivos. No seu exemplo, você está criando mais de 65 mil diretórios, então isso provavelmente não será um problema tão cedo.

Outra opção é criar diretórios com base na data de criação do arquivo. Por exemplo, se o arquivo cust_logo_xad.pngfosse criado hoje, ele seria armazenado aqui:

/gluster/files/2015/08/24/cust_logo_xad.png

Se você estiver hospedando dados para entidades diferentes (clientes, departamentos, etc.), poderá separar os arquivos com base na propriedade, atribuindo à entidade algum tipo de ID exclusivo. Por exemplo:

/gluster/files/ry/ry7eg4k/cust_logo_xad.png

Além disso, seria uma boa ideia dar uma olhada noDocumentação do GlusterFS para ajustar o cluster de armazenamento para hospedar arquivos pequenos. No mínimo, certifique-se de que:

  1. Os sistemas de arquivos nos servidores de armazenamento GlusterFS possuem inodes livres suficientes disponíveis ( mkfsopção)
  2. As unidades nos servidores de armazenamento GlusterFS podem lidar com muitos IOPs.
  3. Você usa um sistema de arquivos apropriado para a tarefa (ext4 ou xfs)
  4. Seu aplicativo/equipe não tenta verificar diretórios com muitos arquivos pequenos com frequência.

Se você puder (e se ainda não o fez), é uma boa ideia criar um banco de dados para atuar como um índice para os arquivos, em vez de ter que varrer (por exemplo ls) ou pesquisar (por exemplo find) arquivos o tempo todo.

informação relacionada