Jak szybko zbudować na własnym sprzęcie środowisko pod sprawdzenie działania aplikacji działającej w środowisku wielonodowym z większą ilością zasobów dyskowych. Na talerzu:
RustFS - open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.
Co chcemy otrzymać?
Celem jest instalacja klastra RustFS, technicznie nazwanego Multiple Node Multiple Disk Installation (MNMD). Założyłem, że potrzebujemy 8 maszyn wirtualnych i każda po 8 dysków na dane (z dyskiem na OS to 9).
Do testów na co dzień wirtualizuje z wykorzystaniem kvm, qemu a do zarządzania najczęściej używam virsh. Warstwa danych to OpenZFS.
Maszyna bazowa
Nazewnictwo
rust2*irustfs2*jest tożsame, wykorzystuje je zamiennie.
Można pobrać gotowy obraz Linuksa już zainstalowanego i gotowego do uruchomienia lub poświęcić kilka minut na ręczną instalację. Moim wyborem jest Debian w ostatnim stabilnym wydaniu 13.7 o nazwie Trixie.
Co by nie powielać tego procesu instalacji świeżego OSa 8 razy wykorzystuje raz wykonaną instalację i ją klonuje. Wykorzystuje dość nietypowo zfs na wirtualce, stąd koniecznością jest doinstalowanie go na bazowej maszynie. Zamiennie można użyć parted i również przygotować podpięte pliki obrazów dysku do utworzenia fs.
Można wykorzystać virt-clone. Użyłem dość topornego sposobu: kopiowanie obrazu dysku bazowego, utworzenie bazowej konfiguracji virsh dumpxml, edycję plików xml ( za pomocą sed) i na koniec wdrożenie wirtualnej maszyny virsh define. Obrazem bazowym jest rust20 i z niego tworzę 8 podobnych maszyn.
|
|
W przykładach k to zmienna oznaczająca numer komputera i zawiera się w przedziale {1..8}, stąd nazwy nodów to kolejno rustfs21, rustfs22 aż do rustfs28.
Wykorzystane listy, kleją numer dysku z jego nazwą w systemie. Dysk vda już dyskiem systemowym, więc kolejny rozpoczyna się od b.
|
|
Dodatkowe dyski utworzyłem za pomocą qemu-img
|
|
Przypiąłem je do maszyny
|
|
Każda wirtualka powinna już mieć osiem dysków.
|
|
Po zaimportwaniu wymaganej liczby wirtualek każdą z nich czyszczę pod nową instalację. Do tego virt-sysprep nadaje się idealnie. Domyślnie przy pełnym przygotowaniu usuwa też klucze publiczne dla każdego użytkownika (także dla roota), ale jest przełącznik -ssh-userdir, który temu zapobiega.
|
|
Oczywiście możemy tego nie stosować, ale będzie się to wiązało z ponownym wrzuceniem naszych kluczy publicznych (ręcznie albo używając automatyzacji np. ansible a to już dodatkowe zbędne kroki - w końcu to środowisko testowe, ma być szybko.
Pierwsze uruchomienie
Poleceniem lsblk sprawdzamy, czy są dostępne dyski, powinno to tak wyglądać:
|
|
Tworzymy punkty montowania, tworzymy pule per 1 dysk i w każdej zakładamy po jednym systemie plików. Tutaj i={b..i}.
|
|
Sprawdzamy poleceniami, czy zakładanie zakończyło się sukcesem:
zpool listzfs listlsblkdf -hmount
Tożsamość w sieci ;)
Dla pełniejszej integracji należy dopisać nowe maszyny do DNSa i DHCP jako wpisy statyczne.
W CoreDNS dopisałem
|
|
W MikroTik
|
|
Finalnie powinniśmy otrzymać odpowiedź
|
|
Usunięcie środowiska
W celu całkowitego usunięcia i ponownego zbudowania piaskownicy trzeba zatrzymać maszyny, pozbyć się je listy maszyn wirtualnych wraz z ich zasobami dyskowymi, wykasować ich pliki konfiguracyjne xml.
|
|
Jak działa RustFS?
TODO
Artykuł opisujący działanie aplikacji na reaktywowanym blogu BigDataPassion