JuiceFS novato deve saber 24 perguntas

O JuiceFS é um produto de software inovador. Muitos amigos que o experimentam pela primeira vez têm muitas dúvidas sobre o produto e seu uso, portanto, para ajudá-lo a entender e começar a usar o JuiceFS rapidamente, compilamos 24 respostas para perguntas clássicas sobre o JuiceFS. Acredito que após essas 24 perguntas, todos terão uma compreensão mais clara do JuiceFS, e será mais conveniente de usar.

1. Quais são os recursos básicos do JuiceFS

O JuiceFS é um sistema de arquivos compartilhados de alto desempenho projetado para nuvem nativa, lançado sob o contrato de código aberto Apache 2.0. Ele fornece compatibilidade POSIX completa e pode conectar quase todo o armazenamento de objetos localmente como um disco local massivo e também pode montar e ler em diferentes hosts em plataformas e regiões ao mesmo tempo.

2. Como funciona o JuiceFS?

JuiceFS é um sistema de arquivos distribuído. A latência do acesso aos metadados depende de 1 a 2 viagens de ida e volta da rede (geralmente 1-3 ms) entre o ponto de montagem e o servidor. A latência do acesso aos dados depende da latência do armazenamento do objeto. (geralmente 20-100 ms). A taxa de transferência de leitura e gravação sequencial pode atingir 50MiB/s a 2800MiB/s (consulte os resultados do teste de fio ), dependendo da largura de banda da rede e se os dados são fáceis de serem compactados.

O JuiceFS possui um cache de vários níveis integrado (invalidação ativa). Depois que o cache é aquecido, a latência de acesso e a taxa de transferência são muito próximas do desempenho de um sistema de arquivos autônomo (o FUSE trará uma pequena quantidade de sobrecarga) .

3. Condições necessárias para o funcionamento do JuiceFS

Antes de executar, o mecanismo de metadados e o armazenamento de objetos precisam ser preparados. O mecanismo de metadados armazena metadados, como nome, tamanho e hora de modificação do arquivo, enquanto o armazenamento de objetos armazena o conteúdo do arquivo.

Atualmente, o mecanismo de metadados oferece suporte a: Redis, TiKV, MySQL, PostgreSQL etc. Para obter a lista de suporte do mecanismo de metadados atual e a configuração específica, consulte o documento Como definir o mecanismo de metadados

O armazenamento de objetos suporta mais e basicamente o armazenamento de objetos comuns é suportado, como AWS S3, Alibaba Cloud OSS, Huawei Cloud OBS, Tencent Cloud COS, etc. Além disso, para a conveniência do teste, os discos locais também são especialmente suportados como armazenamento de objetos . A lista de suporte de armazenamento de objetos atual e a configuração específica referem-se a como configurar a documentação de armazenamento de objetos

4. Etapas para usar o JuiceFS

Os passos para usar são muito simples, são dois passos, o primeiro passo é formatar, e o segundo passo é montá-lo localmente. Veja a seguir um exemplo de uso do JuiceFS e do Redis para montar o Alibaba Cloud OSS localmente:

# 1. 格式化一个文件系统
juicefs format \
--storage oss \
--bucket https://zhijian-dev.oss-cn-hangzhou.aliyuncs.com \
--access-key xxxx \ 
--secret-key xxxx \
redis://localhost:6379/1 \
test1 

# 2. 后台挂载文件系统到 /tmp/jfs 目录
juicefs mount -d redis://localhost:6379/1 /tmp/jfs

5. A maneira mais rápida de experimentar o JuiceFS

Não tenho Redis ou armazenamento de objetos localmente, posso experimentar o JuiceFS? Claro, é possível obter o serviço JuiceFS. Mecanismo de metadados e armazenamento de objetos são dois componentes, mas podemos usar o mais simples desses dois componentes. Por exemplo, o mecanismo de metadados usa o banco de dados incorporado do SQLite, enquanto o armazenamento de objetos usa o disco local (formato Quando —bucketo parâmetro não é preenchido, é o parâmetro padrão. O padrão é usar o disco local como armazenamento de objeto. O caminho de armazenamento padrão para usuários raiz é , /var/jfse o caminho de armazenamento padrão para usuários comuns é ~/.juicefs/local). Dessa forma, você pode experimentar os produtos JuiceFS sem nenhum componente externo apenas por binários do JuiceFS.

# 1. 使用 sqlite 作为元数据引擎格式化文件系统 
juicefs format "sqlite3://my-jfs.db" test1

# 2. 后台挂载文件系统到 /tmp/jfs 目录
juicefs mount -d sqlite3://my-jfs.db /tmp/jfs

6. Posso montá-lo com um usuário rootque não seja ?

Sim, o JuiceFS pode ser montado por qualquer usuário. O diretório de cache padrão é $HOME/.juicefs/cache(macOS) ou /var/jfsCache(Linux), certifique-se de que o usuário tenha permissão de gravação para este diretório ou mude para outro diretório com permissão. Consulte "Cache de leitura do cliente" para obter mais informações.

7. Qual a compatibilidade do JuiceFS com o protocolo POSIX?

O JuiceFS usa Pjdfstest e LTP para verificar sua compatibilidade com POSIX. O resultado final do teste é que ele passou em todos os casos de teste em pjdfstest e na maioria dos casos de uso em LTP.

8. Quais métodos o JuiceFS suporta para acessar dados além da montagem comum

Além da montagem comum, os seguintes métodos também são suportados:

  • Kuberenetes CSI driver: Use JuiceFS como a camada de armazenamento do cluster Kubernetes por meio do driver Kubernetes CSI. Para obter detalhes, consulte "Kubernetes usa JuiceFS" .
  • Hadoop Java SDK: É conveniente usar o cliente Java compatível com a interface HDFS para acessar o JuiceFS no sistema Hadoop. Para obter detalhes, consulte "Hadoop usando JuiceFS" .
  • S3 Gateway: Acesse o JuiceFS através do protocolo S3, consulte "Configurar o JuiceFS S3 Gateway" para obter detalhes .
  • Plug-in de volume do Docker: é conveniente usar JuiceFS no Docker. Para obter detalhes, consulte "Docker usa JuiceFS" .
  • WebDAV Gateway: Acesse o JuiceFS através do protocolo WebDAV

9. O Redis no modo Sentinel ou cluster oferece suporte ao mecanismo de metadados JuiceFS?

Suporte, e aqui está um artigo de práticas recomendadas sobre Redis como o mecanismo de metadados JuiceFS para referência.

10. Como testar o desempenho do JuiceFS

Depois de montar o JuiceFS em um diretório local, execute o comando Bench JuiceFS neste diretório. O comando do banco JuiceFS executará testes de leitura e gravação de arquivos grandes e pequenos neste diretório. por exemplo:

# /tmp/jfs 是 JuiceFS 挂载在本地的目录
$ juicefs bench /tmp/jfs
Cleaning kernel cache, may ask for root privilege...
Password:
  Write big blocks count: 1024 / 1024 [==============================================================]  done
   Read big blocks count: 1024 / 1024 [==============================================================]  done
Write small blocks count: 100 / 100 [==============================================================]  done
 Read small blocks count: 100 / 100 [==============================================================]  done
  Stat small files count: 100 / 100 [==============================================================]  done
Benchmark finished!
BlockSize: 1 MiB, BigFileSize: 1024 MiB, SmallFileSize: 128 KiB, SmallFileCount: 100, NumThreads: 1
+------------------+-----------------+--------------+
|       ITEM       |      VALUE      |     COST     |
+------------------+-----------------+--------------+
|   Write big file |   1236.96 MiB/s |  0.83 s/file |
|    Read big file |   2962.88 MiB/s |  0.35 s/file |
| Write small file |  2277.4 files/s | 0.44 ms/file |
|  Read small file |  2753.0 files/s | 0.36 ms/file |
|        Stat file | 16603.3 files/s | 0.06 ms/file |
+------------------+-----------------+--------------+

juicefs benchO comando também pode ser usado como um teste simples após a montagem para avaliar rapidamente se o serviço JuiceFS está normal. Para mais perguntas sobre o teste de desempenho do JuiceFS, consulte este documento de guia de avaliação de desempenho

11. Como testar a compatibilidade e o desempenho do armazenamento de objetos

O armazenamento de objetos é um componente importante do JuiceFS. A exatidão e o desempenho do armazenamento de objetos afetam diretamente a exatidão e o desempenho dos serviços do JuiceFS. Portanto, quando o JuiceFS tiver problemas, você pode tentar descartar a possibilidade de problemas de armazenamento de objetos. Para facilitar o teste, temos comandos integrados juicefs objbenchque podem testar rapidamente a correção e o desempenho do armazenamento de objetos. Exemplo:

$ juicefs objbench --storage minio  http://127.0.0.1:9000/testbucket --access-key admin --secret-key admin123
Start Functional Testing ...
+----------+---------------------+-------------+
| CATEGORY |         TEST        |    RESULT   |
+----------+---------------------+-------------+
|    basic |     create a bucket |        pass |
|    basic |       put an object |        pass |
|    basic |       get an object |        pass |
|    basic |       get non-exist |        pass |
|    basic |  get partial object |        pass |
|    basic |      head an object |        pass |
|    basic |    delete an object |        pass |
|    basic |    delete non-exist |        pass |
|    basic |        list objects |        pass |
|     sync |    put a big object |        pass |
|     sync | put an empty object |        pass |
|     sync |    multipart upload |        pass |
|     sync |  change owner/group | not support |
|     sync |   change permission | not support |
|     sync |        change mtime | not support |
+----------+---------------------+-------------+

Start Performance Testing ...
put small objects count: 100 / 100 [==============================================================]  done
get small objects count: 100 / 100 [==============================================================]  done
   upload objects count: 256 / 256 [==============================================================]  done
 download objects count: 256 / 256 [==============================================================]  done
     list objects count: 100 / 100 [==============================================================]  done
     head objects count: 100 / 100 [==============================================================]  done
   delete objects count: 100 / 100 [==============================================================]  done
Benchmark finished! block-size: 4096 KiB, big-object-size: 1024 MiB, small-object-size: 128 KiB, small-objects: 100, NumThreads: 4
+--------------------+--------------------+-----------------+
|        ITEM        |        VALUE       |       COST      |
+--------------------+--------------------+-----------------+
|     upload objects |        67.12 MiB/s | 59.59 ms/object |
|   download objects |       106.86 MiB/s | 37.43 ms/object |
|  put small objects |    508.2 objects/s |  1.97 ms/object |
|  get small objects |    728.0 objects/s |  1.37 ms/object |
|       list objects | 46890.01 objects/s |      2.13 ms/op |
|       head objects |   2861.2 objects/s |  0.35 ms/object |
|     delete objects |   2295.1 objects/s |  0.44 ms/object |
| change permissions |        not support |     not support |
| change owner/group |        not support |     not support |
|       update mtime |        not support |     not support |
+--------------------+--------------------+-----------------+

12. A desinstalação do ponto de montagem relata Resource busy -- try 'diskutil unmount'um erro

Isso significa que um determinado arquivo ou diretório sob o ponto de montagem está sendo usado. Não pode ser umountverificado diretamente (como por meio lsofdo comando ) se há um terminal aberto localizado em um determinado diretório do ponto de montagem do JuiceFS ou se um aplicativo está sendo processado os arquivos do ponto de montagem no loadpoint. Nesse caso, saia do terminal ou aplicativo antes de tentar desmontar o sistema de arquivos usando juicefs umounto comando .

13. Como destruir um sistema de arquivos

Use juicefs destroyo comando para destruir um sistema de arquivos, este comando limpará os dados relevantes no mecanismo de metadados e no armazenamento de objetos. Para obter detalhes sobre o uso deste comando, consulte a documentação .

14. Onde está o log do JuiceFS

O log será gravado no arquivo de log quando o JuiceFS for montado em segundo plano e o log será impresso diretamente no terminal quando montado em primeiro plano ou outros comandos de primeiro plano

O arquivo de log padrão em sistemas Mac é/Users/$User/.juicefs/juicefs.log

O arquivo de log padrão em um sistema Linux é/var/log/juicefs.log

15. Por que não consigo ver o arquivo original armazenado no JuiceFS no armazenamento de objetos

Usando o JuiceFS, os arquivos serão eventualmente divididos em pedaços, fatias e blocos e armazenados no armazenamento de objetos. Portanto, você descobrirá que os arquivos de origem armazenados no JuiceFS não podem ser encontrados no navegador de arquivos da plataforma de armazenamento de objetos. Há apenas um diretório de blocos e vários diretórios e arquivos numerados digitalmente no depósito de armazenamento. Não entre em pânico, este é o segredo do alto desempenho do sistema de arquivos JuiceFS! Veja como JuiceFS armazena arquivos para detalhes .

16. Qual é o princípio básico da escrita aleatória JuiceFS

O JuiceFS não armazena o arquivo original no armazenamento de objetos, mas o divide em N blocos de dados (Blocos) de acordo com um determinado tamanho (4MiB por padrão), carrega-os no armazenamento de objetos e, em seguida, armazena o ID do bloco de dados em o mecanismo de metadados. Ao escrever aleatoriamente, a lógica é substituir o conteúdo original. Na verdade, os metadados do bloco de dados a serem substituídos são marcados como dados antigos. Ao mesmo tempo, apenas o novo bloco de dados gerado durante a gravação aleatória é carregado no objeto armazenamento e os novos dados Os metadados correspondentes ao bloco são atualizados no mecanismo de metadados.

Ao ler os dados da parte substituída, de acordo com os metadados mais recentes , eles podem ser lidos do novo bloco de dados carregado durante a gravação aleatória , e o bloco de dados antigo pode ser limpo automaticamente pela tarefa de coleta de lixo em execução em segundo plano. Isso transfere a complexidade das gravações aleatórias para a complexidade das leituras.

Esta é apenas uma introdução aproximada à lógica de implementação. O processo específico de leitura e gravação é muito complicado. Você pode estudar os dois documentos da implementação interna do JuiceFS e o processo de leitura e gravação e combiná-los com o código.

17. Por que excluo arquivos no ponto de montagem, mas a pegada de armazenamento do objeto não muda ou muda muito pouco

A primeira razão é que você pode ter ativado o recurso Lixeira. Para garantir a segurança dos dados, a Lixeira é ativada por padrão. Os arquivos excluídos são realmente colocados na Lixeira, mas não excluídos. Portanto, o tamanho do armazenamento de objetos não mudará. O tempo de retenção da lixeira pode ser juicefs formatespecificado ou juicefs configmodificado por . Consulte a documentação da Lixeira para obter mais informações.

A segunda razão é que o JuiceFS exclui os dados no armazenamento de objetos de forma assíncrona, portanto, a mudança de espaço do armazenamento de objetos será mais lenta. Se você precisar limpar imediatamente os dados que precisam ser excluídos no armazenamento de objetos, tente executar o comando juicefs gc .

18. Por que há diferença entre o tamanho exibido pelo ponto de montagem e o espaço ocupado pelo armazenamento do objeto

Da resposta à pergunta "Qual é o princípio de implementação do JuiceFS que suporta a gravação aleatória?" Pode-se inferir que o espaço ocupado pelo armazenamento de objetos é maior ou igual ao tamanho real na maioria dos casos, especialmente quando um grande número de substituições são executados em um curto período de tempo para gerar muitos arquivos. Após fragmentos. Esses fragmentos ainda ocupam o espaço de armazenamento do objeto antes que a mesclagem e a reciclagem sejam acionadas. No entanto, não há necessidade de se preocupar com esses fragmentos ocupando espaço o tempo todo, pois toda vez que um arquivo é lido/gravado, ele verifica e aciona o trabalho de desfragmentação relacionado ao arquivo quando necessário. Além disso, você pode acionar manualmente a mesclagem e a reciclagem por meio juicefs gc —-compact -—deletedo comando .

Além disso, se a função de compactação estiver habilitada no sistema de arquivos JuiceFS (não está habilitada por padrão), os objetos armazenados no armazenamento de objetos podem ser menores que o tamanho real do arquivo (dependendo da taxa de compactação de diferentes tipos de arquivos) .

Se os fatores acima foram descartados, verifique o tipo de armazenamento do objeto de armazenamento que você está usando . O provedor de serviços em nuvem pode definir a unidade mínima de medida para determinados tipos de armazenamento. Por exemplo, a unidade de medida mínima do armazenamento de acesso de baixa frequência do Alibaba Cloud OSS é 64 KB e, se um único arquivo for menor que 64 KB, também será calculado como 64 KB.

19. O gateway JuiceFS S3 oferece suporte a funções avançadas, como gerenciamento multiusuário?

Os gatewaysubcomandos não oferecem suporte a funções como gerenciamento multiusuário e fornecem apenas funções básicas do S3 Gateway. Se você precisar usar esses recursos avançados, consulte nosso repositório , que usa o JuiceFS como uma implementação do back-end do gateway MinIO e oferece suporte à funcionalidade completa do gateway MinIO.

20. Qual é a diferença entre JuiceFS e XXX

Consulte o documento Comparação de tecnologia para obter mais informações.

21. O JuiceFS oferece suporte ao uso de um diretório no armazenamento de objetos como o valor —-bucketda opção

Este recurso não é suportado a partir do JuiceFS 1.0.0-rc3.

22. O JuiceFS oferece suporte à leitura de dados existentes no armazenamento de objetos?

Este recurso não é suportado a partir do JuiceFS 1.0.0-rc3.

23. O JuiceFS atualmente suporta cache distribuído?

Este recurso não é suportado a partir do JuiceFS 1.0.0-rc3

24. Existe um SDK disponível para o JuiceFS?

A partir do lançamento do JuiceFS 1.0.0-rc3, a comunidade tem dois SDKs, um é o Java SDK mantido oficialmente pela Juicedata e a interface HDFS é altamente compatível , e o outro é o Python SDK mantido pelos usuários da comunidade .

Se você for útil, preste atenção ao nosso projeto  Juicedata/JuiceFS  ! (0ᴗ0✿)

{{o.name}}
{{m.name}}

Acho que você gosta

Origin my.oschina.net/u/5389802/blog/5561502
Recomendado
Clasificación