Premier Training & Business Partner Red Hat

Conoscere tutte le Best practice per usare GlusterFs al meglio

Gaetano La Rosa
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

Quando si parla di Software Defined Storage ci viene chiesto spesso come ottimizzare la gestione e le performance delle nostre soluzioni.

Quella che viene usata spesso in contesti di gestione di grande mole di documentazione composta da piccoli file è certamente la soluzione GlusterFS. Ed è qui che entriamo in gioco con le nostre attività di tuning.

Ecco un elenco completo delle migliori pratiche che negli anni abbiamo trovato ed usato nei documenti ufficiali di RHGS 3.4 e in vari altri documenti di interni per una rapida consultazione. Queste Best Practice vengono fornite come punto di partenza, setup iniziale. Si consiglia vivamente di eseguire test aggiuntivi con un assessment approfondito in quanto alcuni parametri di ottimizzazione sono specifici per carico di lavoro.

Disk Configuration

Hardware RAID

I livelli RAID più comunemente consigliati sono RAID 6 e RAID 10. RAID 6 offre una migliore efficienza dello spazio, buone prestazioni di lettura e buone prestazioni per scritture sequenziali su file di grandi dimensioni.

Se configurato su 12 dischi, RAID 6 può fornire circa il 40% in più di spazio di archiviazione rispetto a RAID 10, con una riduzione della capacità del 50%. Tuttavia, le prestazioni RAID 6 per le scritture di piccoli file e le scritture casuali tendono ad essere inferiori rispetto a RAID 10.

Se il carico di lavoro è costituito da file di dimensioni ridotte, RAID 10 è la configurazione ottimale.


Un parametro importante nella configurazione RAID dell’hardware è la dimensione dell’unità stripe. Con i dischi thin provisioning, la scelta della dimensione dell’unità stripe RAID è strettamente correlata alla scelta della dimensione del blocco thin provisioning.

Per RAID 10, si consiglia una dimensione dell’unità di striping di 256 KiB. Per RAID 6, è necessario scegliere la dimensione dell’unità di striping in modo tale che la dimensione di striping completa (unità di striping * numero di dischi dati) sia compresa tra 1 MiB e 2 MiB, preferibilmente in l’estremità inferiore dell’intervallo. I controller RAID hardware in genere consentono dimensioni dell’unità stripe con una potenza di 2. Per RAID 6 con 12 dischi (10 dischi dati), la dimensione dell’unità stripe consigliata è 128 KiB.

JBOD – Just a Bunch of Disks

Nella configurazione JBOD, i dischi fisici non sono aggregati in dispositivi RAID, ma sono visibili come dischi separati al sistema operativo. Ciò semplifica la configurazione del sistema non richiedendo un controller RAID hardware.

Se i dischi sul sistema sono collegati tramite un controller RAID hardware, consultare la documentazione del controller RAID su come creare una configurazione JBOD; in genere, JBOD è realizzato esponendo dischi raw al sistema operativo usando la modalità pass-through.

Nella configurazione JBOD, un singolo disco fisico funge da memoria per un brick Gluster Storage.

Le configurazioni JBOD supportano fino a 36 dischi per nodo, con volumi spare e replica a tre vie.


Brick and XFS Recommendations

ParameterRAID6 (12 disks)RAID10 (12 disks)JBOD
Physical VolumeData Alignment1280 KiB*1536 KiB*256 KiB
Volume GroupPhysical Extents1280 KiB*1536 KiB*N/A
Logical VolumeChunk Size1280 KiB256 KiB256 KiB
Pool Metadata Size16 GiB16 GiB16 GiB
XFSStripe Unit128 KiB256 KiBN/A
Stripe Width106N/A
Inode Size512512512

*The data alignment and physical extends dovrebbe essere ottenuto moltiplicando la dimensione dell’unità stripe RAID per il numero di dischi dati. Se si utilizzano 12 dischi in una configurazione RAID 6, il numero di dischi dati è 10; d’altra parte, se 12 dischi sono utilizzati in una configurazione RAID 10, il numero di dischi di dati è 6.

Logical Block Size for the Directory

Il nostro file system preferito, XFS consente di selezionare una dimensione del blocco logico per la directory del file system maggiore della dimensione del blocco logico del file system. Aumentando la dimensione del blocco logico per le directory dal 4K predefinito, diminuisce l’I/O della directory, che a sua volta migliora le prestazioni delle operazioni della directory.

Allocation Strategy

inode32 and inode64 sono le due strategie di allocazione più comuni per XFS. Con la strategia di allocazione inode32, XFS inserisce tutti gli inode nel primo 1 TiB del disco. Con un disco più grande, tutti gli inode sarebbero bloccati nel primo 1 TiB. La strategia di allocazione inode32 è utilizzata per impostazione predefinita. Con l’opzione di montaggio inode64 gli inode verrebbero posizionati vicino ai dati, il che dovrebbe minimizzare le ricerche del disco.

Access Time

Sempre verde: se l’applicazione non richiede l’aggiornamento dell’access-time ai file, è necessario montare sempre il file system noatime:

# mount -t xfs -o inode64,noatime <logical volume> <mount point>

Questa ottimizzazione migliora le prestazioni delle letture di file di piccole dimensioni evitando gli aggiornamenti agli inode XFS durante la lettura dei file.

Percentage of Space Allocation to inodes

Se il carico di lavoro è costituito da file molto piccoli (la dimensione media del file è inferiore a 10 KB), si consiglia di impostare il valore maxpct su 10, durante la formattazione del file system.

Writeback Caching, Brick Multiplexing and Port Range Configuration

Documentazione: https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.4/html/administration_guide/brick_configuration

Tuned Profile 

Questi sono i profili TuneD ottimizzati per diversi workloads

WorkloadProfile Name

Large-file, sequential I/O workloads

rhgs-sequential-io
Small-file workloadsrhgs-random-io
Random I/O workloadsrhgs-random-io

Virtual Memory Parameters

Documentazione: https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.4/html/administration_guide/sect-memory#chap-Configuring_Red_Hat_Storage_for_Enhancing_Performance-Virtual_Memory_Parameters_1

Network

Documentazione: https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.4/html/administration_guide/network4

Configuring Threads for Event Processing and Enabling Lookup Optimization

  • Configuring Threads for Event Processing
    • client.event-thread configuration which tunes client event threads accessing a volume
    • server.event-thread configuration which tunes server event threads accessing a volume
    • server.outstanding-rpc-limit configuration which queue the requests for brick processes
    • performance.io-thread-count configuration which performs the actual IO operations
  • Enabling Lookup Optimization
    • cluster.lookup-optimize configuration option enables DHT lookup optimization

Documentazione: https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.4/html/administration_guide/small_file_performance_enhancements

Directory Operations

  • Enabling metadata-cache group which improves performance of directory operations
  • Enhancing directory listing performance by enabling prefetching directories
    • performance.readdir-ahead
    • performance.parallel-readdir
  • Enhancing file/directory create performance by enabling negative lookup cache
    • nl-cache group which enables serving file creation/renaming lookups from cache when possible
    • The above group when enabled also enables cache-invalidation and increases the timeout to 10 minutes

Documentazione: https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.4/html/administration_guide/sect-directory_operations

Enable io-cache

  • Enables and sets the file size cached by the io-cache translator
    • performance.io-cache
    • performance.cache-size

Small File Performance Enhancements

I seguenti parametri possono essere utilizzati per l’ottimizzazione delle prestazioni per l’accesso a file di piccole dimensioni. Questi valori sono stati testati per prestazioni di file di piccole dimensioni, tuttavia potrebbe essere necessario fare uno sforzo per testare i valori per le migliori prestazioni.

$ gluster volume set <volname> client.event-threads 4
$ gluster volume set <volname> server.event-threads 4
$ gluster volume set <volname> performance.io-thread-count  64
$ gluster volume set <volname> server.outstanding-rpc-limit: 128
$ gluster volume set <volname> cluster.lookup-optimize ontuned-adm profile rhgs-random-io

LVM Cache

Documentazione: https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.4/html/administration_guide/sect-lvm_cache

RHGS Web Administration

Red Hat Gluster Storage Web Administration fornisce un ottimo monitoraggio visivo su infrastruttura e metriche per Red Hat Gluster Storage 3.4 ed è il metodo principale per monitorare l’ambiente il nostro Gluster Storage.

La Red Hat Gluster Storage Web Administration si basa sul progetto upstream Tendrl e utilizza Ansible automation per l’installazione. L’obiettivo principale di Red Hat Gluster Storage Web Administration è fornire metriche e visualizzazioni approfondite dei cluster Red Hat Storage Gluster e dei relativi elementi di archiviazione fisica come nodi, volumi e bricks di archiviazione.

Key features

  • Monitoring dashboards for Clusters, Hosts, Volumes, and Bricks
  • Top-level list views of Clusters, Hosts, and Volumes
  • SNMPv3 Configuration and alerting
  • User Management
  • Importing Gluster cluster

For more info: https://access.redhat.com/documentation/en-us/red_hat_gluster_storage/3.4/html/monitoring_guide/overview

Complete Tuning Parameters

I seguenti parametri possono essere utilizzati per l’ottimizzazione delle prestazioni del nostro GlusterFS. Per i parametri del kernel e della rete, è possibile impostare questi valori in /etc/sysctl.conf ed eseguiti ‘sysctl -p’come root, tranne per i jumbo frame. Per i parametri Gluster, è necessario utilizzare il comando gluster su un nodo nel pool di archiviazione attendibile. Questi valori non sono sempre adatti a tutti i carichi di lavoro e vengono forniti come riferimento e non come raccomandazione. Testare vari parametri può aiutarti a trovare i valori migliori se questi non sono adeguati.

Note: Per scoprire tutti i parametri possiamo eseguire
$ gluster volume get VOLNAME all

CategoryParameterDefault ValueSetting Value
User Limitsoft memlock64unlimited
User Limithard memlock64unlimited
User Limitsoft nofile1024200000
User Limithard nofile4096200000
User Limitsoft nproc10242047
User Limithard nproc102416384
User Limitsoft nofile10244096
User Limithard nofile409665536
Glustergluster volume set VOLNAME group metadata-cache
Glustergluster volume set VOLNAME group nl-cache
Glustergluster volume set VOLNAME group samba (for samba-ctdb vols)
Glusterfeatures.cache-invalidationoffon
Glusterfeatures.cache-invalidation-timeout60s600s
Glusterperformance.stat-prefetchonon
Glusterperformance.md-cache-timeout1s1s
Glusterperformance.cache-swift-metadatatruetrue
Glusterperformance.cache-samba-metadatafalsefalse
Glusterperformance.force-readdirptruetrue
Glusterperformance.cache-invalidationfalsefalse
Glusterperformance.write-behind-window-size1MB1MB
Glusterperformance.flush-behindonon
Glusterperformance.write-behind-trickling-writesonon
Glusterperformance.strict-write-orderingoffoff
Glusterperformance.strict-o-directoffoff
Glusterperformance.resync-failed-syncs-after-fsyncoffoff
Glusterperformance.readdir-aheadonon
Glusterperformance.rda-request-size128KB128KB
Glusterperformance.rda-cache-limit10MB10MB
Glusterperformance.parallel-readdiroffon
Glusterperformance.nl-cacheoffon
Glusterperformance.nl-cache-positive-entryfalsefalse
Glusterperformance.nl-cache-limit10MB10MB
Glusterperformance.nl-cache-timeout6060
Glusterperformance.quick-readonon
Glusterperformance.io-cacheonon
Glusterperformance.cache-size32MB1GB
Glusterperformance.cache-priority“”“”
Glusterperformance.cache-max-file-size00
Glusterperformance.cache-min-file-size00
Glusterperformance.cache-refresh-timeout10
Glusterperformance.client-io-threadsonon, except for replicated and distributed-replicated volumes
Glustercluster.shd-max-threads11
Glusterdisperse.shd-max-threads11
Glusterperformance.high-prio-threads1616
Glusterperformance.normal-prio-threads1616
Glusterperformance.low-prio-threads1616
Glusterperformance.enable-least-priorityonon
Glusterperformance.least-prio-threads11
Glusterperformance.io-thread-count1664
Glusterperformance.read-ahead-page-count44
Glusterperformance.read-aheadonon
Glusterclient.event-threads24
Glusterserver.event-threads14
Glustercluster.lookup-optimizeonon
Glusterserver.outstanding-rpc-limit64128
Glusternfs.disableoffon
Glusternetwork.ping-timeout4230
Networkjumbo frames15009000
Info about author

Gaetano La Rosa

RHCA Trainer & Solution Architect