How to quickly build an environment on your own hardware to test the performance of an application running in a multi-node environment with more disk resources.
RustFS - open-source, S3-compatible high-performance object storage system supporting migration and coexistence with other S3-compatible platforms such as MinIO and Ceph.
What do we want?
What do we want to achieve?
The goal is to install a RustFS cluster, technically called a Multiple Node Multiple Disk Installation (MNMD). I assumed we needed 8 virtual machines, each with 8 disks for data (including the OS disk, that’s 9).
For daily testing, I virtualize using
Base
The names
rust2*andrustfs2*are identical and are used interchangeably.
You can download a pre-installed Linux image ready to run, or you can spend a few minutes manually installing it. My choice is Debian 13.7, the latest stable release, Trixie.
To avoid duplicating this process of installing a fresh OS eight times, it reuses the once-performed installation and clones it. It uses zfs rather unusually on the virtual machine, so it must be installed on the base machine. Alternatively, you can use parted and also prepare attached disk image files to create the file system.
Also you can use virt-clone. I used a rather crude method: copying an image of the base disk, creating a base configuration by virsh dumpxml, editing the XML files (example sed), and finally deploying define a virtual machine virsh define. The base image is rust20, and I create eight similar machines from it.
|
|
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, uusunąć je listy maszyn wirtualnych wraz z ich zasobami dyskowymi, usunąc ich pliki konfiguracyjne xml.
|
|
Jak działa RustFS?
TODO
Artykuł opisujący działanie aplikacji na reaktywowanym blogu BigDataPassion