1+ PB Ceph v 1/2 racku

Ceph v naší infrastruktuře používáme už celkem dlouho. K dnešnímu dni provozujeme kolem 10 ceph clusterů v různých konfiguracích.

Nyní začínáme stavět ceph s (na naše poměry) největší hustotou dat a rádi bychom sdíleli naší aktuální konfiguraci a udělali si tím prostor do budoucna, kde budeme moc vyhodnotit jak dobře to funguje.

Do teď jsme stavěli cephy převážně s 8 TB disky. S tímto cephem chceme zkusit 18 TB disky a dostat se tím s kapacitou nad 1 PB na půl racku.

Požadavky

Výkon

Tento ceph bude sloužit naší video-hostingové CDN. Většina provozu bude čtení a jen menší část budou zápisy.

Housing

Stejně jako u ostatních našich cephů bychom se rádi vešli přibližně do půl racku (20U), včetně několika aplikačních serverů. Přibližně říkáme záměrně, protože to není tak úplně pravda, ale o tom níže.

Energie

Zde je to jednoduché - máme omezení 6kW na 42U rack. Každá polovina racku je maximálně 2.944 kW odběru při plném provozním výkonu, abychom zajistili redundanci napájení A+B větve a měli 20% jako rezervu.

Komponenty a hardware

MON servery

S mon servery dlouhodobě problémy nemáme. V našem prostředí s nám osvědčil provoz ve virtuálních serverech. Abychom ušetřili místo, tak mon servery rozložíme na virtualizační servery, které jsou dedikované pouze mon serverům a budou sdíleny s ostatními cephy.

Z pohledu plánování hardware do našeho poolu virtualizačních serverů pro mon servery přidáme jeden fyzický server. Mon servery rozložíme tak, aby v případě potřeby měly všechny dostatek dostupného výkonu.

MON servery provozujeme ve 3 instancích.

MDS servery

Pro tuto konkrétní aplikaci využíváme CephFS, který vyžaduje servery na metadata. Ty se nám také osvědčilo provozovat ve virtuálních serverech, takže zde je situace stejná. I počet serverů udržujeme 3 kusy.

U MDS serverů používáme aktuálně 2 aktivní MDS servery ze 3 dostupných. Jeden MDS server zůstává stand-by.

Aplikační servery

Aplikační servery jsou v našem případě vesměs jen nginx servery a zde konfigurace zůstává stejná jako v předchozích cephech.

Stačí nám 1 procesorové sestavy s 10 nebo 14 jádry (+HT).

S operační pamětí si ještě stejně jako u OSD serverů nejsme jisti. Po vzoru našich stávajících cephů jsme připravili 128 GB s možností upgradu na 256 GB.

Síťové karty nám stačí 2x 10GE s LACP.

Hardware pro MON/MDS/Aplikační servery

Pro tyto 3 komponenty jsme zvolili 1 kus Supermicro Twin 2U4N - čili 4 servery ve 2U. Jsme si plně vědomi faktu, že v případě problémů na sdílených komponentách (např. backplane) v tomto serveru dojde k výpadku všeho.

Z tohoto důvodu rozkládáme MON a MDS servery napříč ostatními twiny dalších cephů. V případě výpadku tak příjdeme pouze o 1/3.

Aplikační servery mícháme s dalším twinem v racku, který by měl obsluhovat druhý ceph. Na 2 cephy tak dostáváme 6 serverů, což nám bohatě stačí, protože 15 Gbps zvládne odservírovat jeden server. V nejhorším případě můžeme dočasně použít servery z jiných racků.

Spotřeba jednoho takového twinu je do 500W.

OSD servery

Case v tomto případě používáme stále 2U na 12 disků s možností přidat 2x2,5" disky na systém. U tohoto cephu už hotswap 2,5" systémové disky nepoužíváme, protože tyto disky umírají velmi zřídka. V case máme také ne-hotswap NVMe disky, takže k vypnutí celého serveru občas tak i tak dojde.

Pevné disky - 216 TB na OSD server

Pevné disky zde prvně zkoušíme 18 TB. V každém serveru bude 12x18 TB disků. Stále používáme redundanci 6+2. Čistá kapacita celého cephu je naplánovaná lehce pod 1.8 PB. Když započítáme redundanci a rezervu pro ceph, tak bychom se mohli se měli dostat na 1.2 PB využitelné kapacity. Známe ale ceph, tak zatím očekáváme využitelnou kapacitu 1 PB.

S výkonem pevných disků jsme už narazili na problém. Byť se zdá, že celkových 108 disků by mělo poskytnout nějaký výkon, tak máme hranici stabilních 15Gbps odchozího provozu. 18 TB disky mají velmi podobný výkon jako 8 TB disky. Za to se na ně ale vejde výrazně víc souborů. Z tohoto důvodu na tento ceph budeme přesouvat méně používané soubory a nová data budeme nechávat na ostatních cephech.

V každém OSD serveru máme 2x2 TB NVMe SSD pro RocksDB databáze.

Přemýšleli jsme také nad použítím SSD pro WAL, ale v tomto případě jsme pro to nenašli využití. Zápisů do cephu bude méně než čtení a můžeme jej dávkovat podle potřeby.

Naopak pro metadata pool jsme vytvořili malý pool z 256GB NVMe SSD s 3x replikací.

Na systém používáme 2 vyhrazené SSD disky. Systém s logy se bez problémů vejde do 10 GB, takže bohatě stačí kvalitnější SATA DOM disky.

Pamět RAM - asi to bude chtít 256 GB

Paměť RAM průběžně navyšujeme s přidáváním nových disků. U 8 TB cephů si vystačíme s 96 GB paměti na OSD server. V tomto případě očekáváme, že se dostaneme na 256 GB na jeden OSD server.

CPU - 10 jader "stačí"

I zde se držíme jednoprocesorových desek a zatím používáme 10 jádrové procesory. V případě potřeby můžeme udělat upgrade na procesory s více jádry.

Abychom nemluvili jen o tom, jak je ceph úžasný, tak jsme si již vyzkoušeli scénář, který nás trochu potrápil. V rámci jednoho testu jsme nechali jeden OSD server 14 dnů vypnutý. Redundanci máme nastavenou 6+2, takže jsme měli pořád jeden stroj dostupný pro případný incident.

Vše běželo v pořádku až do momentu, kdy jsme tento server chtěli vrátit znovu do clusteru. Navazování peerů s tímto serverem bylo tak náročné, že jsme v cephu prvně viděli zatížený procesor na 100%. Museli jsme server znovu odstavit a jednotlivá OSD přidávat po jednom.

Vyjma tohoto případu však vidíme, že zátěž CPU na OSD serverech je mála - resp. většina je IO wait.

Síťová konektivita

Zatím jsme neviděli, že by pro běžný provoz bylo potřeba víc než 3 Gbps konektivity na OSD server. V případě balancingu je potřeba konektivity trochu víc, ale zdaleka se to neblíží k 10 Gbps. Na OSD servery používáme 1x10GE síťovou kartu.

Spotřeba

Spotřebu jednoho OSD serveru plánujeme do 250W.

Srhnutí konfigurace

Náš nový ceph se aktuálně skládá z:

  • 8 kusů 2U OSD serverů.
  • 9. OSD server má rezervované místo a přidáme jej s přidáním poslední várky disků.
  • 1 kus Supermicro Twin 2U4N - jeden server na MON/MDS, 3 kusy na aplikační servery, které jsou promíchané s druhým cephem v racku

Parametry:

  • Obsazené místo v racku: přibližně 20U
  • Naplánovaná spotřeba: 2 750W
  • Čistá kapacita: lehce pod 1.8 PB
  • Očekávaná využitelná kapacita: > 1 PB
  • Očekávaný výkon: do 15 Gbps
  • Redundance OSD serverů: EC 6+2

U očekávaného výkonu záměrně neuvádíme IOPs, protože v tomto případě máme měřitelnou jednotku množství HTTPs provozu, které z clusteru vytlačíme.

Finální kapacitu cephu zjistíme, až bude plně postavený. Využíváme toho, že můžeme disky přidávat postupně a tím rozkládáme finanční investici průběžně do času místo jednoho velkého nákupu.

Další možnosti

Zatím se snažíme naskládat vždy jeden ceph do 1/2 racku. Omezuje nás to však v množství aplikačních serverů, které máme dostupné. V případě potřeby více aplikačního výkonu máme 2 možnosti:

  • (Dočasné řešení) Servery můžeme umisťovat do jiných racků.
  • (Dlouhodobé řešení) Ceph zvětšíme na celý rack, upravíme konfiguraci na EC 10+4 a přidáme jak OSD servery, tak aplikační servery.

Závěr

Je zde potřeba připomenout, že tato konfigurace je velmi specifická pro tento konkrétní druh provozu. Naším záměrem zde je nakupovat takový hardware, na kterém aplikace poběží v pořádku, bude mít dostatečnou rezervu, ale nebude zbytečně předimenzovaný. Zároveň maximalizovat výkon celého řešení.

Zatím tato konfigurace běží dobře. Uvidíme, jak se ceph bude chovat, až bude komplětně plný kapacitně i množstvím provozu.

PS: Fotky celého racku s cephy budeme sdílet příště, kdy budeme popisovat všechny parametry a zapojení. Zatím pro ukázku druhý ceph ve stejném racku.

1 PB Ceph in 1/2 rack