Strona
domowa Ireny i Zbigniewa Kuleszów
Serdecznie witamy na domowych, prywatnych serwerach
Dzisiaj jest: 2026-06-25
Aktualizacja
strony dnia: [an error occurred while processing this directive]
Rocznica
24 lat pracy serwerów i strony zjk.pl :-) (od 2002) 24
lat nieprzerwanej pracy z systemem FreeBSD / 24 years of continuous work with FreeBSD system
UWAGA!
Ten serwis, strona i podstrony mogą używać cookies i podobnych
technologii (brak zmiany ustawienia przeglądarki oznacza zgodę na to)!
zjk.pl – 24 lata inżynierii i
technologii - ewolucja prywatnego ekosystemu FreeBSD
I.
Wstęp: 24 lata cyfrowej suwerenności.
Fakty:
Prywatna infrastruktura serwerowa zjk.pl
działa nieprzerwanie od 2002 roku i od początku oparta jest o system
operacyjny FreeBSD. Komentarz:
Wszystko zaczęło się na przełomie
wieków od prostej idei i świadomej decyzji o wyborze FreeBSD
jako fundamentu pod własny, niezależny serwer. Misją projektu od ponad
dwóch dekad pozostaje dostarczanie usług pro bono dla
lokalnej społeczności oraz utrzymanie przestrzeni internetowej wolnej
od reklam, skryptów śledzących i korporacyjnego nadzoru.
To nie jest kolejny tymczasowy projekt
zbudowany na podstawie gotowego tutoriala, lecz autorskie środowisko
rozwijane konsekwentnie przez ćwierć wieku. Przez ten czas
infrastruktura ewoluowała od pojedynczych usług do rozproszonego
ekosystemu serwerów fizycznych, wirtualnych i storage
działających w trybie 24/7/365.
Ćwierć wieku stabilnej pracy pokazuje,
że własna infrastruktura nadal może skutecznie konkurować z
rozwiązaniami chmurowymi, zachowując pełną autonomię technologiczną i
kontrolę nad danymi.
•
Punkt startowy: Rok 2002 i decyzja o wyborze FreeBSD.
Fakty:
Oficjalny start infrastruktury z
dostępem do Internetu nastąpił w 2002 roku. Podstawowym systemem
operacyjnym od początku projektu pozostaje FreeBSD. Komentarz:
„25 lat” to liczba
mocno przybliżona. Moje pierwsze prace z FreeBSD rozpoczęły się już
około 1998/1999 roku. Największą przeszkodą nie był wtedy sprzęt ani
system operacyjny, lecz brak powszechnie dostępnego Internetu. Jedyną
realną opcją pozostawał ISDN, który wydawał się zbyt
ograniczony dla planowanej infrastruktury.
Mimo wielu prób i pytań u
dostawców, dostęp do Internetu w moim budynku pojawił się
dopiero w 2002 roku — i tę datę przyjąłem jako oficjalny
start serwerów. W praktyce pierwsze maszyny działały już
wcześniej, około 2000/2001 roku.
Warto podkreślić, że wybór
FreeBSD od początku był świadomą decyzją, a nie wynikiem przypadkowych
testów. Wiedziałem, czego oczekuję od systemu: stabilności,
przewidywalności i profesjonalnego podejścia do administracji. Miało
być wymagająco — i tak pozostało do dziś.
•
Misja: Internet bez reklam, trackerów i pro bono dla
społeczności.
Fakty:
Serwery zjk.pl nie publikują reklam ani zewnętrznych
mechanizmów śledzących użytkowników.
Infrastruktura wykorzystywana jest również do działalności
pro publico bono oraz wsparcia inicjatyw edukacyjnych i społecznych. Komentarz:
Serwery zjk.pl od
początku były projektem rozwijanym bardziej z potrzeby tworzenia
niezależnej infrastruktury niż z powodów komercyjnych.
Usługi działały i nadal działają głównie na potrzeby
edukacyjne, społeczne oraz prywatne.
W czasach powstawania projektu wiele
instytucji — w tym również uczelnie —
nie oferowało jeszcze pracownikom własnych usług pocztowych czy
przestrzeni do publikacji materiałów dla
studentów. Warto dodać, że pracodawca właściciela
— Politechnika Łódzka — przez wiele lat
nie oferował pracownikom ani usług pocztowych, ani żadnego miejsca do
publikacji materiałów dla studentów (jeszcze
około 2010 roku uruchomiono jedynie pocztę PŁ). W praktyce oznaczało to
konieczność budowania takich rozwiązań samodzielnie.
Jedną z podstawowych zasad projektu
pozostaje brak reklam oraz agresywnych mechanizmów
śledzących użytkowników. Statystyki ruchu i monitoring usług
prowadzone są wyłącznie na potrzeby administracyjne oraz utrzymania
bezpieczeństwa infrastruktury. Całość utrzymywana jest prywatnie i
finansowana wyłącznie przez właściciela infrastruktury —
Zbigniewa Kuleszę.
•
Przekaz: To nie jest gotowiec z tutoriala – to autorski
projekt rozwijany konsekwentnie przez ćwierć wieku.
Fakty:
Projekt zjk.pl jest autorską
infrastrukturą rozwijaną systematycznie od ponad 25 lat. Komentarz:
Jeszcze przed
uruchomieniem serwerowni założeniem było jej praktyczne wykorzystanie.
W czasach, gdy projekt powstawał, złożone systemy CMS dopiero zaczynały
się pojawiać, a o współczesnych usługach chmurowych nikt
jeszcze nie myślał. Sam Internet — mimo bardzo dynamicznego
rozwoju — dopiero budował model swojej powszechnej
użyteczności. Wiele rozwiązań
trzeba było projektować samodzielnie. W początkowym okresie
wykorzystywałem dziś już niemal zapomniane mechanizmy, takie jak FTP, a
wiele usług przechodziło wieloletnią ewolucję. Dzisiejszy system
pocztowy oparty o sendmail, miltery, MailScanner, rspamd, SpamAssassin,
SPF, DKIM i DMARC niewiele przypomina prostą konfigurację pocztową z
początku lat 2000. Przez lata
kluczowe okazało się nie tyle wybieranie technologii
„najmodniejszych” czy
„najpopularniejszych”, ale takich, które
można było realnie utrzymać i rozwijać w długim horyzoncie czasu. W
praktyce oznaczało to ciągłe podejmowanie decyzji — od wyboru
sprzętu i sposobu zasilania, aż po architekturę usług i konfigurację
oprogramowania. Warunki
serwowania rzeczywistych usług to jedyny moment, w którym
można naprawdę sprawdzić, czy system jest poprawnie skonfigurowany i
odporny na zagrożenia zewnętrzne. Żadne środowisko testowe nie jest w
stanie tego w pełni zastąpić.
II.
Sprzęt: Inżynieria fizyczna i trudne decyzje
Fakty: Infrastruktura serwerowa
oparta jest o energooszczędne platformy Mini‑ITX wyposażone w
podwójne interfejsy Ethernet pracujące w agregacji LACP.
Serwery wykorzystują procesory Intel
Core serii T o obniżonym TDP oraz — w przypadku
serwerów plików — wieloportowe
kontrolery dyskowe obsługujące rozbudowany storage. Komentarz: Budowa
domowego klastra w Sieradzu wymagała odejścia od klasycznych rozwiązań
serwerowych na rzecz autorskiej architektury opartej o osiem
energooszczędnych platform Mini‑ITX. Świadomy wybór
procesorów Intel Core serii T pozwolił uzyskać bardzo dobry
kompromis pomiędzy wydajnością obliczeniową a poborem energii, co w
warunkach domowych ma kluczowe znaczenie dla pracy ciągłej 24/7. Wybór
procesorów Intel Core z serii T pozwolił na
uzyskanie bezkompromisowej wydajności obliczeniowej przy zachowaniu
niskiego współczynnika TDP na poziomie 35 W
Każdy węzeł wyposażony został w podwójne interfejsy 1 Gb
Ethernet pracujące w agregacji LACP. Rozwiązanie to zwiększa odporność
infrastruktury na awarie okablowania oraz poprawia przepustowość
komunikacji pomiędzy serwerami i storage.
Dużym wyzwaniem okazało się fizyczne
rozmieszczenie tak gęstego środowiska obliczeniowego w prywatnej
przestrzeni mieszkalnej. Wymusiło to zaprojektowanie układu maszyn w
półce serwerowej, odpowiedniego prowadzenia okablowania
oraz systemu odprowadzania ciepła.
•
Wybór platformy: Dlaczego 8x Mini-ITX.
Fakty: Platforma Mini‑ITX stanowi
podstawę sprzętową infrastruktury zjk.pl. Format ten zapewnia
funkcjonalność porównywalną z klasycznymi płytami ATX przy
znacznie mniejszych wymiarach fizycznych. Komentarz:
Miniaturowe komputery kojarzą się dziś głównie z ostatnią
dekadą rozwoju rynku IT, jednak zainteresowanie miniaturyzacją
towarzyszyło mi znacznie wcześniej — m.in. pracy
związanej z elektroniką i mikroelektroniką.
W latach 1990–2000 najmniejsze
dostępne komputery miały najczęściej charakter przemysłowy i były
bardzo kosztowne. Istniały również konstrukcje jeszcze
mniejsze, wielkości kart rozszerzeń czy kart kredytowych, jednak ich
funkcjonalność była mocno ograniczona. Zależało mi natomiast na
zachowaniu możliwie pełnej zgodności z klasyczną architekturą PC.
Po kilku latach doświadczeń (stosowałem
miniaturowe komputery przemysłowe) wybór padł na platformę
Mini‑ITX. Płyty tego typu oferują praktycznie pełną funkcjonalność
większych konstrukcji ATX, obsługują standardowe procesory i typowe
komponenty PC, a ich głównym ograniczeniem pozostaje zwykle
pojedyncze złącze PCI‑E oraz mniejsza liczba slotów pamięci.
Dodatkową zaletą okazała się szeroka
dostępność niewielkich obudów. W infrastrukturze zjk.pl
wykorzystywane są m.in. obudowy przeznaczone pierwotnie do
komputerów multimedialnych i samochodowych. Dzięki temu w
przestrzeni zajmowanej przez jedną klasyczną obudowę ATX można zmieścić
nawet kilka niezależnych komputerów. Jeśli spojrzysz na
zdjęcia serwerowni, zauważysz, że w miejscu jednej obudowy ATX mieszczę
pięć komputerów, a w miejscu obudowy
„leżącej” ATX — cztery (lub nawet 6,
jeśli zrezygnuję z obudów wielodyskowych).
•
Specyfikacja z wyczuciem: Płyty
z dual 1 Gb (pod LACP), wieloportowe karty dyskowe.
Fakty:
Serwery wykorzystują płyty Mini-ITX
wyposażone w podwójne interfejsy Ethernet pracujące w
agregacji LACP oraz wieloportowe kontrolery dyskowe dla rozbudowanego
storage. Komentarz:
Mimo zalet płyt Mini-ITX jednym z ich najważniejszych ograniczeń
pozostaje niewielka liczba złączy PCI-E. Jeśli chcemy uzyskać sensowną
przepustowość sieciową, szybko zaczyna brakować pasma. Dlatego
zdecydowałem się na płyty wyposażone w podwójne interfejsy
Ethernet, które następnie pracują w agregacji LACP.
Tutaj ważna uwaga — LACP
wymaga wsparcia zarówno po stronie systemu operacyjnego (na
FreeBSD jest to LAGG), jak i switcha zarządzalnego. Istnieje
również możliwość agregacji statycznej, jednak w przypadku
awarii okablowania trudniej znaleźć miejsce uszkodzenia.
Jeśli jednak nabrałeś ochoty na LAGG,
warto wcześniej dobrze zrozumieć zasadę działania tego mechanizmu.
Agregacja najlepiej działa wtedy, gdy jednocześnie przesyłanych jest
wiele strumieni danych lub aplikacja wykorzystuje wiele
wątków. Drugim
problemem okazała się obsługa dużej liczby dysków. Serwery
storage wykorzystują obudowy mieszczące do ośmiu dysków
jednocześnie (pomijając systemowe), co wymaga dużej liczby
portów SATA. Same płyty Mini-ITX często oferują
4–6 portów, ale przy bardziej rozbudowanych
konfiguracjach zaczyna to być niewystarczające — nawet dla
klasycznych płyt ATX. Dlatego
stosuję dodatkowe wieloportowe kontrolery dyskowe. Obecnie używam
zarówno kart 4-portowych, jak i większych modeli
10-portowych.
• Szafa serwerowa:
Logistyka upchnięcia klastra w domowych warunkach w Sieradzu.
Fakty:
Infrastruktura została
zoptymalizowana pod kątem niewielkich rozmiarów, niskiego
poboru energii oraz pracy w warunkach mieszkalnych. Komentarz:
Tak naprawdę nie mam żadnej klasycznej
szafy serwerowej. Dzięki optymalizacji wielkości i ograniczeniu ilości
wydzielanego ciepła cała serwerownia mieści się w zwykłym stoliku
komputerowym. Oczywiście robi się ciasno, ale większym problemem od
samych komputerów okazuje się bogate okablowanie.
Paradoksalnie niewielkie rozmiary infrastruktury bardzo ułatwiają
chłodzenie — dostęp powietrza z każdej strony sprawdza się
lepiej niż wiele „profesjonalnych” konstrukcji. O
chłodzeniu piszę szerzej w oddzielnym rozdziale strony.
Pewnie dla niektórych
większym problemem byłby hałas, ale tutaj pojawia się kolejne
zaskoczenie. Serwerownię oczywiście słychać, jednak z drugiego
pokoju… ledwie ledwie. Nie pracują tutaj przecież klasyczne
serwery pobierające po 300–500 W mocy, lecz energooszczędne
platformy oparte o procesory Intel serii T. Łączny pobór
mocy samych serwerów wynosi około 200–250 W przy
ok. 30 fizycznych rdzeniach — czyli mniej więcej tyle, ile
potrafi pobierać pojedynczy mocniejszy komputer biurkowy.
W każdym razie nawet żona nigdy nie
protestowała :) Jedynym
większym problemem pozostaje upalne lato — temperatura w
pokoju potrafi wtedy przekraczać 30–35°C. Zimą
sytuacja wygląda jednak odwrotnie: kaloryfer praktycznie nie musi już
pracować.
II.
Energetyka: Unikalny system 12 V DC
Fakty:
Infrastruktura zjk.pl
wykorzystuje rozbudowany system dystrybucji zasilania 12 V DC,
redundantne linie energetyczne dla elementów krytycznych
oraz wielogodzinne podtrzymanie akumulatorowe. Komentarz:
Architektura zasilania serwerowni
została w dużym stopniu oparta o dystrybucję napięcia 12 V DC zamiast
klasycznego rozprowadzania zasilania AC wewnątrz infrastruktury.
Pozwala to ograniczyć część strat energetycznych wynikających z
wielokrotnej konwersji napięcia, typowej dla klasycznych
układów UPS + zasilacze komputerowe.
W infrastrukturze zastosowano
redundantne linie zasilania dla elementów krytycznych,
takich jak routery OPNsense czy przełączniki sieciowe. System
współpracuje również z rozbudowanym buforem
akumulatorowym, umożliwiającym wielogodzinną pracę serwerowni podczas
awarii zasilania zewnętrznego.
Projekt zasilania nadal jest rozwijany i testowany —
szczególnie w kierunku dalszego zwiększania udziału
bezpośredniego zasilania DC.
•
Filozofia: Rezygnacja z AC na rzecz czystego DC.
Fakty:
Infrastruktura zasilania zjk.pl została
oparta głównie o dystrybucję napięcia 12 V DC z
wykorzystaniem zasilaczy PicoPSU oraz wspólnych linii
zasilających wiele komputerów. Komentarz:
Hasło brzmi dobrze, ale jeszcze nie
zostało w pełni zrealizowane. Zacznijmy jednak od początku, czyli od
problemu zasilania płyt Mini-ITX w samochodowych obudowach
komputerowych. Takie obudowy zwykle nie mają miejsca na klasyczny
zasilacz ATX 230 V — korzystają przecież z instalacji 12/24 V
dostępnej w samochodzie :) No
dobrze, ale skąd pozostałe napięcia wymagane przez komputer, czyli np.
5 V czy 3,3 V? W takich konstrukcjach stosuje się np. zasilacze
PicoPSU. Warto poszukać ich zdjęć na stronie — są naprawdę
miniaturowe. Cała elektronika zasilacza mieści się praktycznie w
obudowie wielkości gniazda ATX oraz niewielkiej płytce przetwornic.
W naturalny sposób zacząłem
więc budować infrastrukturę opartą głównie o linie 12 V
zamiast rozprowadzania linii 230 V. Co ciekawe, początki tego pomysłu
sięgają jeszcze czasów moich wcześniejszych
komputerów przemysłowych
(„ciasteczkowych”). Już wtedy próbowałem
ograniczać liczbę różnych napięć i zastępować kilkanaście
małych zasilaczy wspólnymi liniami 5 V i 12 V.
Można więc powiedzieć, że obecna
architektura zasilania została wypracowana stopniowo przez wiele lat, a
platformy Mini-ITX tylko naturalnie przejęły tę filozofię. Dziś
pojedyncze zasilacze 12 V obsługują wiele komputerów
jednocześnie. Największą zaletą takiego rozwiązania pozostaje sprawność
— jeden większy zasilacz zwykle pracuje znacznie efektywniej
niż wiele małych zasilaczy wtyczkowych.
Ale dlaczego nadal nie jest to
„czyste” 12 V zasilane bezpośrednio z
akumulatorów? Problemem pozostają UPS-y oraz same zasilacze
PicoPSU. Obecne UPS-y (których akumulatory można by
wykorzystać) wymagają napięć 24 V lub 48 V, a współczesne
PicoPSU coraz częściej pracują poprawnie dopiero od okolic 12 V
wejściowych. Dawniej można było znaleźć modele działające już od
8–9 V. Teoretycznie
producenci deklarują poprawną pracę PicoPSU nawet podczas rozruchu
samochodu, jednak serwer wymaga znacznie większej stabilności niż
komputer samochodowy. W praktyce moje testy z mocniejszym komputerem
osobistym (procesor ok. 120 W) pokazały, że przy spadku napięcia
poniżej około 11,5 V mogą pojawić się resety systemu. Tymczasem
napięcie rozładowującego się akumulatora 12 V potrafi spaść nawet do
okolic 10 V. Prace nadal
trwają. W międzyczasie zaprojektowałem już własny dystrybutor 12 V z
pomiarem napięć, prądów i mocy oraz indywidualnym
załączaniem linii zasilających poszczególne komputery
— pierwsze płytki są już gotowe do testów. Być
może konieczne będą dalsze eksperymenty z różnymi modelami
PicoPSU, a może ostatecznie powstanie własna przetwornica stabilizująca
napięcie 12 V.
• Redundancja zasilania:
Niezależne linie dla OPNsense i switchy.
Fakty:
Elementy krytyczne infrastruktury, takie
jak routery OPNsense i przełączniki sieciowe, posiadają redundantne
linie zasilania oparte o podwójny system UPS oraz niezależne
zasilacze 12 V. Komentarz:
Niezależnie od samej dystrybucji 12 V
problemem pozostaje dostęp do zasilania 230 V. W budynku nie ma
możliwości poprowadzenia całkowicie separowanych linii energetycznych,
dlatego musiałem oprzeć się na własnych rozwiązaniach.
Serwerownia wykorzystuje
podwójny system UPS, z którego zasilane są
główne zasilacze infrastruktury. Awaria lub całkowite
odłączenie jednego UPS-a nie powoduje przerwy w pracy —
elektroniczny przełącznik aktywnej linii 230 V automatycznie przełącza
zasilanie na drugi lub trzeci działający układ. Bardzo ułatwia to
również konserwację i testowanie samych UPS-ów
(dowolny UPS można wyłączyć w celu konserwacji).
Na poziomie infrastruktury krytycznej,
odpowiedzialnej za dostęp do sieci zewnętrznej, redundancja została
dodatkowo rozszerzona. Linie 12 V są tam podwojone i trafiają do
elektronicznego przełącznika opartego o diody Schottky. Dzięki temu
oddzielny zasilacz jest w stanie utrzymać pracę kluczowych
elementów nawet w przypadku awarii głównego
zasilacza.
• Zaleta: Duży bufor
akumulatorowy i przetrwanie awarii sieci energetycznej.
Fakty:
Serwerownia posiada rozbudowany system
UPS oraz dodatkowe bloki akumulatorów umożliwiające
wielogodzinną pracę podczas zaniku zasilania. Komentarz:
UPS-y oraz dodatkowe baterie / bloki
akumulatorów pozwalają utrzymać pracę serwerowni mimo braku
zasilania przez kilka godzin (zwykle ok. 3–5 godzin). Na
szczęście moje miasto ma całkiem stabilną sieć energetyczną i dłuższe
awarie zdarzają się głównie podczas remontów
infrastruktury lub poważniejszych zdarzeń, takich jak pożary w okręgu
zasilania. Mimo obecnego
systemu UPS nadal rozważam przejście w kierunku pełniejszego zasilania
bezpośrednio z linii 12 V oraz dużych akumulatorów
pracujących poza klasycznym układem UPS.
•
Miniaturyzacja dysków: droga do dużych oszczędności
energetycznych.
Fakty:
W serwerowni zjk.pl szeroko
wykorzystywane są dyski 2,5 cala. Ich główną zaletą jest
niski pobór energii oraz łatwość zabudowy w obudowach
mini-ITX. Komentarz:
Dyski 2,5 cala przez lata kojarzone były głównie ze sprzętem
mobilnym — laptopami, miniaturowymi komputerami czy
platformami NUC. Nie oznacza to jednak, że są nietrwałe. Wręcz
przeciwnie — dzięki mniejszym rozmiarom oraz konstrukcji
projektowanej z myślą o urządzeniach przenośnych często dobrze znoszą
wieloletnią pracę ciągłą, wibracje i zmiany temperatury. W mojej
serwerowni wiele takich dysków pracuje już ponad 10 lat.
Największą zaletą pozostaje jednak
energooszczędność. Typowy dysk 3,5 cala potrafi pobierać kilkanaście
watów energii, szczególnie podczas rozruchu i
intensywnej pracy. Tymczasem dysk 2,5 cala zwykle potrzebuje jedynie
kilku watów zasilania 5 V. Przy większej liczbie
napędów różnica staje się bardzo wyraźna
— dwa duże dyski mogą pobierać niemal 40–50 W,
podczas gdy dwa małe wymagają jedynie około 10 W.
W praktyce ma to ogromne znaczenie w
środowisku opartym o mini-ITX oraz samochodowe obudowy komputerowe.
Zresztą — nie
ma tam miejsca na ciężkie magazyny 3,5 cala, natomiast bez problemu
mieszczą się dwa lub więcej dysków 2,5 cala. Dzięki temu
możliwe było utrzymanie bardzo zwartej konstrukcji całej serwerowni
przy jednoczesnym ograniczeniu ilości wydzielanego ciepła oraz
kosztów zasilania.
To kolejny przykład filozofii projektu zjk.pl — nie chodzi o
budowę infrastruktury „enterprise za wszelką cenę”,
lecz o rozsądny dobór technologii do rzeczywistych potrzeb i
warunków pracy domowego klastra.
IV. Sieć i Redundancja: Walka o każdy pakiet
Fakty:
Infrastruktura sieciowa zjk.pl
wykorzystuje redundantne firewalle OPNsense z CARP i HAProxy,
podwójne switche oraz agregację łączy LACP dla większości
serwerów. Komentarz:
Dostęp do Internetu realizowany jest
przez dwa firewalle OPNsense pracujące w trybie failover z
wykorzystaniem protokołu CARP. Dodatkowo HAProxy odpowiada za
równoważenie ruchu i kontrolę dostępności usług działających
na wielu serwerach jednocześnie.
Sieć wewnętrzna została oparta o dwa
fizyczne switche. Główny przełącznik obsługuje normalny ruch
infrastruktury, natomiast drugi pełni rolę awaryjnego fallbacku w
przypadku uszkodzenia podstawowego urządzenia.
Standardem dla większości
serwerów stała się również agregacja łączy LACP
(LAGG na FreeBSD), zwiększająca odporność infrastruktury na awarie
okablowania oraz poprawiająca przepustowość komunikacji między
serwerami. Całość była
projektowana z myślą o ograniczaniu pojedynczych punktów
awarii oraz możliwości prowadzenia prac konserwacyjnych bez całkowitego
zatrzymywania infrastruktury.
• Brzeg
sieci: Zdublowany OPNsense (CARP) i HAProxy.
Fakty:
Dostęp do Internetu realizowany jest
przez redundantne firewalle OPNsense wykorzystujące CARP, HAProxy oraz
dwa niezależne łącza od różnych dostawców. Komentarz:
Pomysł na
zdublowaną sieć dostępową pojawił się jeszcze w czasach
komputerów przemysłowych pracujących w serwerowni.
Największym problemem był wtedy brak oddzielnych interfejsów
Ethernet, a pierwsze testy nie dawały przekonania, że całość będzie
działała stabilnie. Po wielu
latach wróciłem do pomysłu i ponownie zbudowałem środowisko
testowe — dwa symulowane łącza dostawców oraz
wspólna sieć wewnętrzna. Tym razem rozwiązanie zaczęło
działać poprawnie :) Szybko pojawiło się jednak kolejne pytanie
— cóż mi po dwóch dostawcach Internetu,
skoro awarii może ulec sam komputer dostępowy?
Odpowiedzią okazał się drugi firewall
synchronizujący stany połączeń oraz przejmujący adresy IP uszkodzonej
maszyny. W świecie FreeBSD rolę tę pełni CARP.
Z czasem podobne problemy zaczęły
pojawiać się również wewnątrz infrastruktury —
zarówno przy awariach pojedynczych kabli, jak i całych
serwerów obsługujących konkretne usługi lub storage. CARP
pojawiał się więc w kolejnych miejscach sieci.
I tutaj zaczynają się praktyczne
problemy. CARP (czy linuxowy odpowiednik VRRP) świetnie działa w
prostych, uporządkowanych środowiskach lub na wydzielonych segmentach
sieci. W realnej infrastrukturze, gdzie jednocześnie pracują usługi
WWW, poczta, użytkownicy wewnętrzni i mechanizmy HA — zaczyna
pojawiać się chaos trudny do pełnego uporządkowania.
Oczywiście idealnym rozwiązaniem byłoby
dalsze wydzielanie segmentów sieci i prawdopodobnie pojawi
się ono przy kolejnej przebudowie infrastruktury. Jednak w obecnym
środowisku zdarzały się sytuacje, gdy CARP po prostu się
„gubił”.
Dlatego dla najbardziej krytycznych elementów infrastruktury
czasem lepiej sprawdzają się własne skrypty monitorujące stan sieci i
przenoszące alias IP pomiędzy interfejsami Ethernet.
Podobna filozofia stoi za dużą rolą
HAProxy w zjk.pl. Lepiej polegać na zewnętrznym mechanizmie oceny stanu
usługi niż na „wewnętrznym przekonaniu” samej
maszyny, że wszystko działa poprawnie. HAProxy stale testuje serwery i
kieruje ruch wyłącznie do tych, które rzeczywiście
odpowiadają stabilnie. Obecnie
OPNsense stał się jednym z kluczowych elementów stabilności
całego środowiska. Serwerownia korzysta z dwóch niezależnych
łączy różnych operatorów i różnych
technologii dostępu (kabel TV oraz światłowód). OPNsense
rozdziela ruch algorytmem Round-Robin ze Sticky Connections.
HAProxy kieruje natomiast ruchem do:
serwerów WWW (4 maszyny), PostgreSQL Hot
Redundancy (3 maszyny), MySQL Cluster Replication (5 maszyn),
SeaweedFS (3 mastery). Dzięki
gotowemu do przejęcia pracy drugiemu firewallowi OPNsense
infrastruktura działa bardzo stabilnie. Odpowiednie wpisy DNS powodują,
że oba zewnętrzne adresy IP są jednocześnie wykorzystywane
zarówno przez WWW (podwójne rekordy A), jak i
usługi pocztowe (mail oraz mail2).
•
Topologia: Przejście na dwa fizyczne switche (zarządzalny + fallback -
ten niedługo będzie zastąpiony przez drugi zarządzalny).
Fakty:
Infrastruktura
wykorzystuje główny switch zarządzalny oraz dodatkowy
awaryjny switch fallback zapewniający podstawową komunikację z
Internetem w przypadku uszkodzenia głównego przełącznika. Komentarz:
Uszkodzenie
głównego switcha to dla serwerowni awaria katastrofalna
— praktycznie eliminuje całą infrastrukturę z działania. Tego
typu uszkodzeń trudno uniknąć lub wcześniej przewidzieć, dlatego
pozostaje głównie minimalizowanie ryzyka.
Stosuję switch 24+2 porty. Mimo
zapewnień producenta o braku konieczności dodatkowego chłodzenia
zdecydowałem się dodać do switcha trzy małe wentylatory 4 cm
umieszczone przy bocznej kratce wentylacyjnej. Przyznam, że sam byłem
zaskoczony skutecznością tego rozwiązania — zamiast bardzo
gorącej obudowy switch jest teraz po prostu wyraźnie ciepły, ale już
nie „parzący”.
Pozostaje jednak pytanie: co zrobić, gdy
główny switch mimo wszystko ulegnie uszkodzeniu?
Docelowo chciałbym posiadać drugi pełny
switch zarządzalny, jednak obecnie nie mam jeszcze miejsca na taką
rozbudowę infrastruktury. Dlatego przyjąłem inną strategię
bezpieczeństwa — skoro po awarii głównego switcha
i tak większość usług przestanie działać, najważniejsze staje się
zachowanie podstawowej łączności ze światem zewnętrznym.
Tę rolę przejmuje drugi, niewielki
switch awaryjny, który łączy wyłącznie kluczowe elementy
infrastruktury: OPNsense, modemy oraz sieć Wi-Fi. Dzięki temu nawet
przy poważniejszej awarii nadal możliwa pozostaje podstawowa
komunikacja i administracja serwerownią.
• Warstwa L2: Agregacja łączy (LACP) jako standard na każdym
węźle.
Fakty:
Każdy
serwer w infrastrukturze zjk.pl wykorzystuje podwójne łącza
Ethernet pracujące w agregacji LACP/LAGG. Mechanizmy agregacji
wykorzystywane są również w innych elementach infrastruktury
sieciowej. Komentarz:
Opisywana wcześniej agregacja LAGG /
LACP jest podstawą działania serwerów — każdy z
nich posiada podwójne łącze Ethernet. W praktyce oznacza to
obecnie 16 kabli sieciowych, co wynika bezpośrednio z możliwości
switcha zarządzalnego, obsługującego maksymalnie 8 grup agregacji.
Nawiasem mówiąc, wykonywałem
również eksperymenty z poczwórnymi grupami LAGG.
Takie rozwiązania działają poprawnie, choć w warunkach domowej
serwerowni ich praktyczna użyteczność jest już znacznie mniejsza.
Warto też zauważyć, że LAGG w mojej
sieci występuje w kilku różnych odmianach, nie tylko jako
klasyczne LACP. Wykorzystywany jest również tryb loadbalance
pomiędzy switchem a aktywnym OPNsense, a także failover —
przykładowo dla komputera osobistego, gdybym chciał korzystać z niego
poza biurkiem i automatycznie przełączać go pomiędzy Ethernetem a Wi-Fi.
Zachęcam do dokładniejszego poznania
mechanizmów LAGG/LACP, ponieważ dla osób
interesujących się sieciami komputerowymi kryje się tam naprawdę wiele
bardzo ciekawych możliwości.
V. Dane
i Storage:
Klastry w praktyce
Fakty:
Architektura przechowywania danych
wykorzystuje równolegle kilka technologii storage i baz
danych. Podstawowym systemem plików magazynów
danych jest ZFS. Rozproszone przechowywanie plików realizuje
klaster MooseFS (7 węzłów) oraz SeaweedFS dla
obiektów i multimediów. Warstwa bazodanowa
wykorzystuje PostgreSQL Hot Redundancy (3 maszyny), MySQL Cluster
Replication (5 maszyn) oraz Redis (6 maszyn) z obsługą przez HAProxy i
Sentinel. Komentarz:
Architektura przechowywania danych opiera się na hybrydowym podejściu
wykorzystującym kilka równoległych systemów
plików i baz danych o różnej charakterystyce.
Tradycyjne pliki stron WWW, konfiguracje oraz operacje zgodne z POSIX
obsługuje wysoko dostępny klaster MooseFS rozproszony na siedem
węzłów. Do przechowywania cięższych obiektów i
multimediów wdrożono niezależny klaster SeaweedFS,
zoptymalizowany pod kątem dużej liczby plików i wysokiej
wydajności transferu (3 mastery i 7 filerów). Warstwa
bazodanowa i cache to 5 maszyn MySQL Cluster Replication, 3 PostgreSQL
Hot Redundancy oraz 6 maszyn Redis współpracujących z
HAProxy i Sentinel.
• ZFS: podstawowy
system plików w magazynach danych
Fakty:
Podstawowym systemem plików
wykorzystywanym w magazynach danych zjk.pl jest ZFS. Komentarz:
UFS2 wywodzi się
jeszcze z bardzo starego FFS i nadal dziedziczy wiele jego zalet oraz
wad. Pamiętam przejście z UFS1 na UFS2 — kopiowanie i
usuwanie plików przyśpieszyło wtedy radykalnie. Jednak jako
system plików dla serwera UFS ma pewną istotną wadę: po
niespodziewanym restarcie mogą pojawić się błędy uniemożliwiające
poprawny start systemu. Wtedy nie zawsze pomaga automatyczne
sprawdzanie dysków przy starcie i system potrafi zatrzymać
się z koniecznością ręcznego fsck. Samo fsck dla terabajtowych
dysków trwa niezwykle długo —
jeśli zawierają wiele małych plików: do kilku godzin.
ZFS zachowuje się inaczej — zwykle uruchamia się poprawnie
nawet po awarii. Oczywiście do momentu naprawdę poważnych uszkodzeń. Co
ciekawe, UFS praktycznie zawsze daje się ostatecznie naprawić,
natomiast ZFS działa bardziej „zerojedynkowo”
— albo wszystko działa świetnie, albo pool może nie dać się
już zaimportować mimo restartów i prób
odzyskiwania (importowania).
ZFS to jednak znacznie więcej niż system plików o
„zetowej” pojemności. To właściwie druga warstwa
zarządzania powierzchnią dyskową: szyfrowanie, kompresja, snapshoty,
RAIDZ, eksport i import całych struktur danych, a nawet przesyłanie ich
przez sieć. Szczególnie wysoko oceniam RAIDZ —
łączy klasyczny RAID z rozproszonymi sumami kontrolnymi i mechanizmami
odbudowy danych (stosuję RAIDZ2). Majstersztyk.
• MooseFS: 7 węzłów dla plików WWW i
POSIX (/usr/home)
Fakty:
Rozproszone przechowywanie danych POSIX
oraz katalogów współdzielonych realizuje klaster
MooseFS działający na 7 węzłach. Komentarz:
Przechowywanie, udostępnianie i
archiwizacja danych to podstawowe zadania każdego mini-DataCenter.
Klasyczny NFS rodzi jednak wiele problemów — od
ograniczeń pojedynczych dysków, po problemy z montowaniem
udziałów podczas startu systemu. Nawet RAID pozostaje
pojedynczym punktem awarii, a jego rebuild lub przywracanie danych z
backupu zawsze wymaga czasu.
Po dłuższym namyśle zdecydowałem się na polskie rozwiązanie —
MooseFS. System ten łączy przestrzeń dyskową wielu
komputerów w jeden wspólny zasób, z
możliwością zabezpieczenia danych przez multiplikację lub EC (Erasure
Coding). Szczególnie ważna jest odporność na awarie
dysków. Miałem
sytuacje uszkodzenia dysków i przyznam, że ogromny
spokój daje obserwowanie, jak MooseFS sam odbudowuje
brakujące dane i przywraca właściwy poziom replikacji — bez
nerwowego odtwarzania backupów czy oczekiwania, czy RAID
przeżyje rebuild. MooseFS jest
przy tym wyjątkowo stabilny. Problemy mogą pojawić się przy
przeciążeniu sieci i chunkserverów, ale mastery i
metaloggery w mojej infrastrukturze nigdy nie zawiesiły się ani nie
resetowały. Dodatkową zaletą
jest wygodne współdzielenie zasobów pomiędzy
wieloma komputerami — np. katalogów /usr/home czy
wspólnej przestrzeni roboczej dla kilku serwerów
WWW korzystających z tych samych danych.
• SeaweedFS: równoległy klaster dla
obiektów i multimediów
Fakty:
Do przechowywania obiektów i
dużej liczby małych plików wykorzystywany jest niezależny
klaster SeaweedFS. Komentarz:
MooseFS ma jedną charakterystyczną cechę
wynikającą z jego architektury — każdy plik przechowywany
jest w osobnym chunku. Przy bardzo dużej liczbie niewielkich
plików czas dostępu zaczyna mieć znaczenie.
SeaweedFS działa podobnie, ale
przechowuje wiele plików wewnątrz większych
bloków danych. Dzięki temu znacznie lepiej radzi sobie z
ogromną liczbą małych plików.
Aktualnie testuję, na ile SeaweedFS może
częściowo zastąpić MooseFS przy obsłudze setek tysięcy niewielkich
plików wykorzystywanych przez Apache. W zależności od
sposobu liczenia moje strony WWW to obecnie od 400 do 800 tysięcy
plików o łącznym rozmiarze od około 15 do 80 GB.
• Bazy danych PostgreSQL Hot Redundancy (3 maszyny) oraz MySQL
Cluster Replication (5 maszyn)
Fakty:
Infrastruktura wykorzystuje klaster
PostgreSQL Hot Redundancy oraz MySQL Cluster Replication
synchronizowane i nadzorowane przez HAProxy. Komentarz:
Każde data-center wcześniej czy
później sprowadza się do baz danych. Wybór
odpowiedniego rozwiązania nie może być przypadkowy.
SQLite jest niezwykle szybka i prosta,
ale przy dużych bazach stosunkowo łatwo ją uszkodzić podczas awarii lub
restartu systemu. Naprawa bywa możliwa, ale nie zawsze kończy się
pełnym sukcesem. W przypadku
bardziej krytycznych zastosowań stosuję PostgreSQL. Dobrym przykładem
jest Bareos, który musi przechowywać informacje o milionach
zarchiwizowanych plików. Tutaj pomyłki są niedopuszczalne.
SeaweedFS również preferuje
PostgreSQL, szczególnie w bardziej rozbudowanych
konfiguracjach. Dodatkowo dochodzi problem split-brain w środowiskach
multimaster. Dlatego zastosowałem klaster PostgreSQL Hot Redundancy
składający się z trzech maszyn — jednego mastera i
dwóch replik. Nad całością czuwa HAProxy, zapewniający
wspólny punkt dostępu dla zapisów i
odczytów. Klaster
MySQL powstał z nieco innej potrzeby. To klasyczny
„wół roboczy” dla aplikacji WWW
— szybki, względnie prosty i dobrze sprawdzający się pod
dużym obciążeniem. Dane z mastera replikowane są na cztery pozostałe
maszyny, a mechanizmy klastra umożliwiają weryfikację poprawności
danych przy rozbieżnościach pomiędzy węzłami. Także tutaj całość
nadzoruje HAProxy.
• Cache Redis (6
maszyn) tunelowany przez Stunnel
Fakty:
System cache oparty jest o Redis
działający w konfiguracji 1 master + 5 replik z nadzorem Sentinel i
HAProxy. Komentarz:
Udostępnianie stron WWW jest procesem znacznie bardziej złożonym niż
samo wysłanie pliku do przeglądarki użytkownika. Kluczowe znaczenie ma
szybkość dostępu do danych i mechanizmy cache.
Apache posiada własne systemy
przyśpieszania pracy, jednak dodatkowo wykorzystuję Redis jako bardzo
szybki cache pamięciowy. System działa w konfiguracji jednego mastera
oraz pięciu serwerów replikujących.
Nad spójnością całości czuwa
Sentinel monitorujący stan klastra, natomiast HAProxy automatycznie
kieruje ruch do aktualnie aktywnego serwera Redis. Tunelowanie ruchu
przez Stunnel pozostaje obecnie w fazie testów.
VI. Bezpieczeństwo potwierdzone danymi
Fakty:
Infrastruktura zjk.pl utrzymuje wysokie
wyniki w niezależnych audytach bezpieczeństwa, m.in. SSL Labs A+ oraz
Security Headers A. Systemy są stale monitorowane, regularnie
aktualizowane i rozwijane bez konieczności pełnych reinstalacji. Komentarz:
Miarą skuteczności
zabezpieczeń nie są deklaracje administratora, ale niezależne testy i
praktyczna stabilność działania. Serwery zjk.pl od lat utrzymują
wysokie wyniki w audytach SSL Labs oraz Security Headers.
Infrastruktura jest stale monitorowana, a wszelkie anomalie lub
problemy zwykle wychwytywane są bardzo szybko.
O stabilności FreeBSD najlepiej świadczy
fakt, że przez ponad 20 lat działania serwerowni system przeszedł tylko
jedną pełną reinstalację — jeszcze w czasach wersji 5.3.
Wszystkie późniejsze aktualizacje systemu i aplikacji
wykonywane były „w locie”, bez budowania środowiska
od zera. W praktyce upgrade sprzętu zwykle polegał na
przeniesieniu danych na nowe dyski lub dysków do nowego
sprzętu niż na reinstalacji całych systemów.
• Audyty: SSL Labs A+ i Security Headers A na własnym sprzęcie
Fakty:
Serwery regularnie
osiągają wysokie wyniki w zewnętrznych audytach bezpieczeństwa i
konfiguracji usług. Komentarz:
Nie ma w tym żadnej tajemnicy
— podstawą jest systematyczna praca i brak założenia, że
skoro „jakoś działa”, to wszystko jest już dobrze
skonfigurowane. Bardzo ważne
są zewnętrzne audyty. Nawet jeśli to tylko strona testowa lub opinia
użytkownika, pozwalają spojrzeć na własną infrastrukturę z zewnątrz.
Pokazują nie tylko błędy, ale także kierunek dalszej poprawy i poziom,
do którego można dążyć.
Czasami najprostsze testy okazują się
najcenniejsze. Zwykły ping, próba pobrania strony WWW czy
połączenia z pocztą potrafią ujawnić problemy, których od
środka infrastruktury w ogóle nie widać.
Mogę podsumować to jednym słowem
— polecam.
• Monitoring: Jak
pilnowany jest stan serwerowni
Fakty:
Infrastruktura wykorzystuje
wielowarstwowy monitoring oparty o raporty systemowe, własne skrypty,
narzędzia analityczne oraz obserwację pracy serwerów. Komentarz:
Każda metoda
monitoringu jest dobra — pod warunkiem, że jest ich wiele i
wzajemnie się uzupełniają.
Podstawą są codzienne raporty mailowe z serwerów. Nawet
pobieżne ich przeglądanie pozwala szybko zauważyć anomalie. Dla
bardziej krytycznych usług polecam własne skrypty kontrolujące stan
aplikacji i wysyłające alerty — u mnie dotyczy to m.in.
SeaweedFS czy PostgreSQL. Na
serwerach praktycznie stale uruchomiony jest top, htop lub atop. Z
czasem administrator zaczyna intuicyjnie rozpoznawać normalny stan
pracy systemów.
Najchętniej stosuję mój 16 portowy przełącznik KVM - szybkie
przełączanie od razu z dostępem do kilku przełączanych konsol na każdym
komputerze. Cenne są
również raporty historyczne generowane przez narzędzia takie
jak Monitorix, MRTG czy Symon. Szczególnie lubię codzienne
wykresy Monitorixa — pozwalają szybko zauważyć zmiany
obciążenia lub nietypowe zachowanie serwerów.
Testowałem także cięższe systemy
monitoringu, np. Zabbixa. Nadal go polecam, ale w moim przypadku
generował zbyt dużą ilość danych i alarmów, które
z czasem bardziej przeszkadzały niż pomagały.
Po wielu latach pracy pojawia się też
inny rodzaj monitoringu — administrator zaczyna słyszeć
serwerownię. Czasem wystarczy minimalnie głośniejszy wentylator albo
lekko zmieniony szum powietrza, żeby wiedzieć, że któryś
komputer jest bardziej obciążony niż zwykle.
A jeśli zwykły użytkowy komputer
któregoś z domowników zaczyna
„przycinać” pocztę, transfer plików lub
strony WWW — to także sygnał, że warto sprawdzić stan całej
infrastruktury.
• Backup
Fakty:
System backupu wykorzystuje
równolegle kilka mechanizmów: dump, Bareos,
UrBackup oraz narzędzia do tworzenia obrazów
systemów. Komentarz:
Trzeba mieć backup. Trzeba mieć kopię
zapasową. Trzeba mieć archiwum. Jeszcze ważniejsze jest jednak to, żeby
dało się z nich łatwo i szybko skorzystać.
Struktura backupów w zjk.pl
jest wielowarstwowa. Podstawą
pozostaje klasyczny dump — niedoceniany, ale nadal bardzo
skuteczny i prosty mechanizm. Wiele moich własnych skryptów
opiera się właśnie na nim. Do
backupów codziennych i tygodniowych świetnie sprawdza się
Bareos, szczególnie przy odzyskiwaniu pojedynczych
plików. UrBackup bardzo dobrze nadaje się natomiast do
tworzenia obrazów całych systemów.
W przypadku Windows nawet podstawowe
mechanizmy systemowe są już sensownym zabezpieczeniem, choć dodatkowo
dla komputerów osobistych korzystam z SyncBackPro oraz
EaseUS Todo Backup, który bardzo dobrze radzi sobie z
wykonywaniem obrazów systemu.
• Ciągłość: Jedna reinstalacja i 20 lat aktualizacji
„w locie”
Fakty:
Przez ponad 20 lat działania
infrastruktura przeszła tylko jedną pełną reinstalację systemu.
Aktualizacje systemów i aplikacji wykonywane są regularnie
bez zatrzymywania całego środowiska. Komentarz:
To prawda — pełna reinstalacja
była tylko jedna (dla v 5.3). Miałem wtedy backup, ale
równocześnie pojawił się problem z odczytem dysku
ratunkowego i ostatecznie system trzeba było odtworzyć od początku.
Znacznie ciekawsze są jednak same
początki aktualizacji FreeBSD. W tamtych latach praktycznie wszystko
kompilowało się ręcznie. Dostępnych źródeł wiedzy było
niewiele, a aktualizacja większej liczby programów mogła
zajmować nawet tydzień lub dwa.
Później przez wiele lat
korzystałem z Poudriere do budowy własnych pakietów dla
różnych konfiguracji serwerów. Dziś sytuacja jest
znacznie wygodniejsza — system pkg w FreeBSD jest naprawdę
świetny. Najważniejsze
pozostaje jednak regularne aktualizowanie aplikacji. To kwestia
zarówno bezpieczeństwa, jak i stabilności działania.
Co tydzień wykonuję pełny upgrade
aplikacji. Dzięki temu łatwo kontrolować, które usługi
wymagają restartu, bez konieczności restartowania całych
serwerów. Unika się też problemów z zależnościami
i nagromadzeniem zmian.
Aktualizacja wykonywana raz w roku staje się bardzo trudna —
jednocześnie pojawiają się nowe wersje wielu programów,
zmiany konfiguracji i problemy kompatybilności. Nawet jeśli sam upgrade
się powiedzie, często kończy się kilkoma dniami naprawiania usług.
Znacznie łatwiej robić to
systematycznie. W jednym tygodniu aktualizowany jest Perl, w kolejnym
PostgreSQL, a kilka tygodni później trzeba sprawdzić nową
konfigurację Dovecota. Takie podejście jest po prostu spokojniejsze i
bezpieczniejsze.
VII.
Pokora: Ciemna strona
złożoności
Fakty:
Rozbudowane mechanizmy redundancji i wysokiej dostępności zwiększają
odporność infrastruktury, ale jednocześnie podnoszą poziom jej
złożoności. W zjk.pl regularnie wykonywane są zarówno
aktualizacje oprogramowania, jak i fizyczna konserwacja całego klastra. Komentarz:
Budowa
zaawansowanej serwerowni bardzo łatwo prowadzi do pułapki
„Complexity Penalty” — sytuacji, w
której kolejne warstwy zabezpieczeń i redundancji same
zaczynają generować nowe problemy. Mechanizmy wysokiej dostępności
potrafią znacząco zwiększyć odporność systemu, ale jednocześnie
komplikują diagnostykę, utrudniają przewidywanie zachowań sieci i mogą
prowadzić do zjawisk takich jak split-brain. W praktyce często okazuje
się, że rozwiązanie prostsze bywa stabilniejsze od teoretycznie
bardziej „idealnego”.
Dlatego równie ważna jak sama
wiedza techniczna staje się umiejętność zachowania rozsądku i prostoty
tam, gdzie jest ona możliwa. Każdy dodatkowy element infrastruktury to
potencjalne nowe źródło awarii, dodatkowe zależności i
większa odpowiedzialność administratora.
Nad całym środowiskiem zawsze stoi
człowiek — administrator odpowiedzialny nie tylko za
konfigurację, ale również za aktualizacje, monitoring,
konserwację sprzętu i reagowanie na sytuacje awaryjne. Nawet najlepiej
zaprojektowana architektura wymaga regularnej kontroli fizycznej.
Stąd w zjk.pl istnieje coroczny
„Dzień Odkurzacza” — kontrolowane
wyłączenie całego klastra połączone z fizycznym przeglądem
infrastruktury. To moment sprawdzenia wentylatorów,
radiatorów, okablowania, pamięci, baterii podtrzymania
BIOS-u czy stanu złączy zasilania. Przy okazji usuwany jest kurz,
który pozostaje jednym z głównych
wrogów elektroniki pracującej całodobowo.
Dodatkowe planowane wyłączenia wynikają
również z większych aktualizacji systemów
operacyjnych oraz modernizacji oprogramowania. Regularna konserwacja
okazuje się znacznie bezpieczniejsza niż oczekiwanie na pierwszą
poważną awarię.
• Complexity Penalty:
Świadomość, że nagromadzenie zabezpieczeń tworzy nowe ryzyka
(Split-brain).
Fakty:
Wysoka dostępność i tryby multimaster
zwiększają odporność infrastruktury, ale jednocześnie mogą prowadzić do
trudnych do wykrycia błędów synchronizacji, takich jak
split-brain. Komentarz:
Duży zachwyt zwykle towarzyszy
informacjom, że dane oprogramowanie potrafi pracować w trybie
multimaster – czyli sytuacji, gdy kilka maszyn jednocześnie
zarządza tym samym zasobem. W teorii brzmi to idealnie. W praktyce
jednak pojawia się problem split-brain – rozdwojenia stanu
systemu, gdy dwa węzły zaczynają uważać się równocześnie za
nadrzędne. Moje doświadczenia
pokazują, że problem ten wcale nie jest mityczny. Próbowałem
wdrożyć dziś już wycofany system HAST (High Available Storage).
Wystarczyły przeciążenia sieci lub problemy ze sterownikami kart
Ethernet, aby regularnie zrywać komunikację między węzłem master i
slave. Efekt był bardzo nieprzyjemny – split-brain i
konieczność odbudowy całego środowiska od początku.
To jedna z najważniejszych lekcji budowy
własnej serwerowni: rozwiązanie bardziej skomplikowane nie zawsze jest
rozwiązaniem lepszym. Czasem prostsza architektura okazuje się
stabilniejsza, łatwiejsza do utrzymania i po prostu bezpieczniejsza.
• Czynnik ludzki:
Odpowiedzialność administratora
za tak złożony organizm.
Fakty:
Stabilność infrastruktury zależy nie
tylko od sprzętu i oprogramowania, ale również od regularnej
konserwacji, monitoringu i świadomego zarządzania całością środowiska. Komentarz:
Przede wszystkim
nie wolno lekceważyć serwera. Zaniedbany komputer podłączony do
Internetu bardzo szybko staje się źródłem
problemów – od awarii usług po rozsyłanie spamu
czy pogarszanie reputacji całej podsieci.
Odpowiedzialność administratora jest
podobna do odpowiedzialności właściciela samochodu. Czasem słyszy się:
„tylko jeżdżę i leję paliwo”. W praktyce każdy
samochód wymaga przeglądów, wymiany części i
kontroli stanu technicznego. Z serwerami jest dokładnie tak samo.
Dobrze utrzymana maszyna potrafi działać latami bardzo stabilnie, ale
wymaga systematycznej opieki.
W korporacjach podejrzany sprzęt często wymienia się natychmiast na
nowy. W domowej serwerowni częściej działa zasada „chuchać i
dmuchać” – obserwować temperatury, dźwięki
wentylatorów, napięcia, zachowanie dysków i
reagować zanim pojawi się realna awaria.
Największym pojedynczym punktem
zawodności pozostaje jednak jednoosobowa administracja. W praktyce
wszystko zależy od jednej osoby. Chociaż czasem zdarzają się zabawne
sytuacje – zdarzało mi się prosić żonę, humanistkę, aby w
razie długiej awarii prądu po określonym czasie bezpiecznie wyłączyła
serwery. I działało. Może więc redundancja istnieje nawet tam, gdzie
człowiek się jej nie spodziewa.
• Dzień
Odkurzacza: Coroczna konserwacja i kontrolowane wyłączenie klastra.
Fakty:
Raz w roku cała
serwerownia jest planowo wyłączana w celu przeprowadzenia pełnej
konserwacji fizycznej sprzętu. Komentarz:
Raz w roku serwery milkną na kilka
godzin. Obowiązkowe odkurzanie.
Nie jest to wyłącznie kwestia estetyki.
Czyszczenie radiatorów, wentylatorów i
obudów ma bezpośredni wpływ na temperatury pracy, a
temperatura pozostaje jednym z głównych czynników
wpływających na trwałość elektroniki.
Przy okazji wykonywany jest pełny
przegląd techniczny: sprawdzanie oporów
wentylatorów, kontrola napięcia baterii BIOS-u,
przepięcie pamięci RAM, kontrola radiatorów
procesorów, sprawdzenie okablowania wewnętrznego i
zewnętrznego, wymiana elementów budzących
wątpliwości zanim ulegną awarii.
To także dobry moment, by zwyczajnie
posłuchać sprzętu. Po latach pracy administrator zaczyna rozpoznawać
problemy nawet po delikatnej zmianie charakterystyki szumu
wentylatorów czy temperatur obudów.
Dodatkową korzyścią jest fakt, że
wyczyszczony sprzęt pracuje ciszej, chłodniej i stabilniej przez
kolejne miesiące.
VIII.
Sprzęt
podstawą spokoju w serwerowni – jaki sprzęt i oprogramowanie
wybierać?
Fakty:
Infrastruktura zjk.pl budowana jest w oparciu o stabilne i dobrze
wspierane podzespoły komputerowe. Przy wyborze sprzętu kluczowe
znaczenie mają niezawodność, kompatybilność z FreeBSD oraz stabilna
praca ciągła 24/7. Komentarz:
Najważniejsza zasada jest bardzo prosta:
sprzęt ma być dobry i stabilny.
• Dobry sprzęt:
stabilność ważniejsza niż
maksymalna wydajność.
Fakty:
W serwerowni kluczowe znaczenie mają
stabilność, jakość wykonania oraz zgodność sprzętu z systemem
operacyjnym, a nie maksymalna wydajność podzespołów. Komentarz:
Dobry sprzęt nie
musi być najdroższy. Powinien być przede wszystkim przewidywalny i
stabilny. Nie
„gamingowy”, nie ekstremalnie wydajny i nie
najtańszy. Każdy słaby element wcześniej czy później się
mści i staje się źródłem awarii całego środowiska. W
praktyce problemem częściej okazuje się drobny detal —
kiepska wtyczka zasilania, słaby przewód albo niestabilny
zasilacz — niż brak dodatkowych megaherców
procesora. W serwerze nie ma potrzeby
agresywnego podkręcania czy pracy na granicy możliwości sprzętu.
Komputer ma działać stabilnie przez całą dobę, często przez wiele lat
bez restartu. Dodatkowe megaherce zwykle nie mają większego znaczenia,
natomiast ogromne znaczenie ma jakość chłodzenia, niezawodne
połączenia sieciowe, stabilne
zasilanie, kompatybilność
sterowników oraz
przewidywalność pracy całego zestawu.
W mojej serwerowni zdarzały się sytuacje, gdy problemem okazywała się
zwykła wtyczka zasilania za kilka złotych. Potrafiła nagrzewać się przy
niewielkim prądzie, topić od środka, a w skrajnym przypadku doprowadzić
do zwarcia linii zasilających. Takie doświadczenia bardzo szybko uczą
szacunku do jakości wykonania nawet najdrobniejszych
elementów infrastruktury. Każdy
słaby element potrafi po latach stać się przyczyną trudnej do wykrycia
awarii.
Jednocześnie bardzo drogi sprzęt serwerowy często nie ma większego
sensu w domowym data-center. Serwer nie jest komputerem do
benchmarków czy overclockingu. Nie musi osiągać rekordowych
wyników wydajności – ma pracować spokojnie, cicho
i stabilnie przez całą dobę.
Przy wyborze sprzętu dla FreeBSD bardzo ważna jest zgodność
sterowników oraz wsparcie systemowe. Linux posiada zwykle
szerszą bazę obsługiwanych urządzeń, dlatego niektóre nowe
lub egzotyczne konstrukcje mogą działać tam łatwiej. W praktyce oznacza
to konieczność spokojnego sprawdzenia kompatybilności przed zakupem
sprzętu do serwera.W przypadku FreeBSD zawsze
warto najpierw przed zakupem sprawdzić listę wspieranego
sprzętu. Linux ma zwykle lepsze wsparcie sterowników,
dlatego nie każdy nowoczesny układ będzie działał równie
dobrze na obu systemach.
Paradoksalnie problemem potrafi być też sprzęt „zbyt
energooszczędny”. Mechanizmy agresywnego oszczędzania energii
mogą usypiać urządzenia, powodować zrywanie transmisji lub
destabilizować pracę usług sieciowych. Problemy
potrafią sprawiać także urządzenia fabrycznie projektowane z przesadnym
naciskiem na oszczędność energii. Zbyt agresywne mechanizmy usypiania
interfejsów, procesorów czy
kontrolerów potrafią powodować zrywanie transmisji,
opóźnienia lub niestabilność usług sieciowych. Dlatego
energooszczędność jest ważna, ale tylko wtedy, gdy nie odbywa się
kosztem stabilności pracy całego środowiska. Jak
zwykle – przesada w żadną stronę nie jest dobra.
•
Analizy i gotowe recepty.
Fakty:
Nie istnieje jedna uniwersalna
konfiguracja sprzętowa lub programowa odpowiednia dla każdej serwerowni. Komentarz:
Nie przedstawię
tutaj gotowych analiz ani jednej „idealnej”
konfiguracji. Pewne wskazówki znajdują się w opisach całej
infrastruktury, ale szczegóły każdy administrator musi
dopracować samodzielnie. Każda
serwerownia działa w innych warunkach: inne są potrzeby
użytkowników, inne obciążenia, inne
budżety, inne wymagania dotyczące bezpieczeństwa,
inne ograniczenia energetyczne i lokalowe.
To, co świetnie sprawdzi się w jednym
środowisku, w innym może okazać się kompletnie niepraktyczne.
• FAQ i poradniki
budowy własnej serwerowni.
Fakty:
Dodatkowe informacje
techniczne oraz praktyczne przykłady znajdują się w działach FAQ i
poradnikach dotyczących budowy własnej serwerowni. Komentarz:
Osoby bardziej zainteresowane tematyką
zachęcam do przejrzenia działu FAQ oraz materiałów
opisujących budowę własnej serwerowni. Znajdują się tam bardziej
praktyczne informacje dotyczące: wyboru sprzętu,
zasilania, chłodzenia, konfiguracji sieci,
magazynów danych, redundancji i
backupów.
• Wybór
oprogramowania: test kompetencji i doświadczenia.
Fakty:
Dobór oprogramowania
serwerowego zależy od doświadczenia administratora, charakteru usług
oraz kompromisu między prostotą i elastycznością konfiguracji. Komentarz:
Nie ma jednej
poprawnej odpowiedzi na pytanie: „jakie oprogramowanie
wybrać?”. To jeden z najtrudniejszych elementów
budowy własnego środowiska.
Dobrym przykładem jest odwieczna dyskusja Apache kontra Nginx. Oba
rozwiązania realizują dokładnie to samo zadanie – obsługę
stron WWW – ale robią to w zupełnie inny sposób.
Jedni administratorzy uwielbiają Apache
za ogromną elastyczność konfiguracji. Inni wskazują wydajność i
prostotę Nginxa. Jeszcze inni proponują rozwiązanie kompromisowe: Nginx
jako szybkie proxy na pierwszej linii, a Apache jako backend
obsługujący właściwe aplikacje. I każda z tych grup ma rację
– wszystko zależy od konkretnego zastosowania.
Jeśli miałbym dać jedną praktyczną radę,
byłaby ona bardzo prosta: nie wybieraj oprogramowania ani zbyt
prostego, ani przesadnie skomplikowanego.
Zbyt proste rozwiązania często wykonują
wiele operacji poza kontrolą administratora albo ograniczają możliwości
konfiguracji. Zbyt skomplikowane tworzą natomiast sztuczne bariery i
wymagają ogromnego nakładu pracy administracyjnej.
Pamiętam sytuację sprzed ponad 20 lat,
gdy przez kilka lat próbowałem skonfigurować DNS i DHCP przy
użyciu pewnego programu. Próby były regularnie ponawiane i
problem nie wynikał z braku wiedzy. Po prostu konfiguracja była
nieintuicyjna i bardzo trudna. W końcu przesiadłem się na inne
rozwiązanie – i wszystko uruchomiło się dosłownie w kilka
minut. To doświadczenie nauczyło mnie, że czasem warto zmienić
narzędzie zamiast bez końca walczyć z jego ograniczeniami.
• Dlaczego
nie wirtualizacja?
Fakty:
Zastosowanie jednego komputera z
32–128 rdzeniami jest pozornie prostsze. Uruchamiamy pakiet
wirtualizujący, kilka maszyn na tej platformie, całość wygląda i działa
zachęcająco. Rozwiązanie zajmuje mniej miejsca, wymaga mniejszej liczby
kabli, a zarządzanie jest wygodne i scentralizowane.
W takim modelu wiele maszyn wirtualnych
współdzieli te same zasoby sprzętowe: pamięć operacyjną,
dyski oraz interfejsy sieciowe. W dużych serwerowniach problem ten
rozwiązuje się między innymi poprzez stosowanie szybkich kart
sieciowych (10 Gb/s i więcej), wydajnych macierzy dyskowych oraz
serwerów wyposażonych w dużą liczbę rdzeni procesora.
Istotną cechą takiej architektury jest
również to, że awaria pojedynczego serwera fizycznego wpływa
jednocześnie na wszystkie maszyny wirtualne uruchomione na tym hoście.
Komentarz autora: Moim zdaniem
przy projektowaniu infrastruktury warto zwracać uwagę nie tylko na
parametry widoczne na pierwszy rzut oka, ale również na
elementy brzegowe i współdzielone zasoby. Jedna pamięć,
jeden zestaw dysków czy jedna pula interfejsów
sieciowych może stać się ograniczeniem, jeśli wiele usług pracuje
intensywnie jednocześnie. Dla
przykładu: nawet podwójne łącze 10 Gb/s zapewnia łącznie 20
Gb/s przepustowości. W przypadku serwera wyposażonego w 32 rdzenie
oznacza to średnio około 0,625 Gb/s przepustowości przypadającej na
rdzeń. Nie jest to oczywiście rzeczywisty podział ruchu sieciowego, ale
dobrze pokazuje skalę współdzielenia zasobów
przez wiele usług działających jednocześnie.
Jeszcze ciekawiej wygląda sytuacja w
przypadku storage. Nie chodzi wyłącznie o przepustowość
dysków czy liczbę nośników, ale
również o liczbę równoczesnych operacji zapisu
wykonywanych przez wiele maszyn wirtualnych. W praktyce oznacza to
konieczność analizowania nie tylko wydajności nominalnej, ale także
rzeczywistych obciążeń oraz potencjalnych wąskich gardeł.
W mojej ocenie właśnie takie elementy
należy liczyć i analizować podczas projektowania infrastruktury.
Parametry procesora, ilość pamięci czy szybkość interfejsów
są ważne, jednak równie istotne jest zrozumienie, co stanie
się w przypadku awarii lub przeciążenia pojedynczego
współdzielonego elementu.
Dla mnie i mojej serwerowni decydującym
argumentem była niezawodność. „Wypadnięcie” jednego
komputera ma niewielki wpływ na działanie całego systemu. Z tego powodu
świadomie wybrałem architekturę opartą na wielu niezależnych serwerach
fizycznych zamiast maksymalnej koncentracji usług na pojedynczej
platformie wirtualizacyjnej.
IX.
Podsumowanie: Miejsce w świecie
Fakty:
Projekt zjk.pl rozwijany jest
niezależnie od korporacyjnych platform społecznościowych, usług
chmurowych oraz systemów telemetrycznych. Infrastrukturę od
ponad dwóch dekad stanowią własne rozwiązania sprzętowe i
programowe oparte głównie o FreeBSD. Komentarz:
Wycofanie się z globalnych
projektów telemetrycznych czy zamkniętych społeczności
internetowych było w przypadku zjk.pl decyzją całkowicie świadomą.
Serwerownia nie powstała dla statystyk, internetowych
rankingów czy popularności w mediach społecznościowych. Jej
celem od początku była przede wszystkim praktyczna inżynieria,
niezależność technologiczna oraz budowa własnego środowiska
działającego według własnych zasad.
W praktyce oznacza to między innymi
rezygnację z uzależniania infrastruktury od zewnętrznych usług
chmurowych, reklam, mechanizmów śledzących czy gotowych
platform narzucających sposób działania całego systemu.
Zamiast tego rozwijane są własne rozwiązania sieciowe, storage, backupu
i monitoringu, utrzymywane lokalnie oraz dostosowywane do rzeczywistych
potrzeb serwerowni. W świecie
coraz silniej zdominowanym przez korporacyjne chmury i scentralizowane
usługi, zjk.pl pozostaje niezależną wyspą techniczną —
rozwijaną konsekwentnie od ponad dwóch dekad, opartą o
własne rozwiązania sprzętowe, własne podejście do bezpieczeństwa oraz
sprawdzone przez lata FreeBSD.
•
Kontekst: Odcięcie się od „dziwnych” statystyk i
zamkniętych społeczności.
Fakty:
Projekt zjk.pl nie jest rozwijany dla
statystyk popularności ani zamkniętych społeczności internetowych.
Priorytetem pozostaje praktyczna użyteczność i niezależność
infrastruktury. Komentarz:
Moje serwery nie pracują dla statystyk.
Próbowałem kiedyś raportować systemy do projektu bsdstats,
jednak liczba widocznych maszyn nigdy nawet w przybliżeniu nie
odpowiadała rzeczywistości. A przecież już sam opis tej serwerowni
pokazuje, że środowisko obejmuje znacznie więcej niż kilka
komputerów. W pewnym momencie człowiek zaczyna więc zadawać
sobie pytanie, jaki faktycznie sens mają takie zestawienia.
Podobnie patrzę na zamknięte
społeczności budowane wokół konkretnych technologii czy
marek. Typu: „mam Forda – robimy własną grupę i
wpuszczamy tylko wybranych”. Oczywiście – jeśli
ktoś lubi, nie ma w tym nic złego. Jednak dla mnie serwery są przede
wszystkim narzędziem. System ma działać dobrze, stabilnie i niezależnie
od tego, kto aktualnie tworzy modną grupę dyskusyjną.
Znacznie większą wartość mają
ogólnodostępne fora i otwarta wymiana wiedzy. Jeśli
zaczynamy zamykać wiedzę wyłącznie wewnątrz prywatnych społeczności, to
coś przestaje działać tak, jak powinno.
• Czy całość nie jest zbyt złożona?
Fakty:
Środowisko zjk.pl posiada wysoki poziom
złożoności logicznej, jednak dzięki lekkiej architekturze bare-metal
utrzymuje bardzo niskie obciążenie zasobów sprzętowych. Komentarz:
I tak, i nie.
Poszczególne konfiguracje
rzeczywiście są złożone. Jednak większość usług działa praktycznie bez
ciężkiej warstwy pośredniej – bez rozbudowanej wirtualizacji
czy ogromnych platform orkiestracyjnych. To w dużej mierze środowisko
bare-metal, dzięki czemu obciążenie maszyn pozostaje bardzo niskie.
Kilka procent użycia procesora,
niewielka kolejka systemowa czy praktycznie pusty swap – to
nie są parametry budzące niepokój. Najbardziej obciążona
pozostaje sieć i to właśnie ona będzie prawdopodobnie jednym z
pierwszych kierunków dalszej modernizacji.
Jednocześnie podział ról
pomiędzy serwerami jest bardzo świadomy. Nie ma przypadkowości:
serwer plików pełni rolę magazynu danych, serwer
WWW obsługuje strony, klastry bazodanowe
realizują zadania baz danych, systemy cache
odpowiadają za przyspieszanie usług, ale serwer
plików nie jest jednocześnie serwerem www, ani serwerem
pocztowym. Oczywiście pewnie
przydałoby się więcej maszyn. Ale sztuką nie jest budowanie
infrastruktury przy nieograniczonych zasobach. Sztuką jest sensowne
wykorzystanie tego, co się posiada.
X.
Wniosek: zjk.pl jako niezależna wyspa techniczna.
Fakty:
Projekt zjk.pl pozostaje niezależną,
autorską infrastrukturą rozwijaną poza dominującym modelem pełnej
wirtualizacji i usług chmurowych. Komentarz:
zjk.pl pozostanie niezależnym portalem i
serwerownią. Zarówno koncepcja sprzętowa, jak i filozofia
oprogramowania będą dalej rozwijane w obecnym kierunku.
Doskonale wiem, że jest to podejście
odmienne od współczesnych trendów opartych niemal
wyłącznie o wirtualizację i publiczne chmury. Jednocześnie właśnie
dlatego projekt ten ma dla mnie dużą wartość – pokazuje, że
podobne cele można osiągnąć również innymi metodami.
Niektóre technologie po
prostu dobrze się starzeją. Z biegiem lat nie tracą wartości, lecz
nabierają dojrzałości i stabilności. Trzeba jedynie umieć wykorzystać
ich mocne strony i świadomie zaakceptować ich ograniczenia.
zjk.pl pozostaje więc alternatywą,
punktem odniesienia i praktycznym dowodem, że klasyczne podejście do
budowy infrastruktury nadal może być skuteczne.
• Zakończenie: Gotowość na 25-lecie.
Fakty:
Projekt zjk.pl wchodzi w 25. rok
publicznej obecności infrastruktury w Internecie. Komentarz:
Pomysł na opis 25-lecia pojawił się dość
niespodziewanie. Poprosiłem kiedyś AI o analizę zawartości strony. Po
zakończeniu odpowiedzi pojawiło się krótkie zdanie:
„gratuluję rocznicy – jak na serwery to wyjątkowy
wiek”.
„Skąd wiesz?” – zapytałem.
Odpowiedź była prosta:
„informacja znajduje się w nagłówku
strony”. I właściwie
od tego wszystko się zaczęło.
Co ciekawe – same serwery faktycznie przekroczyły już ćwierć
wieku pracy. Rok 2027 będzie raczej symbolicznym świętowaniem 25 lat
pełnego wyjścia „na świat” z fizycznym dostępem do
Internetu. Nie będzie wielkich
obchodów. Wystarczy, jeśli śladem po tych latach pozostanie
strona, którą właśnie czytasz.
• Plany.
Fakty:
Infrastruktura zjk.pl jest stale
rozwijana i modernizowana. Komentarz:
Planów nadal jest bardzo dużo:
wymiana serwerów OPNsense na nowsze jednostki,
modernizacja sieci do 2,5 Gb/s lub 10 Gb/s, dalszy
rozwój infrastruktury zasilania 12 V, wdrożenie
elektronicznych dystrybutorów zasilania z pomiarem napięć,
prądów i mocy, dalsze eksperymenty z pełnym
zasilaniem DC, szybsze łącza dostępowe do Internetu,
porządkowanie usług i podziału zasobów, rozbudowa
archiwów dyskowych, możliwy powrót do
poudriere, dalsze rozwijanie własnych skryptów
administracyjnych. Bo w
praktyce każda dobrze działająca serwerownia zawsze znajduje się
„w trakcie następnej modernizacji”.
zjk.pl
– 24 Years of Engineering and Technology: Evolution of a
Private FreeBSD Ecosystem
I.
Introduction: 24 Years of Digital Sovereignty.
Facts:
The private zjk.pl server infrastructure
has been operating continuously since 2002 and has been based on the
FreeBSD operating system from the very beginning. Commentary:
Everything began at the turn of the
century with a simple idea and a conscious decision to choose FreeBSD
as the foundation for an independent private server. For more than two
decades, the mission of the project has remained the provision of pro
bono services for the local community and maintaining an Internet space
free from advertisements, tracking scripts and corporate surveillance.
This is not another temporary project
built from a ready-made tutorial, but a custom environment developed
consistently for a quarter of a century. During this time, the
infrastructure evolved from individual services into a distributed
ecosystem of physical, virtual and storage servers operating 24/7/365.
A quarter of a century of stable
operation demonstrates that private infrastructure can still
effectively compete with cloud solutions while maintaining full
technological autonomy and control over data.
•
Starting Point: The Year 2002 and the Decision to Choose FreeBSD.
Facts:
The official launch of the
infrastructure with Internet access took place in 2002. FreeBSD has
remained the primary operating system since the beginning of the
project. Commentary:
„25 years” is a
highly approximate number. My first work with FreeBSD began around
1998/1999. The greatest obstacle at that time was neither the hardware
nor the operating system, but the lack of widely available Internet
access. The only realistic option was ISDN, which seemed too limited
for the planned infrastructure.
Despite many attempts and inquiries with
providers, Internet access became available in my building only in 2002
— and I adopted this date as the official start of the
servers. In practice, the first machines were already operating
earlier, around 2000/2001.
It is worth emphasizing that the choice
of FreeBSD was a conscious decision from the very beginning, not the
result of random testing. I knew what I expected from the system:
stability, predictability and a professional approach to
administration. It was meant to be demanding — and it remains
so to this day.
•
Mission: An Internet Without Advertisements, Trackers and Pro Bono
Service for the Community.
Facts:
The zjk.pl servers do not publish advertisements or external
user-tracking mechanisms. The infrastructure is also used for pro
publico bono activities and for supporting educational and social
initiatives. Commentary:
From the
beginning, the zjk.pl servers have been a project developed more out of
the need to create independent infrastructure than for commercial
reasons. The services have operated, and continue to operate, primarily
for educational, social and private purposes.
At the time the project was created,
many institutions — including universities — did
not yet provide employees with their own email services or space for
publishing materials for students. It is worth noting that the owner's
employer — Lodz University of Technology — for many
years provided employees with neither email services nor any place to
publish materials for students (even around 2010 only the university
email service was launched). In practice, this meant the need to build
such solutions independently.
One of the fundamental principles of the
project remains the absence of advertisements and aggressive
user-tracking mechanisms. Traffic statistics and service monitoring are
conducted solely for administrative purposes and for maintaining
infrastructure security. The entire system is maintained privately and
financed exclusively by the infrastructure owner — Zbigniew
Kulesza.
•
Message: This Is Not a Ready-Made Tutorial Project – It Is a
Custom Project Developed Consistently for a Quarter of a Century.
Facts:
The zjk.pl project is a custom
infrastructure that has been systematically developed for more than 25
years. Commentary:
Even before the
server room was launched, the intention was to use it in practice. At
the time when the project was being created, complex CMS systems were
only beginning to appear, and nobody was yet thinking about modern
cloud services. The Internet itself — despite its very
dynamic development — was only beginning to establish its
model of widespread usefulness.
Many solutions had to be designed
independently. In the early period, I used mechanisms that are now
almost forgotten, such as FTP, and many services underwent years of
evolution. Today's mail system based on sendmail, milters, MailScanner,
rspamd, SpamAssassin, SPF, DKIM and DMARC bears little resemblance to
the simple mail configuration of the early 2000s.
Over the years, what proved crucial was
not choosing the „most fashionable” or
„most popular” technologies, but rather those that
could realistically be maintained and developed over a long period of
time. In practice, this meant making continuous decisions —
from hardware selection and power design to service architecture and
software configuration.
The conditions of serving real services
are the only situation in which it is possible to truly verify whether
a system is correctly configured and resistant to external threats. No
testing environment can fully replace this.
II.
Hardware: Physical Engineering and Difficult Decisions
Facts: The server infrastructure is
based on energy-efficient Mini-ITX platforms equipped with
dual Ethernet interfaces operating in LACP aggregation.
The servers use Intel Core
T-series processors with reduced TDP and — in the case of
file servers — multi-port disk controllers supporting
extensive storage systems. Commentary:
Building a
home cluster in Sieradz required moving away from traditional server
solutions in favor of a custom architecture based on eight
energy-efficient Mini-ITX platforms. The deliberate choice of Intel
Core T-series processors provided a very good compromise between
computational performance and power consumption, which is of critical
importance for continuous 24/7 operation in a home environment. The
choice
of Intel Core T-series processors made it possible to achieve
uncompromising computational performance while maintaining a low
TDP of 35 W
Each node was equipped with dual 1 Gb Ethernet interfaces
operating in LACP aggregation. This solution increases the
infrastructure's resistance to cabling failures and improves
communication throughput between servers and storage systems.
A major challenge turned out to be the
physical placement of such a dense computing environment within a
private residential space. This required designing the machine layout
within a server shelf, proper cable routing, and a heat
dissipation system.
•
Platform Selection: Why 8x Mini-ITX.
Facts: The Mini-ITX platform forms
the
hardware foundation of the zjk.pl infrastructure. This format provides
functionality comparable to classic ATX motherboards while requiring
significantly less physical space. Commentary:
Today, miniature computers are mainly associated with the last decade
of IT market development, but my interest in miniaturization dates back
much earlier — including work related to electronics and
microelectronics.
In the years 1990–2000, the
smallest available computers were usually industrial systems and were
very expensive. There were also even smaller designs, the size of
expansion cards or credit cards, but their functionality was highly
limited. My goal, however, was to maintain the greatest possible
compatibility with the classic PC architecture.
After several years of experience (I
used miniature industrial computers), the choice fell on the
Mini-ITX platform. Motherboards of this type offer virtually the full
functionality of larger ATX designs, support standard processors and
typical PC components, while their main limitation is usually a single
PCI-E slot and a smaller number of memory slots.
Another advantage proved to be the
wide availability of compact enclosures. The zjk.pl infrastructure
uses,
among others, cases originally designed for multimedia and automotive
computers. As a result, the space occupied by one classic ATX case can
accommodate several independent computers. If you look at the server
room photos, you will notice that in the space of a single ATX case I
fit five computers, and in the space of a horizontal ATX case
— four (or even 6, if I give up multi-disk enclosures).
•
Specification with Purpose:
Motherboards
with Dual 1 Gb (for LACP), Multi-Port Disk Controllers.
Facts:
The servers use Mini-ITX motherboards
equipped with dual Ethernet interfaces operating in LACP aggregation
and multi-port disk controllers for extensive storage systems. Commentary:
Despite the advantages of Mini-ITX motherboards, one of their most
important limitations remains the small number of PCI-E slots. If we
want to achieve reasonable network throughput, bandwidth quickly
becomes a limiting factor. For this reason, I chose motherboards
equipped with dual Ethernet interfaces, which then operate in LACP
aggregation.
An important note here — LACP
requires support both on the operating system side (on FreeBSD this is
called LAGG) and on the managed switch side. Static aggregation is also
possible, but in the event of a cabling failure it is more difficult to
locate the point of failure.
However, if you have become interested
in LAGG, it is worth first understanding how this mechanism works.
Aggregation performs best when many data streams are being transferred
simultaneously or when the application uses multiple threads.
The second problem turned out to be
supporting a large number of disks. Storage servers use enclosures that
can hold up to eight disks simultaneously (excluding system drives),
which requires a large number of SATA ports. Mini-ITX motherboards
often provide 4–6 ports, but in more advanced configurations
this becomes insufficient — even for classic ATX
motherboards. Therefore,
I use additional multi-port disk controllers. Currently I use both
4-port cards and larger 10-port models.
• Server Rack: The Logistics of Fitting a Cluster
into Home Conditions in Sieradz.
Facts:
The infrastructure has
been
optimized for compact dimensions, low power consumption, and operation
in a residential environment. Commentary:
In reality, I do not have any classic
server rack. Thanks to size optimization and reduced heat generation,
the entire server room fits inside a standard computer desk. Of course,
it becomes crowded, but the extensive cabling turns out to be a bigger
challenge than the computers themselves. Paradoxically, the small size
of the infrastructure greatly simplifies cooling — airflow
from every direction works better than many
“professional” designs. I discuss cooling in more
detail in a separate chapter of this page.
For some people, noise would probably
be a bigger concern, but here comes another surprise. You can
certainly hear the server room, but from the next room
… barely. After all, these are not classic servers
consuming 300–500 W each, but energy-efficient platforms
based on
Intel T-series processors. The combined power consumption of the
servers themselves is approximately 200–250 W with about 30
physical cores — roughly what a single more powerful desktop
computer may consume.
In any case, even my wife never
complained :) The only
significant problem remains hot summer weather — room
temperature can then exceed 30–35°C. In winter,
however,
the situation is reversed: the radiator practically no longer needs to
operate.
II.
Power Systems: A Unique 12 V DC System
Facts:
The zjk.pl
infrastructure
uses an advanced 12 V DC power distribution system, redundant power
lines for critical components, and multi-hour battery backup. Commentary:
The server room
power
architecture is largely based on distributing 12 V DC voltage instead
of traditional AC power distribution within the infrastructure. This
helps reduce some of the energy losses resulting from multiple voltage
conversions, which are typical of conventional UPS + computer power
supply systems.
The infrastructure uses redundant power
lines for critical components such as OPNsense routers and network
switches. The system also cooperates with an extensive battery buffer,
allowing the server room to operate for many hours during external
power outages.
The power system project is still being developed and tested
— especially toward further increasing the share of direct
DC power distribution.
•
Philosophy: Moving Away from AC Toward Pure DC.
Facts:
The zjk.pl power infrastructure is
based primarily on 12 V DC distribution using PicoPSU power supplies
and shared power lines supplying multiple computers. Commentary:
The slogan sounds
good,
but it has not yet been fully implemented. However, let us start at the
beginning, with the challenge of powering Mini-ITX motherboards in
automotive computer enclosures. Such cases usually have no room for a
traditional 230 V ATX power supply — after all, they are
designed to use the 12/24 V electrical systems available in
vehicles :) All
right, but where do the other voltages required by a computer come
from, such as 5 V or 3.3 V? Such systems use devices like PicoPSU power
supplies. It is worth looking at photos of them on this page
— they are truly miniature. The entire power supply
electronics fit practically into a housing the size of an ATX
connector and a small converter board.
Naturally, I began building an
infrastructure based mainly on 12 V lines instead of distributing
230 V power. Interestingly, the origins of this idea date back to my
earlier industrial computers (“cookie-sized”
systems). Even then, I tried to reduce the number of different voltages
and replace a dozen small power adapters with shared 5 V and 12 V
power lines.
there
is no room there for heavy 3.5-inch storage drives, while two or more
2.5-inch drives fit without any problem. Thanks to this, it was
possible to maintain a very compact design of the entire server room
while simultaneously reducing the amount of generated heat and power
costs.
This is another example of the zjk.pl project philosophy —
the goal
is not to build an „enterprise at all costs”
infrastructure, but rather to make a reasonable selection of technology
for the actual needs and operating conditions of a home cluster.
IV.
Network and Redundancy: Fighting for Every Packet
Facts:
The zjk.pl network infrastructure
uses redundant OPNsense firewalls with CARP and HAProxy,
dual switches, and LACP link aggregation for most
servers. Commentary:
Internet access is provided
through two OPNsense firewalls operating in failover mode using
the CARP protocol. Additionally, HAProxy is responsible for
load balancing and availability monitoring of services running
on multiple servers simultaneously.
The internal network is based on two
physical switches. The primary switch handles normal infrastructure
traffic, while the second serves as an emergency fallback
in case of failure of the primary device.
LACP link aggregation
(LAGG on FreeBSD) has also become a standard for most
servers, increasing infrastructure resilience to cabling failures
and improving communication throughput between
servers. The entire system was
designed with minimizing single points of
failure and enabling maintenance work without completely
shutting down the infrastructure in mind.
• Network
edge: Redundant OPNsense (CARP) and HAProxy.
Facts:
Internet access is provided
through redundant OPNsense firewalls using CARP, HAProxy, and
two independent Internet connections from different providers. Commentary:
The idea of a
redundant access network first appeared back in the days of
industrial computers operating in the server room.
The biggest problem at the time was the lack of separate Ethernet
interfaces, and the first tests did not inspire confidence that the
entire setup would operate reliably.
After many
years I returned to the idea and rebuilt the test environment
— two simulated provider connections and
a shared internal network. This time the solution started
working correctly :) However, another question quickly arose
— what good are two Internet providers
if the access computer itself can fail?
The answer turned out to be a second
firewall
synchronizing connection states and taking over the IP addresses
of the failed machine. In the FreeBSD world this role is fulfilled
by CARP.
Over time similar problems began
appearing inside the infrastructure as well —
both during failures of individual cables and entire
servers handling specific services or storage. CARP
therefore began appearing in additional parts of the network.
And this is where practical
problems begin. CARP (or the Linux equivalent VRRP) works
great in simple, well-organized environments or on dedicated network
segments. In a real infrastructure, where WWW services,
mail, internal users, and HA mechanisms all operate simultaneously
— chaos begins to emerge that is difficult
to fully organize.
Of course, the ideal solution would be
further network segmentation, and it will probably appear
during the next infrastructure redesign. However, in the current
environment there have been situations where CARP simply
„got lost”.
Therefore, for the most critical infrastructure elements,
custom scripts monitoring network status and
moving IP aliases between Ethernet interfaces sometimes
work better.
A similar philosophy stands behind the
major role
of HAProxy in zjk.pl. It is better to rely on an external
service health assessment mechanism than on the
„internal belief” of the machine itself
that everything is working correctly. HAProxy continuously tests
servers and directs traffic only to those that actually
respond reliably. Currently
OPNsense has become one of the key elements of the stability
of the entire environment. The server room uses two independent
connections from different operators and different
access technologies (cable TV and fiber optic). OPNsense
distributes traffic using the Round-Robin algorithm with Sticky
Connections.
HAProxy directs traffic to:
WWW servers (4 machines), PostgreSQL Hot
Redundancy (3 machines), MySQL Cluster Replication (5
machines),
SeaweedFS (3 masters). Thanks
to the second OPNsense firewall ready to take over operation,
the infrastructure operates very reliably. Appropriate DNS entries
ensure
that both external IP addresses are used simultaneously
for both WWW (dual A records) and
mail services (mail and mail2).
•
Topology: Migration to two physical switches (managed + fallback -
the latter will soon be replaced by a second managed switch).
Facts:
The infrastructure
uses a primary managed switch and an additional
emergency fallback switch providing basic Internet
connectivity in case of failure of the primary switch. Commentary:
Failure of the
primary switch is a catastrophic failure for the server room
— it practically removes the entire infrastructure from
operation. Such
failures are difficult to avoid or predict in advance, therefore
the main option is risk minimization.
I use a 24+2 port switch. Despite
the manufacturer's assurances that additional cooling is unnecessary,
I decided to add three small 4 cm fans
to the switch, positioned near the side ventilation grille.
I must admit I was surprised by the effectiveness of this solution
— instead of a very hot enclosure,
the switch is now simply noticeably warm, but no longer
„burning hot”.
However, the question remains: what
should be done if
the primary switch fails anyway?
Ultimately I would like to have a second
full
managed switch, but currently I still do not have room for such
an infrastructure expansion. Therefore, I adopted a different safety
strategy — since after failure of the primary switch
most services will stop working anyway, the most important thing
becomes
maintaining basic connectivity with the outside world.
This role is taken over by a second,
small
emergency switch, which connects only the key infrastructure
elements: OPNsense, modems, and the Wi-Fi network. Thanks to this,
even during a more serious failure, basic
communication and server room administration remain possible.
•
Layer 2: Link aggregation (LACP) as a standard on every
node.
Facts:
Every
server in the zjk.pl infrastructure uses dual Ethernet
links operating in LACP/LAGG aggregation. Aggregation
mechanisms are also used in other network infrastructure
elements. Commentary:
The previously described LAGG /
LACP aggregation is the foundation of server operation — each
of them has a dual Ethernet connection. In practice, this currently
means
16 network cables, which directly results from the capabilities
of the managed switch, supporting a maximum of 8 aggregation groups.
Incidentally, I also performed
experiments with quadruple LAGG groups.
Such solutions work correctly, although in the conditions of a home
server room their practical usefulness is already much smaller.
It is also worth noting that LAGG in my
network exists in several different variants, not only as
classic LACP. The loadbalance mode is also
used between the switch and the active OPNsense, as well as failover
— for example for a personal computer if I wanted
to use it away from the desk and automatically switch
between Ethernet and Wi-Fi.
I encourage you to learn more about
LAGG/LACP mechanisms, because for people
interested in computer networking there are really many
very interesting possibilities hidden there.
V. Data
and Storage:
Clusters in Practice
Facts:
The data storage architecture
uses several storage and database technologies in parallel.
The primary file system for data storage
is ZFS. Distributed file storage is implemented through
a MooseFS cluster (7 nodes) and SeaweedFS for
objects and multimedia. The database layer
uses PostgreSQL Hot Redundancy (3 machines), MySQL Cluster
Replication (5 machines), and Redis (6 machines) managed by HAProxy and
Sentinel. Commentary:
The data storage architecture is based on a hybrid approach
using several parallel file systems and databases with different
characteristics. Traditional WWW files,
configurations, and POSIX-compliant operations
are handled by a highly available MooseFS cluster distributed across
seven
nodes. For storing larger objects and
multimedia, an independent SeaweedFS cluster has been deployed,
optimized for a large number of files and high
transfer performance (3 masters and 7 filers). The database
and cache layer consists of 5 MySQL Cluster Replication machines,
3 PostgreSQL Hot Redundancy machines, and 6 Redis machines cooperating
with
HAProxy and Sentinel.
• ZFS: the primary
file system in data storage systems
Facts:
The primary file system
used in zjk.pl data storage systems is ZFS. Commentary:
UFS2 originates
from the very old FFS and still inherits many of its advantages and
disadvantages. I remember the transition from UFS1 to UFS2
— file copying and deletion became dramatically
faster. However, as a server file system, UFS has one significant
drawback: after an unexpected restart, errors may occur that prevent
the system from starting correctly. In such cases, automatic
disk checking during startup does not always help, and the system may
stop
requiring a manual fsck. Running fsck on terabyte-sized
disks takes an extremely long time —
if they contain many small files: up to several hours.
ZFS behaves differently — it usually starts correctly
even after a failure. Of course, only until truly serious damage
occurs. Interestingly,
UFS can practically always be repaired eventually,
whereas ZFS operates in a more „binary” manner
— either everything works perfectly, or the pool may no
longer be
importable despite restarts and recovery
(import) attempts.
However, ZFS is much more than a file system with
„zettabyte-scale” capacity. It is effectively a
second layer
of disk space management: encryption, compression, snapshots,
RAIDZ, export and import of entire data structures, and even
transferring them over the network. I rate RAIDZ particularly highly
— it combines classic RAID with distributed checksums
and data reconstruction mechanisms (I use RAIDZ2).
A masterpiece.
• MooseFS: 7 nodes for WWW files and
POSIX (/usr/home)
Facts:
Distributed storage of POSIX data
and shared directories is provided by a
MooseFS cluster operating on 7 nodes. Commentary:
Storage, sharing, and
archiving of data are fundamental tasks of every mini-DataCenter.
Classic NFS, however, introduces many problems — from
single-disk limitations to issues with mounting
shares during system startup. Even RAID remains
a single point of failure, and its rebuild or data recovery from
backup always requires time.
After considerable thought, I decided on a Polish solution —
MooseFS. This system combines the disk space of many
computers into one shared resource, with the
possibility of protecting data through replication or EC (Erasure
Coding). Resistance to disk
failures is particularly important.
I have had
situations involving disk failures, and I must admit that it is a huge
relief to watch MooseFS rebuild missing
data by itself and restore the proper replication level —
without
nervous backup restoration or waiting to see whether the RAID
will survive the rebuild.
MooseFS is
also exceptionally stable. Problems may occur under
network and chunkserver overload, but the masters and
metaloggers in my infrastructure have never hung or
rebooted. An additional
advantage
is the convenient sharing of resources between
multiple computers — for example /usr/home directories or
a common workspace for several
WWW servers using the same data.
• SeaweedFS: a parallel cluster for
objects and multimedia
Facts:
An independent
SeaweedFS cluster is used for storing objects and
large numbers of small files. Commentary:
MooseFS has one characteristic feature
resulting from its architecture — every file is stored
in a separate chunk. With very large numbers of small
files, access time starts to matter.
SeaweedFS works similarly, but
stores many files inside larger
data blocks. As a result, it handles
huge numbers of small files much better.
I am currently testing to what extent
SeaweedFS can
partially replace MooseFS for handling hundreds of thousands of small
files used by Apache. Depending on the
counting method, my WWW sites currently consist of
between 400 and 800 thousand files
with a total size of approximately 15 to 80 GB.
• PostgreSQL Hot Redundancy (3 machines) and MySQL
Cluster Replication (5 machines) databases
Facts:
The infrastructure uses a
PostgreSQL Hot Redundancy cluster and MySQL Cluster Replication
synchronized and supervised by HAProxy. Commentary:
Every data center sooner or
later comes down to databases. The choice of an
appropriate solution cannot be accidental.
SQLite is extremely fast and simple,
but with large databases it is relatively easy to corrupt during a
failure
or system restart. Recovery is often possible, but does not always end
in
complete success. For more
critical applications I use PostgreSQL. A good example
is Bareos, which must store information about millions
of archived files. Mistakes are unacceptable here.
SeaweedFS also prefers
PostgreSQL, especially in more advanced
configurations. In addition, there is the split-brain problem in
multimaster environments. Therefore, I implemented a PostgreSQL Hot
Redundancy
cluster consisting of three machines — one master and
two replicas. The entire setup is supervised by HAProxy, providing
a common access point for writes and
reads. The MySQL
cluster was created for a somewhat different purpose. It is the classic
„workhorse” for WWW applications
— fast, relatively simple, and well suited for
heavy workloads. Data from the master is replicated to the other four
machines, and cluster mechanisms make it possible to verify data
consistency when discrepancies occur between nodes. Here as well, the
entire system
is supervised by HAProxy.
• Redis cache (6
machines) tunneled through Stunnel
Facts:
The cache system is based on Redis
operating in a 1 master + 5 replica configuration under Sentinel and
HAProxy supervision. Commentary:
Serving WWW pages is a process much more complex than
simply sending a file to a user's browser. Data
access speed and caching mechanisms are of
key importance.
Apache has its own
acceleration systems, but additionally I use Redis as a very
fast memory cache. The system operates in a configuration of one master
and five replicating servers.
Consistency is supervised by
Sentinel, which monitors the state of the cluster, while HAProxy
automatically
directs traffic to the currently active Redis server. Tunneling traffic
through Stunnel is currently in the testing phase.
VI. Security Confirmed by Data
Facts:
The zjk.pl infrastructure maintains high
scores in independent security audits, including SSL Labs A+ and
Security Headers A. Systems are continuously monitored, regularly
updated, and developed without requiring full reinstalls. Commentary:
The measure of
security effectiveness is not administrator declarations, but
independent tests and
practical operational stability. zjk.pl servers have maintained
high scores in SSL Labs and Security Headers audits for years.
The infrastructure is continuously monitored, and any anomalies or
problems are usually detected very quickly.
The stability of FreeBSD is best
demonstrated by the
fact that during more than 20 years of server room operation the system
underwent only
one full reinstall — back in the days of version 5.3.
All subsequent system and application updates
were performed „live”, without rebuilding the
environment
from scratch. In practice, hardware upgrades usually
consisted of
moving data to new disks or moving disks to new
hardware rather than reinstalling entire systems.
• Audits: SSL Labs A+ and Security Headers A on own hardware
Facts:
The servers regularly
achieve high scores in external security and
service configuration audits. Commentary:
There is no secret here
— the foundation is systematic work and rejecting the
assumption that
if something „more or less works”, then everything
is already properly
configured. External
audits are very important. Even if it is only a test website or a user
opinion, they allow you to look at your own infrastructure from the
outside.
They show not only errors, but also the direction for further
improvement and the level
that can be achieved.
Sometimes the simplest tests prove
the most valuable. A simple ping, an attempt to retrieve a WWW page, or
a connection to a mail service can reveal problems that
are completely invisible from inside the infrastructure.
I can summarize it in one word
— recommended.
• Monitoring: How
the server room is monitored
Facts:
The infrastructure uses
multi-layer monitoring based on system reports, custom scripts,
analytical tools, and observation of server
operation. Commentary:
Every
monitoring method is good — provided there are many of them
and
they complement one another.
The foundation is daily email reports from the servers. Even
a quick review allows anomalies to be noticed quickly. For
more critical services I recommend custom scripts checking the state
of applications and sending alerts — in my case this applies
to
SeaweedFS and PostgreSQL, among others.
On the
servers, top, htop, or atop are practically always running. Over
time, an administrator begins to intuitively recognize the normal
operating state
of systems.
My favorite solution is my 16-port KVM switch - fast
switching with immediate access to several switched consoles on each
computer. Historical
reports generated by tools such as Monitorix, MRTG, and Symon are also
valuable. I particularly like the daily
Monitorix graphs — they make it easy to notice changes
in load or unusual server behavior.
I also tested heavier
monitoring systems, such as Zabbix. I still recommend it, but in my
case
it generated too much data and too many alerts, which
over time became more of a hindrance than a help.
After many years of work, another
type of monitoring also appears — the administrator begins to
hear
the server room. Sometimes a slightly louder fan or
a slightly changed airflow noise is enough to know that one
computer is under a heavier load than usual.
And if an ordinary desktop computer
belonging to one of the household members starts
„lagging” with email, file transfers, or
WWW pages — that is also a signal that it is worth checking
the state of the entire
infrastructure.
• Backup
Facts:
The backup system uses
several mechanisms in parallel: dump, Bareos,
UrBackup, and tools for creating system
images. Commentary:
You need a backup. You need a
backup copy. You need an archive. Even more important, however, is
ensuring
that they can be used easily and quickly.
The backup structure at zjk.pl
is multi-layered. The
foundation
remains the classic dump — underestimated, but still a very
effective and simple mechanism. Many of my own scripts
are based on it. For
daily and weekly backups, Bareos works excellently,
especially when recovering individual
files. UrBackup, on the other hand, is very well suited to
creating images of entire systems.
In the case of Windows, even the basic
system mechanisms already provide reasonable protection, although
additionally
for personal computers I use SyncBackPro and
EaseUS Todo Backup, which handles
system imaging very well.
• Continuity: One reinstall and 20 years of
„live” updates
Facts:
During more than 20 years of operation,
the infrastructure underwent only one full system reinstall.
System and application updates are performed regularly
without stopping the entire environment. Commentary:
It is true — there was only
one complete reinstall
(for v 5.3). I had a backup at the time, but
simultaneously there was a problem reading the rescue disk,
and ultimately the system had to be rebuilt from scratch.
Much more interesting, however, are the
early
days of FreeBSD updates. In those years practically everything
was compiled manually. Available sources of knowledge were
limited, and updating a larger number of programs could
take even one or two weeks.
Later, for many years,
I used Poudriere to build my own packages for
different server configurations. Today the situation is
much more convenient — the pkg system in FreeBSD is really
excellent. The most important
thing, however, remains regular application updates. It is a matter
of both security and operational stability.
Every week I perform a full
application upgrade. This makes it easy to control which services
require a restart, without having to reboot entire
servers. It also avoids dependency problems
and the accumulation of changes.
An update performed once a year becomes very difficult —
new versions of many programs appear simultaneously,
configuration changes occur, and compatibility issues arise. Even if
the upgrade itself
succeeds, it often ends with several days spent repairing services.
It is much easier to do it
systematically. One week Perl is updated, the next
PostgreSQL, and a few weeks later a new
Dovecot configuration needs to be checked. This approach is simply
calmer and
safer.
VII.
Humility: The dark side of complexity
Facts:
Advanced redundancy and high availability mechanisms increase
infrastructure resilience, but at the same time raise its level of
complexity. In zjk.pl both software updates and physical maintenance of
the entire cluster are regularly performed.
Comment: Building an
advanced server room very easily leads to the “Complexity
Penalty” trap
— a situation in which successive layers of security and
redundancy
start generating new problems themselves. High availability mechanisms
can significantly increase system resilience, but at the same time they
complicate diagnostics, make network behavior harder to predict, and
can lead to phenomena such as split-brain. In practice, it often turns
out that a simpler solution is more stable than a theoretically more
“perfect” one.
Therefore, just as important as
technical knowledge
itself is the ability to maintain common sense and simplicity wherever
possible. Every additional infrastructure component is a potential new
source of failure, additional dependencies, and greater responsibility
for the administrator.
Over the entire environment always
stands a human —
the administrator responsible not only for configuration, but also for
updates, monitoring, hardware maintenance, and responding to emergency
situations. Even the best-designed architecture requires regular
physical inspection.
Hence, in zjk.pl there is an annual
“Vacuum Cleaner
Day” — a controlled shutdown of the entire cluster
combined with a
physical inspection of the infrastructure. It is a moment to check
fans,
heatsinks, cabling, BIOS backup batteries, and power connectors. At the
same time, dust is removed, which remains one of the main enemies of
electronics operating 24/7.
Additional planned shutdowns also result
from major
operating system updates and software modernization. Regular
maintenance
turns out to be much safer than waiting for the first serious failure.
•
Complexity Penalty: Awareness that accumulation of
safeguards
creates new risks (Split-brain).
Facts:
High availability and multimaster modes
increase
infrastructure resilience, but at the same time can lead to difficult
to
detect synchronization errors such as split-brain.
Comment:
Great enthusiasm usually accompanies
information that
a given system can operate in multimaster mode — meaning a
situation in
which several machines simultaneously manage the same resource. In
theory, it sounds ideal. In practice, however, the split-brain problem
appears — a system state split where two nodes simultaneously
believe
they are primary.
My experience shows that this problem is
not at all
mythical. I tried to deploy the now-deprecated HAST (High Available
Storage) system. Network overloads or issues with Ethernet drivers were
enough to regularly break communication between master and slave nodes.
The result was very unpleasant — split-brain and the need to
rebuild the
entire environment from scratch.
This is one of the most important
lessons of building
your own server room: a more complex solution is not always a better
one.
Sometimes a simpler architecture is more stable, easier to maintain,
and
simply safer.
•
Human factor: Responsibility of the administrator for such a
complex organism.
Facts:
The stability of the infrastructure
depends not only
on hardware and software, but also on regular maintenance, monitoring,
and conscious management of the entire environment.
Comment:
First and foremost, a server must not be
neglected. A
poorly maintained machine connected to the Internet quickly becomes a
source of problems — from service failures to spam
distribution or
degrading the reputation of the entire subnet.
The responsibility of an administrator
is similar to
that of a car owner. Sometimes people say: “I just drive and
refuel.”
In practice, every car requires inspections, part replacements, and
technical condition checks. It is exactly the same with servers. A well
maintained machine can run very stably for years, but it requires
systematic care.
In corporations, suspicious hardware is
often
replaced immediately with new equipment. In a home server room, the
approach is more often “to nurture and take care”
— monitoring
temperatures, fan sounds, voltages, disk behavior, and reacting before
a
real failure occurs.
The biggest single point of failure,
however, remains
single-person administration. In practice, everything depends on one
person. Although sometimes funny situations occur — I once
asked my wife,
a humanities graduate, to safely shut down the servers after a certain
time in case of a long power outage. And it worked. So maybe redundancy
exists even where you don’t expect it.
•
Vacuum Cleaner Day: Annual maintenance and controlled
shutdown
of the cluster.
Facts:
Once a year the entire server room is
deliberately
shut down for full physical maintenance of the hardware.
Comment:
Once a year the servers fall silent for
a few hours.
Mandatory cleaning.
This is not only about aesthetics.
Cleaning
heatsinks, fans, and enclosures has a direct impact on operating
temperatures, and temperature remains one of the main factors affecting
hardware lifespan.
During this time a full technical
inspection is
performed: checking fan resistance, checking BIOS
battery
voltage, reseating RAM modules, inspecting CPU
heatsinks,
checking internal and external cabling, replacing suspicious
components before they fail.
It is also a good moment to simply
listen to the
hardware. After years of operation, an administrator can recognize
problems even by a slight change in fan noise or case temperature
characteristics.
An additional benefit is that cleaned
hardware runs
quieter, cooler, and more stable for the following months.
VIII.
Hardware as the foundation of server room stability – what
hardware
and software to choose?
Facts:
The zjk.pl infrastructure is built on
stable and well
supported computer components. When selecting hardware, reliability,
compatibility with FreeBSD, and stable 24/7 operation are of key
importance.
Comment:
The most important rule is very simple:
hardware must
be good and stable.
•
Good hardware: stability is more important than maximum
performance.
Facts:
In the server room, stability, build
quality, and
compatibility with the operating system are crucial, not maximum
performance of components.
Comment:
Good hardware does not have to be the
most expensive.
It should above all be predictable and stable. Not
“gaming”, not
extremely powerful, and not the cheapest. Every weak element sooner or
later becomes a failure point for the entire environment. In practice,
the problem is more often a small detail — a poor power
connector, a bad
cable, or an unstable power supply — than a lack of extra CPU
megahertz.
In a server there is no need for aggressive overclocking or running at
the edge of hardware capabilities. The machine is supposed to operate
stably 24/7, often for many years without reboot. Extra megahertz
usually
do not matter much, while cooling quality, reliable network
connections,
stable power supply, driver compatibility, and predictability of the
entire system matter enormously.
In my server room there were situations
where a simple
power connector costing a few currency units turned out to be the
problem. It could heat up under low current, melt internally, and in
extreme cases cause a short circuit in the power lines. Such
experiences
quickly teach respect for the quality of even the smallest components
of
the infrastructure.
Every
weak element can, over the years, become the cause of a hard-to-detect
failure.
At the same time, very expensive server hardware often makes little
sense in a home data center. A server is not a machine for
benchmarks or overclocking. It does not need to achieve record-breaking
performance results – it is meant to operate calmly, quietly,
and stably 24 hours a day.
When selecting hardware for FreeBSD, driver compatibility
and system support are crucial. Linux usually has a
broader base of supported devices, which means some newer
or more exotic designs may work more easily there. In practice, this
means carefully checking compatibility before purchasing
server hardware.In the case of FreeBSD it is
always
worth checking the list of supported hardware before
purchase. Linux
usually has better driver support,
so not every modern chipset will work equally
well on both systems.
Paradoxically, “too energy-efficient” hardware can
also be a problem.
Aggressive power-saving mechanisms
may put devices to sleep, cause connection drops, or
destabilize network services. Problems
can also be caused by devices designed with an excessive
focus on power saving. Overly aggressive sleep mechanisms for
interfaces, processors, or
controllers can cause connection drops,
latency, or instability of network services. Therefore
energy efficiency is important, but only when it does not come
at the expense of overall system stability. As
usual – excess in any direction is not good.
•
Analysis and ready-made recipes.
Facts:
There is no single universal
hardware or software configuration suitable for every server room. Commentary:
I will not present
here any ready-made analysis or a single “ideal”
configuration. Some guidelines can be found in the descriptions of the
overall infrastructure, but the details must be worked out
by each administrator individually.
Every
server environment operates under different conditions:
different
user requirements, different workloads, different
budgets, different security requirements,
different energy and space constraints.
What works perfectly in one
environment may be completely impractical in another.
•
FAQ and guides for building your own server room.
Facts:
Additional technical
information and practical examples can be found in the FAQ section and
guides on building your own server room. Commentary:
Those more interested in the topic are
encouraged to review the FAQ section and materials
describing how to build a home server room. They include more
practical information regarding: hardware selection,
power supply, cooling, network configuration,
data storage, redundancy and backups.
• Software
selection: a test of competence and experience.
Facts:
The choice of server software depends
on the administrator’s experience, the nature of the
services,
and the compromise between simplicity and configurability. Commentary:
There is no single
correct answer to the question: “which software should be
chosen?”.
It is one of the most difficult aspects of building your own
environment. A good example is
the
endless Apache vs Nginx debate. Both solutions perform exactly the
same task – serving web pages – but they do it in
completely different
ways. Some administrators love
Apache
for its enormous configuration flexibility. Others prefer Nginx for its
performance and simplicity. Still others propose a hybrid approach:
Nginx as a fast first-layer proxy and Apache as the backend
handling actual applications. And each of these groups is right
–
it depends on the specific use case.
If I
were to give one practical piece of advice, it would be very simple:
do not choose software that is either too simple or overly complex.
Too simple solutions often perform many
operations outside the administrator’s control or limit
configuration
possibilities. Too complex ones create artificial barriers and require
a huge amount of administrative effort.
I remember a situation from over 20
years ago
when I spent several years trying to configure DNS and DHCP using a
certain program. Attempts were repeated regularly and the problem was
not a lack of knowledge. The configuration was simply unintuitive and
very difficult. Eventually I switched to another solution –
and
everything started working in just a few minutes. That experience
taught
me that sometimes it is better to change the tool instead of endlessly
fighting its limitations.
•
Why not virtualization?
Facts:
Using a single computer with
32–128 cores may seem simpler. We launch a virtualization
stack, several virtual machines on that platform, and the whole setup
looks and behaves attractively. The solution takes up less space,
requires fewer cables, and management is convenient and centralized.
In such a model, many virtual machines
share the same hardware resources: RAM, disks, and network
interfaces. In large server environments this is addressed through
high-speed network cards (10 Gb/s and more), efficient storage
arrays, and servers equipped with a large number of CPU cores.
An important characteristic of this
architecture is that a failure of a single physical server
simultaneously affects all virtual machines running on that host.
Author’s Commentary:
In my opinion, when designing
infrastructure it
is worth paying attention not only to the most obvious parameters,
but also to edge components and shared resources. A single memory pool,
a single disk subsystem, or a single set of network interfaces can
become a bottleneck when many services are heavily loaded at the same
time.
For example: even a dual 10 Gb/s link
provides a total of 20 Gb/s throughput. On a server with 32 cores
this means an average of about 0.625 Gb/s per core. This is not a real
distribution of network traffic, but it clearly illustrates the scale
of resource sharing among many concurrently running services.
Storage behaves even more interestingly.
It is not only about disk throughput or the number of drives, but also
about the number of simultaneous write operations performed by many
virtual machines. In practice, this requires analyzing not only nominal
performance but also real workloads and potential bottlenecks.
In my view, these are exactly the kinds
of
factors that should be measured and analyzed when designing
infrastructure. CPU parameters, memory size, or interface speed are
important, but equally important is understanding what happens when a
shared component fails or becomes overloaded.
For me and my server room, the decisive
factor
was reliability. The failure of a single computer has a relatively
small impact on the entire system. For this reason I deliberately chose
an architecture based on many independent physical servers instead of
maximum concentration of services on a single virtualization platform.
IX.
Summary: A place in the world
Facts:
The zjk.pl project is developed
independently of
corporate social platforms, cloud services, and telemetry systems. The
infrastructure has been based for over two decades on in-house hardware
and software solutions, primarily FreeBSD. Commentary:
The withdrawal from global telemetry
projects or
closed online communities was in the case of zjk.pl a fully conscious
decision. The server room was never created for statistics, internet
rankings, or social media popularity. Its purpose from the very
beginning was practical engineering, technological independence, and
building a self-owned environment operating under its own rules.
In practice this means, among other
things,
avoiding dependence on external cloud services, advertising systems,
tracking mechanisms, or ready-made platforms dictating how the system
should operate. Instead, in-house solutions are developed for
networking,
storage, backups, and monitoring, maintained locally and adapted to the
actual needs of the infrastructure.
In a world increasingly dominated by
corporate
clouds and centralized services, zjk.pl remains an independent
technical island — developed consistently for over two
decades, based
on its own hardware choices, its own approach to security, and FreeBSD
proven over years of use.
•
Context: Avoiding “strange” statistics and closed
communities.
Facts:
The zjk.pl project is not developed for
popularity
metrics or closed online communities. The priority remains practical
utility and infrastructure independence. Commentary:
My servers do not work for statistics. I
once tried
reporting systems to the bsdstats project, but the number of visible
machines never even roughly matched reality. And given what this server
environment actually contains, it clearly extends far beyond a handful
of computers. At some point one starts questioning the real value of
such reporting.
I view closed communities built around
specific
technologies or brands in a similar way. For example: “I own
a Ford –
let’s create an exclusive group and only let selected people
in.” Of
course, if someone enjoys that, there is nothing wrong with it. But for
me servers are primarily tools. The system should work well, stably,
and independently of who is currently forming a fashionable discussion
group.
Much more valuable are open forums and
open exchange
of knowledge. Once knowledge becomes locked inside private communities,
something stops working as it should.
•
Is the whole thing not too complex?
Facts:
The zjk.pl environment has a high level
of logical
complexity, but thanks to its lightweight bare-metal architecture it
maintains very low hardware resource usage. Commentary:
Yes and no.
Individual configurations are indeed
complex. But
most services run without heavy intermediate layers — without
large
virtualization stacks or massive orchestration platforms. It is largely
a bare-metal environment, which keeps system load very low.
A few percent CPU usage, a small system
queue, or
virtually empty swap are not concerning values. The most heavily loaded
component is the network, and this will likely be one of the first
areas of future modernization.
At the same time, role separation
between servers is
very deliberate. There is no randomness:
file server is a data storage role,
web server handles websites,
database clusters handle database tasks,
cache systems accelerate services,
but the file server is not also a web or mail server.
Of course, more machines would probably
help. But
the art is not building infrastructure with unlimited resources. The
art is making sensible use of what is available.
X.
Conclusion: zjk.pl as an independent technical island.
Facts:
The zjk.pl project remains an
independent, custom
infrastructure developed outside the dominant model of full
virtualization and public cloud services. Commentary:
zjk.pl will remain an independent portal
and server
environment. Both the hardware concept and software philosophy will
continue to evolve in the current direction.
I am fully aware that this approach
differs from
modern trends based almost entirely on virtualization and public
clouds. At the same time, this is precisely why the project has value
for me — it shows that similar goals can be achieved using
different
methods as well.
Some technologies simply age well. Over
time they do
not lose value but gain maturity and stability. One only needs to
understand their strengths and consciously accept their limitations.
zjk.pl therefore remains an alternative,
a reference
point, and a practical proof that a classical approach to building
infrastructure can still be effective.
•
Closing: Ready for the 25th anniversary.
Facts:
The zjk.pl project is entering its 25th
year of
public presence on the Internet. Commentary:
The idea for the 25th anniversary
description
appeared somewhat unexpectedly. I once asked an AI to analyze the
content of the page. After finishing, it said:
“congratulations on the
anniversary – for servers that is quite an age.”
“How do you know?” I
asked.
The answer was simple: “the
information is in the
page header.”
And that was essentially how it started.
Interestingly, the servers themselves
have indeed
passed a quarter century of operation. The year 2027 will rather be a
symbolic celebration of 25 years of full Internet presence.
There will be no big celebrations. It is
enough if
what remains after all those years is the page you are currently
reading.
•
Plans.
Facts:
The zjk.pl infrastructure is
continuously developed
and modernized. Commentary:
There are still many plans:
replacement of OPNsense servers with newer units,
network upgrades to 2.5 Gb/s or 10 Gb/s,
further development of 12 V power infrastructure,
implementation of electronic power distribution units with voltage,
current, and power measurement,
further experiments with full DC power systems,
faster Internet uplinks,
cleanup and restructuring of services and resource allocation,
expansion of disk archives,
possible return to poudriere,
continued development of custom administration scripts.
Because in practice, every well-running
server
environment is always “in the middle of the next
modernization”.
Powrót na stronę
główną - Informacje o
stronie, prawa autorskie, legalność itd. tutaj
Informacje o przetwarzaniu i ochronie danych osobowych, kontakt i zapytania itd. tutaj
Prywatne
serwery Zbigniewa Kuleszy zjk.pl.
Aktualny dostawca Internetu - Vectra.pl,
Wszelkie prawa zastrzeżone. Zespół
redakcyjny zjk.pl: zjk7@wp.pl
W
sprawie treści i działania strony oraz w
sprawie funkcjonowania i udostępniania treści na serwerach
zjk.pl - kontakt z administratorem: webmaster@zjk.pl
lub zjk7@wp.pl
Copyright (c): Zbigniew Kulesza, Sieradz 2002-2026