Cel jaki sobie postawiłem był ambitny. Chciałem zbudować przestrzeń dyskową o pojemności 90 TB netto, która będzie zdolna sprostać ruchowi na poziomie 20 Gbps. W dodatku całość musiała być odporna na awarie każdego z elementów klastra. Wybór padł na Proxmoxa oraz rozproszony storage Ceph z kilku powodów:
Konsekwencją powyższego jest niska cena takiego rozwiązania oraz bardzo wysoki poziom elastyczności. Konfiguracja jak się później okaże nie jest wcale taka straszna.
Żeby nie powielać bez sensu informacji z sieci tutaj możecie znaleźć co to jest Proxmox: https://www.proxmox.com/en/proxmox-ve, a tu co to jest Ceph: http://ceph.com oraz jak działają razem: https://pve.proxmox.com/wiki/Ceph_Server.
Wybów padł na serwery Lenovo RD650 oraz bardzo ciekawe dyski Hitachi Ultrastar He10 o pojemności 10TB. Co jest w nich takiego ciekawego? Ich wnętrze zamiast powietrzem wypełnione jest helem co według producenta zwiększa trwałość (MTBF na poziomie 2.5 mln godzin) oraz zmniejsza znacząco zużycie energii.
Pozostałe elemenety serwerów przestawiają się następująco:
Istotnym zagadnieniem jest sieć. Postanowiłem zbudować trzy niezależne sieci: dla klastra Proxomox-a o przepustowości 1 Gbps, dla klastra Ceph o przepustowości 10 Gbps oraz do Internetu również 10 Gbps. Klaster Proxmox-a wymaga do działania multicastu dlatego istotne jest żeby aktywować na switch igmp snooping.
O ile dostęp do Internetu każdy z serwerów ma niezależny i w zasadzie nie ma tu się nad czym rozpisywać o tyle sieć pod Cepha przedstawia się nieco inaczej. Otóż przy trzech węzłach założyłem, że nie potrzebuje switcha i spiąłem serwery w ring. Żeby nie było pętli włączyłem protokół RSTP w bridge’u OVS. Rozwiązanie to ma dwie istotne zalety - nadmiarowość oraz niskie koszty przez brak switcha (a nawet dwóch). Niestety ma też jedną duża wadę. Mimo wykorzystania dwóch interface’ów po 10 Gbps nie możemy ich zagregować i w sumie sieć ma przypustowość właśnie 10 Gbps na serwer. Dla celów doświadczalnych jest to wystarczające.
Dla osób, które nie chcą komplikować dodatkowo infrastruktury przez obecność przełączników dla sieci Ceph, a potrzebują większej wydajności mogą zastosować karty sieciowe 40 Gbps. Nie są one wcale takie drogie w dzisiejszych czasach.
Zastanawiacie się pewnie co z tego wszystkiego wyszło? Na początek instalacja i konfiguracja. Okazało się, że jest nadzwyczaj przyjemna i prosta. W zasadzie 90% operacji można wyklikać z przeglądarki przez interface Proxmoxa. Ważne żeby kontroler RAID był w trybie HBA albo wszystkie dyski w JBOD, bo dopiero wtedy Ceph pokaże co potrafi. Wszystko zgodnie z dokumentacją, która nawiasem mówiąc jest bardzo dobra.
Teraz najlepsze, czyli wydajność. Wewnątrz maszyny wirtualnej udało się uzyskać prędkość w odczycie sekwencyjnym na poziomie 1.7 GB/s oraz 30k iops. Przypominam, że dysponowałem tylko dyskami talerzowymi, więc uważam to za bardzo dobry wynik. Zapis już niestety nie wyglądał tak dobrze, ale zrzucam to na brak dysków SSD przeznaczonych na journaling. Tutaj wynik w okolicach 650 MB/s to było wszystko. Ciekawe jest to, że osiągane rezultaty tylko nieznacznie degradują się przy losowym odczycie.
Mimo tego, że bardzo starałem się popsuć macierz to nie udało mi się to. Wyciągałem pojedyncze dyski na żywca, restartowałem prądowo całe serwery razem oraz osobno. Za każdym razem Ceph zdołał się uleczyć. Tu jednak bardzo ważna uwaga. Podczas gdy macierz jest zdegradowana jej wydajność spada drastycznie. Odbudowa po poważniejszym padzie trwa nawet kilka godzin. Istotne dla dobrego zdrowia Cepha jest odpowiednia ilość pamięci RAM. Jeśli serwer tylko na moment zacznie korzystać ze swapa to odrazu pojawią się problemy. Przy tej wielkości przestrzeni musimy zarezerwować co najmniej 16 GB na serwer dla samego Cepha.
Moim zdaniem to bardzo ciekawa technologia, która przy odpowiednim dobraniu sprzętu i założeń wydajnościowych sprawdzi się doskonale tam gdzie trzeba dobrze zabezpieczyć dane.