Montaje de un grupo utilizando s3fs
Las aplicaciones que esperan leer y escribir en un sistema de archivos de estilo NFS pueden utilizar s3fs
, que puede montar un grupo como directorio, conservando el formato de objeto nativo para los archivos.
Esto le permite interactuar con el almacenamiento de la nube utilizando mandatos de shell conocidos, como ls
para obtener una lista o cp
para copiar archivos, así como proporcionar acceso a aplicaciones antiguas que se
basan en la lectura y escritura de archivos locales. Para obtener una visión general más detallada, consulte el archivo README oficial del proyecto.
¿Está buscando instrucciones sobre cómo utilizar IBM Cloud® Object Storage en un clúster IBM Cloud Kubernetes Service ? En su lugar, vaya a la documentación deIBM Cloud Kubernetes Service.
Requisitos previos
- Cuenta de IBM Cloud y una instancia de IBM Cloud® Object Storage
- Un entorno Linux o macOS
- Credenciales (una clave de API de IAM o credenciales de HMAC)
Instalación
En Debian o en Ubuntu:
sudo apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
En RHEL y CentOS 7 o posterior mediante EPEL:
sudo yum install epel-release
sudo yum install s3fs-fuse
El dispositivo debe tener una conexión pública para extraer este repositorio EPEL, ya que no está disponible en el repositorio privado de IBM. Consulte Cómo instalar EPEL en RHEL y CentOS Stream para obtener más información.
En la documentación oficial de s3fs
se recomienda utilizar libcurl4-gnutls-dev
en lugar de libcurl4-openssl-dev
. Cualquiera de los dos funciona, pero la versión OpenSSL puede ofrecer un mejor resultado.
Para macOS, tendrá que compilar s3fs
desde el origen:
Asegúrese de que tiene instalados los paquetes siguientes (todos están disponibles a través de Homebrew):
macfuse
automake
gcc
curl
libxml2
pkg-config
openssl
Y como se indica en la salida de la instalación de openssl
, tendrá que establecer estas variables de entorno:
export LDFLAGS="-L/usr/local/opt/openssl@3/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@3/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@3/lib/pkgconfig"
Tenga en cuenta que macFUSE es un software de origen cerrado que contiene una extensión de kernel y puede requerir una licencia para uso comercial.
Primero clone el repositorio Github:
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
Luego cree s3fs
:
cd s3fs-fuse
./autogen.sh
./configure
make
E instale el binario:
sudo make install
Configuración
Almacene sus credenciales en un archivo que contenga <access_key>:<secret_key>
o :<api_key>
. Este archivo debe tener acceso limitado, de modo que ejecute:
chmod 0600 <credentials_file>
Ahora puede montar un grupo con:
s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file>
Si el archivo de credenciales solo tiene una clave de API (no tiene credenciales HMAC), también tendrá que añadir el distintivo ibm_iam_auth
:
s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file> -o ibm_iam_auth
<bucket>
en el ejemplo hace referencia a un grupo existente y <mountpoint>
es la vía de acceso local donde desea montar el grupo. El <endpoint>
debe corresponder al ubicación del grupo.
credentials_file
es el archivo que se ha creado con la clave de API o con las credenciales HMAC.
Ahora, ls <mountpoint>
listará los objetos de ese grupo como si fueran archivos locales (o en el caso de prefijos de objeto, como si fueran directorios anidados).
Optimización del rendimiento
Aunque el rendimiento nunca será el mismo que el de un verdadero sistema de archivos local, se pueden utilizar algunas opciones avanzadas para aumentar el rendimiento.
s3fs <bucket_name> <mountpoint> -o url=http{s}://<COS_endpoint> –o passwd_file=<credentials_file> \
-o cipher_suites=AESGCM \
-o kernel_cache \
-o max_background=1000 \
-o max_stat_cache_size=100000 \
-o multipart_size=52 \
-o parallel_count=30 \
-o multireq_max=30 \
-o dbglevel=warn
cipher_suites=AESGCM
solo resulta relevante cuando se utiliza un punto final HTTPS. De forma predeterminada, las conexiones seguras con IBM COS utilizan la suite de cifradoAES256-SHA
. En su lugar, el uso de una suite deAESGCM
reduce en gran medida la carga de CPU en la máquina cliente, provocada por las funciones criptográficas TLS, al tiempo que ofrece el mismo nivel de seguridad criptográfica.kernel_cache
habilita la memoria caché del almacenamiento intermedio del kernel en el punto de montajes3fs mountpoint
. Esto significa ques3fs
solo leerá los objetos una vez, ya que la lectura repetitiva del mismo archivo se puede obtener de la memoria caché de almacenamiento intermedio del kernel. La memoria caché de almacenamiento intermedio del kernel solo utilizará memoria libre que no utilicen otros procesos. No se recomienda esta opción si espera que los objetos del grupo se sobrescriban desde otro proceso u otra máquina mientras se monta el grupo y si su caso de uso requiere acceso directo al contenido más actualizado.max_background=1000
mejora el rendimiento de lectura de archivos simultáneos des3fs
. De forma predeterminada, FUSE da soporte a solicitudes de lectura de archivos de hasta 128 KB. Cuando se solicita leer más que eso, el kernel divide la solicitud grande en subsolicitudes menores y deja que s3fs las procesen de forma asíncrona. La opciónmax_background
establece el número máximo global de estas solicitudes asíncronas simultáneas. De forma predeterminada, se establece en 12, pero si se establece en un valor alto arbitrario (1000) impide que se bloqueen las solicitudes de lectura, incluso cuando se leen muchos archivos simultáneamente.max_stat_cache_size=100000
reduce el número de solicitudes HTTPHEAD
redundantes que envías3fs
y reduce el tiempo que se tarda en obtener una lista de un directorio o en recuperar atributos de un archivo. En un sistema de archivos se suele acceder con frecuenta a los metadatos de un archivo mediante una llamadastat()
, que se correlaciona con la solicitudHEAD
en el sistema de almacenamiento de objetos. De forma predeterminada,s3fs
almacena en memoria caché los atributos (metadatos) de un máximo de 1000 objetos. Cada entrada almacenada en memoria caché ocupa un máximo de 0,5 KB de memoria. Lo ideal sería que la memoria caché pudiera contener los metadatos de todos los objetos del grupo. Sin embargo, tenga en cuenta las implicaciones en el uso de memoria de esta colocación en memoria caché. Si se establece en100000
, no ocupará más de 0,5 KB * 100000 = 50 MB.multipart_size=52
establecerá el tamaño máximo de las solicitudes y respuestas enviadas y recibidas desde el servidor COS, en escala de MB.s3fs
establece esto en 10 MB de forma predeterminada. Si se aumenta este valor también aumenta el rendimiento (MB/s) por conexión HTTP. Por otro lado, la latencia para el primer byte servido desde el archivo también aumentará. Por lo tanto, si en su caso de uso solo se lee una pequeña cantidad de datos de cada archivo, probablemente no deseará aumentar este valor. Además, para los objetos grandes (digamos de más de 50 MB) el rendimiento aumenta si este valor es lo suficientemente pequeño como para permitir que el archivo se capte simultáneamente mediante varias solicitudes. Probablemente el valor óptimo para esta opción sea uno cercano a 50 MB. En las prácticas recomendadas de COS se recomienda utilizar solicitudes que sean de múltiplos de 4 MB, y por lo tanto la recomendación es establecer esta opción en 52 (MB).parallel_count=30
establece el número máximo de solicitudes enviadas de forma simultánea a COS, por operación de lectura/escritura de archivo individual. De forma predeterminada, se establece en 5. Para objetos muy grandes, puede obtener más rendimiento aumentando este valor. Al igual que sucede con la opción anterior, mantenga este valor bajo si solo lee una pequeña cantidad de datos de cada archivo.multireq_max=30
Cuando se obtiene una lista de un directorio, se envía una solicitud de metadatos de objeto (HEAD
) por cada objeto de la lista (a menos que los metadatos se encuentren en la memoria caché). Esta opción limita el número de solicitudes simultáneas que se envían a COS, para una única operación de listado de directorios. De forma predeterminada, se establece en 20. Tenga en cuenta que este valor debe ser mayor o igual que la opciónparallel_count
anterior.dbglevel=warn
establece el nivel de depuración enwarn
en lugar del valor predeterminado (crit
) para el registro de mensajes en /var/log/syslog.
Limitaciones
Es importante recordar que es posible que s3fs no resulte adecuado para todas las aplicaciones, ya que los servicios de almacenamiento de objetos tienen una latencia alta de tiempo hasta el primer byte y no tienen acceso de escritura aleatorio.
Las cargas de trabajo que solo leen archivos grandes, como las cargas de trabajo de deep learning, pueden conseguir un buen rendimiento con s3fs
.