JuiceFS es un producto de software innovador. Muchos amigos que lo prueban por primera vez sienten muchas dudas sobre el producto y su uso, por lo que para ayudarlo a comprender rápidamente y comenzar a usar JuiceFS, hemos recopilado 24 respuestas a preguntas clásicas. sobre JuiceFS. Creo que después de estas 24 preguntas, todos tendrán una comprensión más clara de JuiceFS, y será más conveniente de usar.
1. ¿Cuáles son las capacidades básicas de JuiceFS?
JuiceFS es un sistema de archivos compartidos de alto rendimiento diseñado para la nube nativa, lanzado bajo el acuerdo de código abierto Apache 2.0. Brinda compatibilidad completa con POSIX y puede conectar casi todo el almacenamiento de objetos localmente como un disco local masivo, y también puede montar y leer en diferentes hosts a través de plataformas y regiones al mismo tiempo.
2. ¿Cómo funciona JuiceFS?
JuiceFS es un sistema de archivos distribuido. La latencia del acceso a los metadatos depende de 1 a 2 viajes de ida y vuelta de la red (normalmente de 1 a 3 ms) entre el punto de montaje y el servidor. La latencia del acceso a los datos depende de la latencia del almacenamiento de objetos. (normalmente 20-100ms). El rendimiento de lectura y escritura secuencial puede alcanzar de 50 MiB/s a 2800 MiB/s (consulte los resultados de la prueba fio ), según el ancho de banda de la red y si los datos son fáciles de comprimir.
JuiceFS tiene un caché multinivel incorporado (invalidación activa). Una vez que el caché se calienta, la latencia de acceso y el rendimiento son muy similares al rendimiento de un sistema de archivos independiente (FUSE generará una pequeña cantidad de sobrecarga) .
3. Condiciones necesarias para el funcionamiento de JuiceFS
Antes de ejecutarse, es necesario preparar el motor de metadatos y el almacenamiento de objetos. El motor de metadatos almacena metadatos como el nombre, el tamaño y la hora de modificación del archivo, mientras que el almacenamiento de objetos almacena el contenido del archivo.
El motor de metadatos actualmente es compatible con: Redis, TiKV, MySQL, PostgreSQL, etc. Para obtener la lista actual de soporte del motor de metadatos y la configuración específica, consulte Cómo configurar el documento del motor de metadatos
El almacenamiento de objetos admite más, y básicamente se admite el almacenamiento de objetos comunes, como AWS S3, Alibaba Cloud OSS, Huawei Cloud OBS, Tencent Cloud COS, etc. Además, para facilitar las pruebas, los discos locales también son especialmente compatibles como almacenamiento de objetos. . La lista actual de soporte de almacenamiento de objetos y la configuración específica se refieren a cómo configurar la documentación de almacenamiento de objetos
4. Pasos para usar JuiceFS
Los pasos para usar son muy simples, hay dos pasos, el primer paso es formatear y el segundo paso es montarlo localmente. El siguiente es un ejemplo del uso de JuiceFS y Redis para montar el OSS de Alibaba Cloud 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. La forma más rápida de experimentar JuiceFS
No tengo Redis ni almacenamiento de objetos localmente, ¿puedo experimentar JuiceFS? Por supuesto, es posible abrir el servicio JuiceFS. El motor de metadatos y el almacenamiento de objetos son dos componentes, pero podemos usar el más simple de estos dos componentes. Por ejemplo, el motor de metadatos usa la base de datos incrustada de SQLite, mientras que el almacenamiento de objetos usa el disco local (formato) Cuando —bucket
el parámetro no está lleno, es el parámetro predeterminado. El valor predeterminado es usar el disco local como almacenamiento de objetos. La ruta de almacenamiento predeterminada para usuarios root es /var/jfs
y la ruta de almacenamiento predeterminada para usuarios normales es ~/.juicefs/local
). De esta manera, puede experimentar los productos de JuiceFS sin ningún componente externo solo con los binarios de JuiceFS.
# 1. 使用 sqlite 作为元数据引擎格式化文件系统
juicefs format "sqlite3://my-jfs.db" test1
# 2. 后台挂载文件系统到 /tmp/jfs 目录
juicefs mount -d sqlite3://my-jfs.db /tmp/jfs
6. ¿Puedo montarlo con un usuario root
que no sea ?
Sí, cualquier usuario puede montar JuiceFS. El directorio de caché predeterminado es $HOME/.juicefs/cache
(macOS) o /var/jfsCache
(Linux), asegúrese de que el usuario tenga permiso de escritura en este directorio o cambie a otro directorio con permiso. Consulte "Almacenamiento en caché de lectura del cliente" para obtener más información.
7. ¿Qué tan compatible es JuiceFS con el protocolo POSIX?
JuiceFS usa Pjdfstest y LTP para verificar su compatibilidad con POSIX. El resultado final de la prueba es que ha superado todos los casos de prueba en pjdfstest y la mayoría de los casos de uso en LTP.
8. ¿Qué métodos admite JuiceFS para acceder a los datos además del montaje normal?
Además del montaje ordinario, también se admiten los siguientes métodos:
- Controlador CSI de Kuberenetes: use JuiceFS como la capa de almacenamiento del clúster de Kubernetes a través del controlador CSI de Kubernetes. Para obtener más información, consulte "Kubernetes usa JuiceFS" .
- Hadoop Java SDK: Es conveniente utilizar un cliente Java compatible con la interfaz HDFS para acceder a JuiceFS en el sistema Hadoop. Para obtener más información, consulte "Hadoop usando JuiceFS" .
- S3 Gateway: Acceda a JuiceFS a través del protocolo S3, consulte "Configurar JuiceFS S3 Gateway" para obtener más información .
- Complemento de volumen de Docker: es conveniente usar JuiceFS en Docker. Para obtener más detalles, consulte "Docker usa JuiceFS" .
- Puerta de enlace WebDAV: acceda a JuiceFS a través del protocolo WebDAV
9. ¿Redis en Sentinel o en modo de clúster es compatible con el motor de metadatos de JuiceFS?
Soporte, y aquí hay un artículo de mejores prácticas sobre Redis como el motor de metadatos de JuiceFS como referencia.
10. Cómo probar el rendimiento de JuiceFS
Después de montar JuiceFS en un directorio local, ejecute el comando de banco de JuiceFS en este directorio. El comando de banco de JuiceFS realizará pruebas de lectura y escritura de archivos grandes y pequeños en este directorio. Por ejemplo:
# /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 bench
El comando también se puede usar como una prueba simple después del montaje para juzgar rápidamente si el servicio de JuiceFS es normal. Si tiene más preguntas sobre las pruebas de rendimiento de JuiceFS, consulte este documento de guía de evaluación del rendimiento.
11. Cómo probar la compatibilidad y el rendimiento del almacenamiento de objetos
El almacenamiento de objetos es un componente importante de JuiceFS. La corrección y el rendimiento del almacenamiento de objetos afectan directamente la corrección y el rendimiento de los servicios de JuiceFS. Por lo tanto, cuando JuiceFS tiene problemas, puede intentar descartar la posibilidad de problemas de almacenamiento de objetos. Para facilitar las pruebas, tenemos comandos integrados juicefs objbench
que pueden probar rápidamente la corrección y el rendimiento del almacenamiento de objetos. Ejemplo:
$ 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. La desinstalación del punto de montaje informa Resource busy -- try 'diskutil unmount'
un error
Esto significa que se está utilizando un determinado archivo o directorio bajo el punto de montaje. No se puede umount
comprobar directamente (por ejemplo, mediante lsof
el comando ) si hay un terminal abierto ubicado en un determinado directorio del punto de montaje de JuiceFS o si se está procesando una aplicación. los archivos de punto de montaje en el punto de carga. Si es así, salga de la terminal o la aplicación antes de intentar desmontar el sistema de archivos con juicefs umount
el comando .
13. Cómo destruir un sistema de archivos
Use juicefs destroy
el comando para destruir un sistema de archivos, este comando borrará los datos relevantes en el motor de metadatos y el almacenamiento de objetos. Para obtener detalles sobre el uso de este comando, consulte la documentación .
14. ¿Dónde está el registro de JuiceFS?
El registro se escribirá en el archivo de registro cuando JuiceFS se monte en segundo plano, y el registro se imprimirá directamente en el terminal cuando se monte en primer plano u otros comandos en primer plano.
El archivo de registro predeterminado en los sistemas Mac es/Users/$User/.juicefs/juicefs.log
El archivo de registro predeterminado en un sistema Linux es/var/log/juicefs.log
15. ¿Por qué no puedo ver el archivo original almacenado en JuiceFS en el almacenamiento de objetos?
Con JuiceFS, los archivos eventualmente se dividirán en trozos, secciones y bloques y se almacenarán en el almacenamiento de objetos. Por lo tanto, encontrará que los archivos de origen almacenados en JuiceFS no se pueden encontrar en el explorador de archivos de la plataforma de almacenamiento de objetos. Solo hay un directorio de fragmentos y un montón de directorios y archivos numerados digitalmente en el depósito de almacenamiento. ¡No se asuste, este es el secreto del alto rendimiento del sistema de archivos JuiceFS! Vea cómo JuiceFS almacena archivos para más detalles .
16. ¿Cuál es el principio básico de la escritura aleatoria de JuiceFS?
JuiceFS no almacena el archivo original en el almacenamiento de objetos, sino que lo divide en N bloques de datos (Bloques) de acuerdo con un cierto tamaño (4MiB por defecto), los carga en el almacenamiento de objetos y luego almacena la ID del bloque de datos en el motor de metadatos. Cuando se escribe aleatoriamente, la lógica es sobrescribir el contenido original. De hecho, los metadatos del bloque de datos que se sobrescribirán se marcan como datos antiguos. Al mismo tiempo, solo se carga en el objeto el nuevo bloque de datos generado durante la escritura aleatoria. almacenamiento y los nuevos datos Los metadatos correspondientes al bloque se actualizan en el motor de metadatos.
Al leer los datos de la parte sobrescrita, de acuerdo con los últimos metadatos , se pueden leer desde el nuevo bloque de datos cargado durante la escritura aleatoria , y la tarea de recolección de basura que se ejecuta en segundo plano puede limpiar automáticamente el bloque de datos anterior . Esto transfiere la complejidad de las escrituras aleatorias a la complejidad de las lecturas.
Esta es solo una introducción aproximada a la lógica de implementación. El proceso específico de lectura y escritura es muy complicado. Puede estudiar los dos documentos de implementación interna de JuiceFS y el proceso de lectura y escritura y combinarlos con el código.
17. ¿Por qué elimino archivos en el punto de montaje, pero el espacio de almacenamiento de objetos no cambia o cambia muy poco?
La primera razón es que puede haber habilitado la función Papelera de reciclaje. Para garantizar la seguridad de los datos, la Papelera de reciclaje está habilitada de forma predeterminada. Los archivos eliminados se colocan en la Papelera de reciclaje, pero no se eliminan. Por lo tanto, el tamaño del almacenamiento de objetos no cambiará. El tiempo de retención de la papelera de reciclaje se puede juicefs format
especificar o juicefs config
modificar mediante . Consulte la documentación de la papelera de reciclaje para obtener más información.
La segunda razón es que JuiceFS elimina los datos en el almacenamiento de objetos de forma asincrónica, por lo que el cambio de espacio del almacenamiento de objetos será más lento. Si necesita limpiar de inmediato los datos que deben eliminarse en el almacenamiento de objetos, puede intentar ejecutar el comando juicefs gc .
18. ¿Por qué hay una diferencia entre el tamaño que muestra el punto de montaje y el espacio que ocupa el almacenamiento de objetos?
De la respuesta a la pregunta "¿Cuál es el principio de implementación de JuiceFS que admite la escritura aleatoria?" Se puede inferir que el espacio ocupado por el almacenamiento de objetos es mayor o igual que el tamaño real en la mayoría de los casos, especialmente cuando se sobrescribe una gran cantidad se realizan en un corto periodo de tiempo para generar muchos archivos .después fragmentos. Estos fragmentos aún ocupan el espacio de almacenamiento de objetos antes de que se activen la fusión y el reciclaje. Sin embargo, no hay necesidad de preocuparse de que estos fragmentos ocupen espacio todo el tiempo, porque cada vez que se lee/escribe un archivo, comprobará y activará el trabajo de desfragmentación relacionado con el archivo cuando sea necesario. Además, puede activar manualmente la combinación y el reciclaje mediante juicefs gc —-compact -—delete
el comando .
Además, si la función de compresión está habilitada en el sistema de archivos de JuiceFS (no está habilitada de forma predeterminada), los objetos almacenados en el almacenamiento de objetos pueden ser más pequeños que el tamaño real del archivo (dependiendo de la relación de compresión de los diferentes tipos de archivos) .
Si se han descartado los factores anteriores, verifique el tipo de almacenamiento del almacenamiento de objetos que está utilizando . El proveedor de servicios en la nube puede establecer la unidad de medida mínima para ciertos tipos de almacenamiento. Por ejemplo, la unidad de medida mínima del almacenamiento de acceso de baja frecuencia de Alibaba Cloud OSS es de 64 KB, y si un solo archivo tiene menos de 64 KB, también se calculará como 64 KB.
19. ¿La puerta de enlace JuiceFS S3 admite funciones avanzadas como la administración de múltiples usuarios?
Los gateway
subcomandos no admiten funciones como la gestión multiusuario y solo proporcionan funciones básicas de S3 Gateway. Si necesita usar estas funciones avanzadas, puede consultar nuestro repositorio , que usa JuiceFS como una implementación del backend de la puerta de enlace MinIO y es compatible con la funcionalidad completa de la puerta de enlace MinIO.
20. ¿Cuál es la diferencia entre JuiceFS y XXX?
Consulte el documento Comparación de tecnologías para obtener más información.
21. ¿JuiceFS admite el uso de un directorio en el almacenamiento de objetos como el valor de —-bucket
la opción?
Esta función no es compatible a partir de JuiceFS 1.0.0-rc3.
22. ¿JuiceFS admite la lectura de datos existentes en el almacenamiento de objetos?
Esta función no es compatible a partir de JuiceFS 1.0.0-rc3.
23. ¿JuiceFS admite actualmente el almacenamiento en caché distribuido?
Esta función no es compatible a partir de JuiceFS 1.0.0-rc3
24. ¿Hay un SDK disponible para JuiceFS?
A partir del lanzamiento de JuiceFS 1.0.0-rc3, la comunidad tiene dos SDK, uno es el SDK de Java mantenido oficialmente por Juicedata y la interfaz HDFS es altamente compatible , y el otro es el SDK de Python mantenido por los usuarios de la comunidad .
Si es de ayuda, preste atención a nuestro proyecto Juicedata/JuiceFS . (0ᴗ0✿)