Montaggio di un bucket utilizzando s3fs
Le applicazioni che prevedono di leggere e di scrivere in un filesystem in stile NFS possono utilizzare s3fs che può montare un bucket come una directory mentre preserva il formato oggetto nativo per i file.
Ciò ti consente di interagire con la tua archiviazione cloud utilizzando comandi shell familiari, come ls per elencare o cp per copiare i file, come pure fornendo l'accesso alle applicazioni legacy che si basano sulla
lettura e sulla scrittura dai file locali. Per una panoramica più dettagliata, consulta il README ufficiale del progetto.
Cerchi istruzioni su come utilizzare IBM Cloud® Object Storage in un cluster IBM Cloud Kubernetes Service ? Vai invece alla documentazione diIBM Cloud Kubernetes Service.
Prerequisiti
- Un account IBM Cloud e un'istanza di IBM Cloud® Object Storage
- Un ambiente Linux o macOS
- Le credenziali (una chiave API IAM o le credenziali HMAC)
Installazione
Su Debian o Ubuntu:
sudo apt-get install automake autotools-dev fuse g++ git libcurl4-openssl-dev libfuse-dev libssl-dev libxml2-dev make pkg-config
Su RHEL e CentOS 7 o successivo tramite EPEL:
sudo yum install epel-release
sudo yum install s3fs-fuse
Il tuo dispositivo deve avere una connessione pubblica per eseguire il pull di questo repository EPEL, poiché non è disponibile nel repository privato di IBM. Vedi How to install EPEL on RHEL and CentOS Stream per ulteriori informazioni.
La documentazione s3fs ufficiale suggerisce di utilizzare libcurl4-gnutls-dev invece di libcurl4-openssl-dev. Funzionano entrambi, ma la versione OpenSSL può offrire prestazioni migliori.
Per macOS, dovrai creare s3fs dall'origine:
Assicurati di avere i seguenti pacchetti installati (tutti sono disponibili tramite Homebrew):
macfuseautomakegcccurllibxml2pkg-configopenssl
E come indicato nell'output dell'installazione di openssl, dovrai impostare queste variabili di ambiente:
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"
Tieni presente che macFUSE è un software di origine chiusa che contiene un'estensione del kernel e potrebbe richiedere una licenza per uso commerciale.
Innanzitutto, clona il repository Github:
git clone https://github.com/s3fs-fuse/s3fs-fuse.git
Quindi crea s3fs:
cd s3fs-fuse
./autogen.sh
./configure
make
E installa il file binario:
sudo make install
Configurazione
Memorizzare le credenziali in un file contenente <access_key>:<secret_key> o :<api_key>. Questo file deve avere accesso limitato, quindi esegui:
chmod 0600 <credentials_file>
Ora puoi montare un bucket utilizzando:
s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file>
Se il file delle credenziali ha solo una chiave API (nessuna credenziale HMAC), dovrai aggiungere anche l'indicatore ibm_iam_auth:
s3fs <bucket> <mountpoint> -o url=http{s}://<endpoint> -o passwd_file=<credentials_file> -o ibm_iam_auth
Il <bucket> nell'esempio fa riferimento a un bucket esistente e il <mountpoint> è il percorso locale in cui vuoi montare il bucket. Il <endpoint> deve corrispondere all'ubicazione del bucket.
credentials_file è il file creato con la chiave API o le credenziali HMAC.
Ora, ls <mountpoint> elencherà gli oggetti in tale bucket come se fossero file locali (o nel caso di prefissi di oggetti, come se fossero directory nidificate).
Ottimizzazione delle prestazioni
Poiché le prestazioni non saranno mai uguali a quelle di un vero filesystem locale, è possibile utilizzare alcune delle opzioni avanzate per aumentare la velocità effettiva.
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è rilevante solo quando utilizzi un endpoint HTTPS. Per impostazione predefinita, le connessioni sicure a IBM COS utilizzano la suite di cifraturaAES256-SHA. L'utilizzo di una suiteAESGCM, invece, riduce notevolmente il carico della CPU sulla macchina client, causato dalle funzioni di crittografia TLS, offrendo lo stesso livello di sicurezza crittografica.kernel_cacheabilita la cache del buffer del kernel sul tuo punto di montaggios3fs mountpoint. Ciò significa che gli oggetti verranno letti solo una volta das3fs, poiché la lettura ripetitiva dello stesso file può essere fornita dalla cache del buffer del kernel. La cache del buffer del kernel utilizzerà solo la memoria libera non utilizzata da altri processi. Questa opzione è sconsigliata se prevedi che gli oggetti bucket vengano sovrascritti da un altro processo o da un'altra macchina mentre il bucket viene montato e il tuo caso di utilizzo richiede un accesso attivo al contenuto più recente.max_background=1000migliora le prestazioni della lettura simultanea del files3fs. Per impostazione predefinita, FUSE supporta le richieste di lettura fino a 128 KB. Quando viene richiesta la lettura di dimensioni maggiori, il kernel suddivide la richiesta di grandi dimensioni in sottorichieste più piccole e consente a s3fs di elaborarle in modo asincrono. L'opzionemax_backgroundimposta il numero massimo globale di tali richieste asincrone simultanee. Per impostazione predefinita, è impostato su 12, ma impostandolo su un valore alto arbitrario (1000) impedisce il blocco delle richieste di lettura, anche quando si leggono più file contemporaneamente.max_stat_cache_size=100000riduce il numero di richiesteHEADHTTP ridondanti inviate das3fse riduce il tempo impiegato per elencare una directory o richiamare gli attributi del file. L'utilizzo normale del file system rende frequente l'accesso ai metadati di un file tramite una chiamatastat()che viene associata alla richiestaHEADsul sistema dell'archiviazione oggetti. Per impostazione predefinita,s3fsmemorizza nella cache gli attributi (metadati) di massimo 1000 oggetti. Ogni voce memorizzata nella cache occupa fino a 0,5 KB di memoria. Idealmente, si desidera che la cache sia in grado di contenere i metadati per tutti gli oggetti nel bucket. Tuttavia, puoi voler considerare le implicazioni sull'utilizzo della memoria di questa memorizzazione in cache. Se lo imposti su100000, non occuperà più di 0,5 KB * 100000 = 50 MB.multipart_size=52imposterà la dimensione massima delle richieste e delle risposte inviate e ricevute dal server COS, in scala MB.s3fsimposta questo valore su 10 MB per impostazione predefinita. L'aumento di questo valore aumenta anche la velocità effettiva (MB/s) per connessione HTTP. D'altra parte, anche la latenza per il primo byte servito dal file aumenterà. Pertanto, se il tuo caso di utilizzo legge solo una piccola quantità di dati da ciascun file, probabilmente non vuoi aumentare questo valore. Inoltre, per gli oggetti di grandi dimensioni (diciamo più di 50 MB), la velocità effettiva aumenta se questo valore è sufficientemente piccolo da consentire simultaneamente il recupero del file utilizzando più richieste. Ritengo che il valore ottimale per questa opzione sia di circa 50 MB. Le procedure consigliate di COS suggeriscono di utilizzare richieste che siano multipli di 4 MB, quindi il consiglio è quello di impostare questa opzione su 52 (MB).parallel_count=30imposta il numero massimo di richieste inviate simultaneamente a COS, per singola operazione di lettura/scrittura file. Per impostazione predefinita, è impostato su 5. Per gli oggetti molto grandi, è possibile ottenere una maggiore velocità di trasmissione aumentando questo valore. Analogamente alla precedente opzione, mantieni basso questo valore se leggi solo una piccola quantità di dati di ciascun file.multireq_max=30quando elenchi una directory, viene inviata una richiesta di metadati dell'oggetto (HEAD) per ciascun oggetto nell'elenco (a meno che i metadati non si trovino nella cache). Questa opzione limita il numero di richieste simultanee di questo tipo inviate a COS, per una singola operazione di elenco della directory. Per impostazione predefinita, è impostato su 20. Tieni presente che questo valore deve essere maggiore o uguale all'opzioneparallel_countsopra citata.dbglevel=warnimposta il livello di debug suwarninvece del valore predefinito (crit) per registrare i messaggi in /var/log/syslog.
Limitazioni
È importante ricordare che s3fs potrebbe non essere adatto a tutte le applicazioni poiché i servizi Object Storage hanno una latenza elevata per TTFB (time to first byte) e per la mancanza di accesso casuale in scrittura. I carichi di lavoro
che leggono solo file di grandi dimensioni, ad esempio i carichi di lavoro di apprendimento approfondito, possono raggiungere una buona velocità effettiva utilizzando s3fs.