Tworząc darmowy hosting VPS "przeszedłem Linuksa" — doszedłem w kilku miejscach do limitów jego możliwości.
Oczywiście, każdy z limitów da się zwiększyć, ale najpierw trzeba wiedzieć o jego istnieniu.
O co chodzi? 🧵 ↓
Prowadząc firmę hostingową mam w ofercie nie tylko płatne serwery, ale także darmowe, które budują dla mnie bazę płatnych użytkowników.
Aby taka darmowa usługa miała sens ekonomiczny, serwerów na jednej maszynie muszą być nie dziesiątki, a tysiące.
I tu zaczynają się schody.
Powiedzmy, że na jednego dedyka chciałbym upchnąć np. 2000 skrajnie lekkich kontenerów LXC. Z punktu widzenia admina, tutaj nie ma żadnej szczególnej konfiguracji. Odpalasz je kolejno i gotowe!
Tylko moment... dlaczego po uruchomieniu około 1024 VPSów, net przestał działać?!
Doszliśmy do pewnej granicy, której w normalnych warunkach raczej nie osiągniesz.
Limit interfejsów wpiętych w jednego bridget to właśnie 1024 sztuki. Nie dasz rady zbridgować więcej kart sieciowych, więc nowe kontenery nie mają netu.
Możesz to obejść przez "Open vSwitch".
Sieć ogarnięta. To fajnie byłoby każdemu VPS-owi dać własny wolumen LVM. No to zakładamy... eeej! Jak to miejsce się skończyło przecież mam jeszcze 90% wolnego!
W systemie LVM istnieje przestrzeń zarezerwowana na metadane. Domyślnie 1MB, a każdy wolumen to 4KB.
Mając 2000 wolumenów, niemal 8-krotnie przekraczamy rozmiar metadanych, a jeśli jeszcze po drodze robimy snapshoty i doliczymy do tego metadane VG i PV, to nie ma szans na założenie takiej liczby wolumenów.
OK. Mamy nasze 2000 VPS-ów, a każdy z nich coś musi uruchomić. Liczmy lekko po 30 procesów per VPS.
Jak to nie mogę się zalogować na maszynę?! Jakie znowu"fork: retry: Resource temporarily unavailable"???
New achievement unlocked! 🎉
Zużyłeś właśnie wszystkie PID-y 😃
Niektóre dystrybucje Linuksa posiadają domyślny limit pid_max ustawiony na 32768, podczas gdy Ty potrzebujesz ich ponad 60k.
Na systemach 64-bitowych to nie jest żaden problem, ale trzeba to jednak ustawić, trzeba wiedzieć, gdzie i warto wiedzieć, że taki limit istnieje.
Dysk, sieć i PID-y ogarnięte. To userzy odpalają Dockery!
Garstka userów mówi, że działa, a pozostali mówią, że jest jakiś "quota error". Przecież oni mają pełno miejsca!
Skończyło się miejsce, ale na coś zupełnie innego.
Na klucze w kernelu 🤔
Klucze to struktury danych używane między innymi przy konteneryzacji. Przeważnie kernel potrafi tych kontenerów odpalić naprawdę DUŻO, to dlaczego to się wysypało?
Bo Twoje VPSy w LXC to... kontenery. Odpaliłeś 2000 kontenerów, a one odpaliły swoje kontenerach (Dockery).
Zwiększenie limitu kluczy to też prosta sprawa, ale trzeba wiedzieć, że takowe klucze istnieją i gdzie się podbija ten limit.
Takich pułapek może być sporo, ale o większości z nich dowiesz się dopiero przy dostatecznie dużej skali.
Hosting, o którym mowa:
frog.mikr.us