Ceph
Benchmark Ceph Cluster Performance¶
een van de meest voorkomende vragen die we horen is “hoe controleer ik of mijn cluster op maximale prestaties draait?”. Wonder niet meer-in deze gids, we zullen u door een aantal tools die u kunt gebruiken om uw Ceph cluster benchmarken.
opmerking: de ideeën in dit artikel zijn gebaseerd op Sebastian Han ‘s blog post, TelekomCloud’ s blog post en input van Ceph ontwikkelaars en ingenieurs.
haal prestatiestatistieken uit het basisscenario¶
fundamenteel draait benchmarking om vergelijking. U zult niet weten of u Ceph cluster presteert onder par, tenzij u eerst identificeren wat de maximaal mogelijke prestaties is. Voordat u begint met het benchmarken van uw cluster, moet u dus eerst prestatiestatistieken verzamelen voor de twee belangrijkste componenten van uw Ceph-infrastructuur: uw schijven en uw netwerk.
Benchmark uw schijven¶
de eenvoudigste manier om uw schijf te benchmarken is met dd. Gebruik het volgende commando om een bestand te lezen en te schrijven, eraan herinnerend om de parameter oflag toe te voegen om het cachegeheugen van de schijfpagina te omzeilen:shell> dd if=/dev/zero of=here bs=1G count=1 oflag=direct
let op de laatste verstrekte statistiek, die de schijfprestaties in MB/sec aangeeft. Voer deze test uit voor elke schijf in uw cluster en noteer de resultaten.
Benchmark uw netwerk¶
een andere belangrijke factor die van invloed is op de prestaties van het Ceph-cluster is de netwerkdoorvoer. Een goed hulpmiddel hiervoor is iperf, dat een client-server verbinding gebruikt om TCP en UDP bandbreedte te meten.
u kunt iperf installeren met apt-get install iperf of yum install iperf.
iperf moet op ten minste twee knooppunten in uw cluster worden geïnstalleerd. Start vervolgens op een van de knooppunten de iperf-server met het volgende commando:
shell> iperf -s
op een ander knooppunt, start de client met het volgende commando, onthoud om het IP-adres te gebruiken van het knooppunt dat de iperf server host.:
shell> iperf -c 192.168.1.1
let op de bandbreedtestatistieken in Mbits/sec, omdat dit de maximale doorvoer aangeeft die door uw netwerk wordt ondersteund.
Nu u een aantal baseline nummers hebt, kunt u beginnen met het benchmarken van uw Ceph cluster om te zien of het u vergelijkbare prestaties geeft. Benchmarking kan op verschillende niveaus worden uitgevoerd: u kunt een low-level benchmarking van het opslagcluster zelf uitvoeren, of u kunt een hoger niveau benchmarking van de belangrijkste interfaces uitvoeren, zoals blokapparaten en objectgateways. In de volgende paragrafen wordt elk van deze benaderingen besproken.
opmerking: voor het uitvoeren van een van de benchmarks in de volgende secties, drop alle caches met behulp van een commando als dit:shell> sudo echo 3 | sudo tee /proc/sys/vm/drop_caches && sudo sync
Benchmark een Ceph-Opslagcluster¶
Ceph bevat de opdracht Rados bench, die specifiek is ontworpen om een Rados-opslagcluster te benchmarken. Om het te gebruiken, maakt u een opslagpool aan en gebruikt u vervolgens rados bench om een schrijfbenchmark uit te voeren, zoals hieronder wordt weergegeven.
de opdracht rados wordt meegeleverd met Ceph.
shell> ceph osd pool create scbench 128 128
shell> rados bench -p scbench 10 write --no-cleanup
dit creëert een nieuwe pool met de naam ‘scbench’ en voert dan een schrijfbenchmark uit gedurende 10 Seconden. Let op de –no-cleanup optie, die wat gegevens achterlaat. De output geeft u een goede indicator van hoe snel uw cluster gegevens kan schrijven.
er zijn twee soorten leesbenchmarks beschikbaar: seq voor sequentiële reads en rand voor random reads. Om een leesbenchmark uit te voeren, gebruik je de onderstaande commando ‘ s:shell> rados bench -p scbench 10 seq
shell> rados bench -p scbench 10 rand
u kunt ook de parameter-t toevoegen om de concurrency van lezen en schrijven te verhogen (standaard 16 threads), of de parameter-b om de grootte van het object te veranderen dat wordt geschreven (standaard 4 MB). Het is ook een goed idee om meerdere kopieën van deze benchmark uit te voeren tegen verschillende pools, om te zien hoe de prestaties veranderen met meerdere clients.
zodra u de gegevens hebt, kunt u beginnen met het vergelijken van de lees-en schrijfstatistieken van het cluster met de eerder uitgevoerde benchmarks met alleen schijven, identificeren hoeveel van een prestatiekloof bestaat (indien aanwezig), en beginnen te zoeken naar redenen.
u kunt de benchmarkgegevens die door de write benchmark zijn achtergelaten, opschonen met dit commando:
shell> rados -p scbench cleanup
Benchmark een Ceph Block Device¶
als u fan bent van Ceph block devices, kunt u twee tools gebruiken om hun prestaties te benchmarken. Ceph bevat al het RBD bench Commando, maar u kunt ook gebruik maken van de populaire I/O benchmarking tool fio, die nu wordt geleverd met ingebouwde ondersteuning voor RADOS blok apparaten.
het commando rbd wordt meegeleverd met Ceph. RBD-ondersteuning in fio is relatief nieuw, daarom moet u het downloaden van de repository en vervolgens compileren en installeren met behulp van_ configure && make && make install_. Merk op dat je het libbd-dev ontwikkelpakket moet installeren met apt-get install libbd-dev of yum install libbd-dev voordat je Fio compileert om de RBD ondersteuning te activeren.
voordat u een van deze twee tools gebruikt, maakt u echter een blokapparaat aan met de onderstaande commando ‘ s: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
het RBD bench-write Commando genereert een reeks sequentiële schrijft naar de afbeelding en meet de schrijfsnelheid en latentie. Hier is een voorbeeld:
shell> rbd bench-write image01 --pool=rbdbench
of u kunt fio gebruiken om uw blokapparaat te benchmarken. Een voorbeeld rbd.fio template wordt meegeleverd met de fio broncode, die een 4K random write test uitvoert tegen een Rados blok apparaat via libbd. Merk op dat u de sjabloon moet bijwerken met de juiste namen voor uw pool en apparaat, zoals hieronder weergegeven.
ioengine=rbd
clientname=admin
pool=rbdbench
rbdname=image01
rw=randwrite
bs=4k
iodepth=32
voer dan fio als volgt uit:shell> fio examples/rbd.fio
Benchmark een Ceph-Objectgateway¶
als het gaat om benchmarking van de Ceph-objectgateway, kijk dan niet verder dan swift-bench, het benchmarking-instrument dat bij OpenStack Swift wordt meegeleverd. De swift-bench tool test de prestaties van uw Ceph cluster door PUT-en GET-aanvragen van klanten te simuleren en hun prestaties te meten.
u kunt swift-bench installeren met pip install swift && pip install swift-bench.
om swift-bench te gebruiken, moet u eerst een gateway-gebruiker en subuser aanmaken, zoals hieronder getoond: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
maak vervolgens een configuratiebestand aan voor swift-bench op een client host, zoals hieronder. Vergeet niet om de authenticatie-URL bij te werken om die van uw Ceph-objectgateway weer te geven en om de juiste gebruikersnaam en referenties te gebruiken.
auth = http://gateway-node/auth/v1.0
user = benchmark:swift
key = guessme
auth_version = 1.0
u kunt nu een benchmark uitvoeren zoals hieronder. Gebruik de parameter-c om het aantal gelijktijdige verbindingen aan te passen (dit voorbeeld gebruikt 64) en de parameter-s om de grootte van het te schrijven object aan te passen (dit voorbeeld gebruikt 4K-objecten). De parameters-n en-g bepalen het aantal objecten om respectievelijk te zetten en te krijgen.shell> swift-bench -c 64 -s 4096 -n 1000 -g 100 /tmp/swift.conf
hoewel swift-bench prestaties meet in aantal objecten/sec, is het eenvoudig genoeg om dit om te zetten in MB/sec, door te vermenigvuldigen met de grootte van elk object. Echter, je moet voorzichtig van het vergelijken van deze direct met de baseline schijf statistieken over de prestaties van je eerder verkregen, omdat een aantal andere factoren ook van invloed zijn op deze statistieken, zoals:
- de mate van replicatie (en latentie overhead)
- volledige gegevens journal schrijft (offset in sommige situaties door het journal gegevens coalescentie)
- fsync op de OSDs van de gegevens te garanderen van de veiligheid
- metadata-overhead voor het bewaren van gegevens die zijn opgeslagen in RADOS
- latency overhead (netwerk, cervisia, etc) maakt readahead meer belangrijk
TIP: Als het gaat om prestaties van object gateway, is er geen harde en snelle regel die u kunt gebruiken om de prestaties gemakkelijk te verbeteren. In sommige gevallen zijn Ceph-ingenieurs in staat geweest om betere prestaties te verkrijgen dan de basislijn met behulp van slimme caching-en coalescentiestrategieën, terwijl in andere gevallen de prestaties van object gateway lager zijn geweest dan de prestaties van de schijf als gevolg van latency, fsync en metadata overhead.
conclusie¶
er zijn een aantal hulpmiddelen beschikbaar om een Ceph-cluster te benchmarken, op verschillende niveaus: schijf, netwerk, cluster, apparaat en gateway. U moet nu enig inzicht hebben in hoe u het benchmarkingproces kunt benaderen en kunt beginnen met het genereren van prestatiegegevens voor uw cluster. Succes!