Ceph

Benchmark Ceph Cluster Performance¶

Una delle domande più comuni che sentiamo è “Come faccio a verificare se il mio cluster è in esecuzione al massimo delle prestazioni?”. Wonder no more – in questa guida, ti guideremo attraverso alcuni strumenti che puoi utilizzare per confrontare il tuo cluster Ceph.

NOTA: Le idee in questo articolo sono basate sul post sul blog di Sebastian Han, sul post sul blog di TelekomCloud e sugli input di sviluppatori e ingegneri Ceph.

Ottieni statistiche sulle prestazioni di base¶

Fondamentalmente, il benchmarking riguarda il confronto. Non saprai se il cluster Ceph sta eseguendo sotto la parità a meno che non identifichi prima quale sia la sua massima prestazione possibile. Quindi, prima di iniziare il benchmarking del cluster, è necessario ottenere statistiche sulle prestazioni di base per i due componenti principali dell’infrastruttura Ceph: i dischi e la rete.

Confronta i tuoi dischi¶

Il modo più semplice per confrontare il tuo disco è con dd. Utilizzare il seguente comando per leggere e scrivere un file, ricordando di aggiungere il parametro oflag per bypassare la cache della pagina del disco:
shell> dd if=/dev/zero of=here bs=1G count=1 oflag=direct

Si noti l’ultima statistica fornita, che indica le prestazioni del disco in MB / sec. Eseguire questo test per ogni disco nel cluster, rilevando i risultati.

Confronta la tua rete¶

Un altro fattore chiave che influenza le prestazioni del cluster Ceph è il throughput di rete. Un buon strumento per questo è iperf, che utilizza una connessione client-server per misurare la larghezza di banda TCP e UDP.

È possibile installare iperf utilizzando apt-get install iperf o yum install iperf.

iperf deve essere installato su almeno due nodi del cluster. Quindi, su uno dei nodi, avviare il iperf server utilizzando il comando riportato di seguito:

shell> iperf -s

Su un altro nodo, avviare il client con il comando seguente, ricordando di utilizzare l’indirizzo IP del nodo che ospita il iperf server:

shell> iperf -c 192.168.1.1

Nota la larghezza di banda di statistica in Mbit/sec, come indica la velocità massima supportata dalla rete.

Ora che hai alcuni numeri di base, puoi iniziare a eseguire il benchmarking del cluster Ceph per vedere se ti offre prestazioni simili. Il benchmarking può essere eseguito a diversi livelli: è possibile eseguire benchmarking di basso livello del cluster di archiviazione stesso o eseguire benchmarking di livello superiore delle interfacce chiave, come dispositivi a blocchi e gateway di oggetti. Le sezioni seguenti trattano ciascuno di questi approcci.

NOTA: prima di eseguire uno qualsiasi dei benchmark nelle sezioni successive, eliminare tutte le cache utilizzando un comando come questo:
shell> sudo echo 3 | sudo tee /proc/sys/vm/drop_caches && sudo sync

Benchmark un cluster di storage Ceph¶

Ceph include il comando rados bench, progettato specificamente per eseguire il benchmark di un cluster di storage RADOS. Per usarlo, creare un pool di archiviazione e quindi utilizzare rados bench per eseguire un benchmark di scrittura, come mostrato di seguito.

Il comando rados è incluso in Ceph.

shell> ceph osd pool create scbench 128 128
shell> rados bench -p scbench 10 write --no-cleanup

Questo crea un nuovo pool denominato ‘scbench’ e quindi esegue un benchmark di scrittura per 10 secondi. Si noti l’opzione no no-cleanup, che lascia dietro di sé alcuni dati. L’output fornisce un buon indicatore di quanto velocemente il cluster può scrivere dati.
Sono disponibili due tipi di benchmark di lettura: seq per letture sequenziali e rand per letture casuali. Per eseguire un benchmark di lettura, utilizzare i comandi seguenti:
shell> rados bench -p scbench 10 seq
shell> rados bench -p scbench 10 rand

È inoltre possibile aggiungere il parametro-t per aumentare la concorrenza di letture e scritture (il valore predefinito è 16 thread) o il parametro-b per modificare la dimensione dell’oggetto da scrivere (il valore predefinito è 4 MB). È anche una buona idea eseguire più copie di questo benchmark contro diversi pool, per vedere come cambiano le prestazioni con più client.
Una volta ottenuti i dati, è possibile iniziare a confrontare le statistiche di lettura e scrittura del cluster con i benchmark solo su disco eseguiti in precedenza, identificare la quantità di gap di prestazioni esistente (se presente) e iniziare a cercare i motivi.
È possibile ripulire i dati di benchmark lasciati dal benchmark di scrittura con questo comando:

shell> rados -p scbench cleanup

Benchmark un dispositivo a blocchi Ceph¶

Se sei un fan dei dispositivi a blocchi Ceph, ci sono due strumenti che puoi usare per confrontare le loro prestazioni. Ceph include già il comando rbd bench, ma è anche possibile utilizzare il popolare strumento di benchmarking I / O fio, che ora viene fornito con il supporto integrato per i dispositivi a blocchi RADOS.

Il comando rbd è incluso in Ceph. Il supporto RBD in fio è relativamente nuovo, quindi sarà necessario scaricarlo dal suo repository e quindi compilarlo e installarlo using_ configure && make && make install_. Si noti che è necessario installare il pacchetto di sviluppo librbd-dev con apt-get install librbd-dev o yum install librbd-dev prima di compilare fio per attivare il supporto RBD.

Prima di utilizzare uno di questi due strumenti, tuttavia, creare un dispositivo a blocchi utilizzando i comandi seguenti:
shell> ceph osd pool create rbdbench 128 128
shell> rbd create image01 --size 1024 --pool rbdbench
shell> sudo rbd map image01 --pool rbdbench --name client.admin
shell> sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
shell> sudo mkdir /mnt/ceph-block-device
shell> sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device

Il comando rbd bench-write genera una serie di scritture sequenziali sull’immagine e misura il throughput di scrittura e la latenza. Ecco un esempio:

shell> rbd bench-write image01 --pool=rbdbench

Oppure, puoi usare fio per confrontare il tuo dispositivo a blocchi. Un esempio rbd.il modello fio è incluso nel codice sorgente fio, che esegue un test di scrittura casuale 4K contro un dispositivo a blocchi RADOS tramite librbd. Si noti che è necessario aggiornare il modello con i nomi corretti per il pool e il dispositivo, come mostrato di seguito.

ioengine=rbd
clientname=admin
pool=rbdbench
rbdname=image01
rw=randwrite
bs=4k

iodepth=32

Quindi, eseguire fio come segue:
shell> fio examples/rbd.fio

Benchmark a Ceph Object Gateway¶

Quando si tratta di benchmarking del Ceph object gateway, non guardare oltre swift-bench, lo strumento di benchmarking incluso con OpenStack Swift. Lo strumento swift-bench verifica le prestazioni del cluster Ceph simulando le richieste client PUT e GET e misurandone le prestazioni.

È possibile installare swift-bench utilizzando pip install swift && pip install swift-bench.

Per utilizzare swift-bench, è necessario prima creare un utente gateway e un subuser, come mostrato di seguito:
shell> sudo radosgw-admin user create --uid="benchmark" --display-name="benchmark"
shell> sudo radosgw-admin subuser create --uid=benchmark --subuser=benchmark:swift
--access=full
shell> sudo radosgw-admin key create --subuser=benchmark:swift --key-type=swift
--secret=guessme
shell> radosgw-admin user modify --uid=benchmark --max-buckets=0

Quindi, creare un file di configurazione per swift-bench su un host client, come di seguito. Ricordarsi di aggiornare l’URL di autenticazione in modo che rifletta quello del gateway dell’oggetto Ceph e di utilizzare il nome utente e le credenziali corretti.

auth = http://gateway-node/auth/v1.0
user = benchmark:swift
key = guessme
auth_version = 1.0

Ora puoi eseguire un benchmark come di seguito. Utilizzare il parametro-c per regolare il numero di connessioni simultanee (questo esempio utilizza 64) e il parametro-s per regolare la dimensione dell’oggetto in scrittura (questo esempio utilizza oggetti 4K). I parametri-n e-g controllano rispettivamente il numero di oggetti da METTERE e OTTENERE.
shell> swift-bench -c 64 -s 4096 -n 1000 -g 100 /tmp/swift.conf

Sebbene swift-bench misuri le prestazioni in numero di oggetti / sec, è abbastanza facile convertirlo in MB/sec, moltiplicando per la dimensione di ciascun oggetto. Tuttavia, si dovrebbe essere cauti di questo confronto direttamente con la previsione delle prestazioni del disco statistiche che avete ottenuto in precedenza, dal momento che un certo numero di altri fattori che influenzano queste statistiche, come:

  • il livello di replica (e latenza overhead)
  • pieno di dati journal scrive (offset in alcune situazioni da gazzetta di dati a coalescenza)
  • fsync sul OSDs per garantire la sicurezza dei dati
  • metadati di sovraccarico per mantenere i dati memorizzati in PIETRA
  • latenza sovraccarico di rete, ceph, ecc) rende readahead più importante

SUGGERIMENTO: Quando si tratta di prestazioni object gateway, non esiste una regola difficile e veloce che puoi utilizzare per migliorare facilmente le prestazioni. In alcuni casi, gli ingegneri Ceph sono stati in grado di ottenere prestazioni migliori rispetto alla linea di base utilizzando strategie di caching e coalescenza intelligenti, mentre in altri casi, le prestazioni del gateway di oggetti sono state inferiori alle prestazioni del disco a causa di latenza, fsync e sovraccarico di metadati.

Conclusione¶

Ci sono una serie di strumenti disponibili per il benchmark di un cluster Ceph, a diversi livelli: disco, rete, cluster, dispositivo e gateway. Ora dovresti avere alcune informazioni su come affrontare il processo di benchmarking e iniziare a generare dati sulle prestazioni per il tuo cluster. In bocca al lupo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.