Infrastruktura
serwerów Zbigniew Kulesza zjk.pl
Serdecznie
witam na moich prywatnych, domowych serwerach FreeBSD/UNIX, Sieradz.
PolskaDzisiaj
jest:
Aktualizacja dnia:

UWAGA -
wszelkie parametry podane na tej stronie to NIE są fikcją, symulacją
teoretyczną, tworzeniem idealnych scenariuszy. Jest to absolutnie
REALNY stan, z którego korzystasz czytając te słowa.
Natomiast zostały wprowadzone elementy anonimizujące ze
względów bezpieczeństwa.
Jeśli wątpisz w
prawdziwość podanych danych to zapewniam, że zwykle zaniżałem podane
liczby.
Natomiast - ze względu na ciągłe prace rozwojowe -
w niektórych elementach mogą występować różnice
stopnia wdrożenia (zwykle czekam kilka miesięcy na sprawdzenie, czy
dana technologia sprawuje się stabilnie).
Niektóre elementy konfiguracji są wycofywane - w razie
wątpliwości pytaj mailem o stan aktualny, ponieważ strona internetowa
ma dla mnie tylko znaczenie ilustracyjne, nie ściśle dokumentacyjne.
Jednocześnie konkretne parametry sprzętu i wydarzenia opisane w
historii już mają wartość dokumentacji.
Rysunki zostały
wykonane samodzielnie bądź z udziałem ChatGPT oraz Microsoft Copilot.
Teksty były pisane oryginalnie przez mnie z "wygładzeniem" przez
CharGPT. Tłumaczenia wykonane z użyciem ChatGPT.
Jeśli
znajdziesz błędy językowe czy merytoryczne - proszę zgłoś i wybacz mi
niedopatrzenie, naprawdę i tak wiele czasu mam zajęte utrzymaniem mojej
serwerowni i nie tylko ;P
A.
Filozofia projektu:

Czy
da się zbudować profesjonalne Datacenter bez korporacyjnej chmury?
W dzisiejszych czasach sieć jest zdominowana przez wielkie
korporacje, reklamy i skrypty śledzące. Internet może jednak wyglądać
inaczej. Od 24 lat rozwijana jest w pełni
niezależna, prywatna infrastruktura serwerowa zjk.pl,
która stanowi dowód na to, że wolny i bezpieczny
cyfrowy świat wciąż istnieje. To nie jest zwykły komputer stojący w
kącie, ale zaawansowany ekosystem oparty na systemie FreeBSD.
Dla osób szukających inspiracji,
studentów informatyki czy pasjonatów technologii,
strona ta stanowi praktyczne studium przypadku. Przedstawia ona, jak w
realnym środowisku funkcjonują rozwiązania klasy Enterprise:
Fundamenty i bezpieczeństwo: Implementacja
najwyższych standardów bezpieczeństwa stron (HTTP/3,
rygorystyczne nagłówki SSL/TLS),
niezależny i odporny na spam system pocztowy oraz aplikacje odizolowane
w bezpiecznych kontenerach (Jails).
Wysoka
dostępność (HA): Architektura klastrowa oparta na protokole CARP
oraz load balancerze HAProxy, eliminująca przerwy w
działaniu usług w przypadku awarii sprzętu.
Zarządzanie
pamięcią masową: Skalowalna i bezpieczna przestrzeń na dane
zrealizowana za pomocą systemu plików ZFS
oraz rozproszonych systemów MooseFS i
obiektowego SeaweedFS.
Poniższy opis to unikalny zapis drogi – od pojedynczego
serwera do rozproszonej architektury. To techniczna dokumentacja tego,
jak nowoczesna sztuka UNIX-owa funkcjonuje w
praktyce.
B.
Parametry infrastruktury:
- dostępność
usług 24/7/365, pełne zasilanie awaryjne (UPS)
- redundancja
wybranych usług i komponentów infrastruktury,
- OPNsense
HA (master/slave + CARP),
- dwa
niezależne łącza ISP,
- LACP/LAGG
dla kluczowych połączeń sieciowych,
- serwery
fizyczne i wirtualne,
- storage,
backup i monitoring,
- systematyczne
aktualizacje sprzętu i oprogramowania (tryb ciągły, restarty po
istotnych aktualizacjach bez względu na uptime),
- możliwość
hostowania własnych domen i usług.

Powyższy
schemat i opis poniżej mają charakter poglądowy (ze względów
bezpieczeństwa).
C.
Architektura infrastruktury
Poniższe
schematy i opisy mają charakter poglądowy ze
względów bezpieczeństwa.
Stabilna sieć
i rozproszona przestrzeń: Architektura odporna na awarie
Prawdziwa inżynieria zaczyna się tam, gdzie kończy się pojedynczy dysk
i jeden serwer. Budowa niezawodnego środowiska wymaga skutecznego
zarządzania rosnącym wolumenem danych, spięcia dwóch
niezależnych ISP oraz zapewnienia ciągłości działania usług, nawet w
przypadku awarii fizycznej maszyny.
Ten rozdział
to szczegółowy opis topologii i struktury zjk.pl.
Przedstawia on architekturę pozbawioną pojedynczych punktów
awarii (SPOF), w której warstwa sieciowa opiera się na
firewallach OPNsense HA (CARP) oraz agregacji łącz LACP/LAGG. Kluczowym
elementem tej konfiguracji jest wysoce skalowalna pamięć masowa,
zrealizowana w oparciu o systemy MooseFS oraz obiektowy SeaweedFS.
Poniższy materiał dokumentuje, jak te zaawansowane rozwiązania
magazynowania danych i replikacji funkcjonują w codziennej praktyce
produkcyjnej klastra.
Opis ekosystemu
serwerowni zjk.pl: "ekosystem", jak zjk.pl działa jako całość z
podkreśleniem najważniejszych technologii.

D.
Infrastruktura składa się z następujących warstw:

D.1
Warstwa brzegowa (Edge Layer) - komunikacja ze światem
- OPNsense
HA (master/slave),
- CARP
failover,
- dwa
niezależne łącza ISP,
- routing
i automatyczne przełączanie awaryjne,
- firewall
/ NAT / filtrowanie,
- HAProxy
/ reverse proxy,
- TLS
termination,
- HTTP/3
/ QUIC.
D.1.1 Opis brzegowy:
a.
warstwa składa się z dwóch modemów
różnych dostawców Internetowych,
b.
dwóch komputerów z OPNsense - z włączonym CARP i
tryblem Master-Slave. Schemat ilustruje ten system: 2 modemy Vectra i
Netia, 2 x OPNsense,
c. ale obejmuje warstwę następną -
sieci: dwa switche zarządzalny i zwykły oraz punkt WiFi.
D.2
Warstwa sieciowa (Network Layer) - czysta
infrastruktura transportowa
- switch
zarządzalny,
- switch
zapasowy / fallback,
- LACP
/ LAGG,
- VLAN
/ segmentacja sieci,
- trunki
i agregacja,
- punkt
dostępowy WiFi,
- sieć
LAN.
D.2.1 Opis sieci:
a.
LAGG/LACP łączy serwery ze switchem zarządzalnym 2x1Gb/s,
b. jednak w wybranych miejscach pojawia się jeszcze LAGG w trybie
failover oraz loadbalance.

D.3
Warstwa usług i aplikacji (Service Layer) - oferowane funkcjonalności /
usługi
- rozproszone
serwery WWW,
- poczta
Sendmail, Dovecot,
- Nextcloud,
Piwigo,
- WordPress,
- Jellyfin,
- Git
/ SVN / Forgejo,
- monitoring
- m.in. Monitorix, Mrtg, Ganglia, Symon,
- logowanie
/ syslog,
- DNS,
- reverse
proxy aplikacyjne,
- HA
usług.
D.3.1 Opis poczty:
a.
dwa serwery pocztowe mail.zjk.pl (mai1.zjk.pl) i mail2.zjk.pl, na
obydwu pracują Sendmaile + wszelkie programy bezpieczeństwa: rspamd,
Mailscanner, spamassasin oraz fetchmail razem z mechanizmami:
DKIM, SPF, openDMARC i kluczami LetsEncrypt.
b. na poziomie
dostępu klienckiego jest to dovecot z bardzo nowoczesnym mdbox (i
ciekawostka: poczta działa na montowanym z Moosefs /usr/home z
oddzielnym katalogiem szybkich lokalnych indeksów).

D.3.2 Opis klastra WWW:
Podaję
opis przepływu danych:
a. dane przychodzą na
OPNsense,
b. stamtąd HAproxy kieruje je metodą
Round-Robin ze sticky connections do
c. 4
serwerów www (sprawdzając, który aktualnie jest
dostępny),
d. 4 serwery korzystają z katalogów
udostępnionych na MooseFS (1 serwer jeden katalog )
e. lub
(tryb testowy/rezerwowy) 4 SeaweedFS (tam podobnie: 1 katalog 1
filler),
f. cache - lokalne przy każdym serwerze:
opcache i moduł apache memory/diskcache,
g. oraz redis
- redis jest skomplikowany, to jest 6 maszyn z jedną wybraną
na master przez 6 sentineli - synchronizacja działania odbywa
się przez HAproxy na OPNsense i z wybranego mastera korzystają
serwery www,
h. OPNsense dodaje protokół HTTP/3 (w
testach) na swoim wyjściu na protokole UDP,
i. wyjaśnienie -
katalogi zarówno MooseFS jak SeaweedFS - to tak naprawdę
jeden katalog MooseFS montowany na każdym serwerze www i podobnie
SeaweedFS - katalog jest jeden, ale są 4 oddzielne cache przechowujące
kopie tego katalogu na każdym komputerze oddzielnie.

D.3.3 Opis DNS:
a.
DNS zewnętrzny: 3 dostawców home.pl seohost.pl
porkbun.com - wpisy nie tylko standard, ale SPF, DKIM, DMARC itp - dla
kilku domen obsługiwanych przez serwery zjk.pl,
b. DNS
wewnętrzny BIND9: 4 maszyny: jedna master + 3 slave, opisujące pełny
schemat wewnętrznej struktury serwerowni zjk.pl.

D.4
Warstwa storage i danych (Storage & Data Layer) -
przechowywanie danych
i backend
- ZFS
+ RAID ZFS,
- MooseFS,
- SeaweedFS,
- PostgreSQL
cluster,
- MySQL
cluster,
- backup,
- repliki
danych,
- object
storage,
- snapshoty
i backup,
D.4.1 Opis ZFS:
System
plików obecny głównie na dyskach
magazynach danych (czyli MooseFS korzysta z dysków ZFS,
także wszystkie dyski archiwów, backupu), w jeden
pool typu raidz2-0 – odpowiednik RAID 6 (toleruje awarię 2
dysków).
Dyski systemowe z drobnymi
wyjątkami (na ZFS) to UFS2.

D.4.2 Opis klastra
Moosefs:
a.
1 master - to wersja Community Edition,
b. ale 2 serwery
mogą przejąc skryptem rolę mastera,
c. 12
chunkserwerów,
d. ok. 30 punktów
montowania, w tym warto zaznaczyć - montowanie dla
serwerów katalogu /usr/home (co jest dosyć trudną sprawą do
utrzymania), a punkty montowania to FreeBSD i Windows,
e. warto podkreślić, że istnieją klasy dysków HDD i
SDD (potrójne) oraz specjalna klasa dla 4 dysków,
które służą jako lokalne maszyny dostarczające pliki dla 4
serwerów www (dość unikatowe).

D.4.3 Opis klastra
Seaweed:
a. 3
mastery,
b. 7 fillerów,
c. synchronizowane na 4 różnych portach oddzielnie
w HAproxy w OPNsense,
d. 4 filery pracują na katalogi www,
pozostałe to punkty montowania z 2 i 3 krotnością, ale oddzielnie dla
szybkich SSD i zwykłych HDD - uwaga - 3 główne fillery maja
po dwa dyski HDD i SSD, filery www maja dyski SSD, w sumie jest zatem
10 dysków,
e. SeaweedFS trzyma metadane w
PostgreSQL - 3 oddzielne serwery, które pracują w trybie Hot
Redundancy, jeden wybrany na mastera - wybór oraz transmisja
danych bazy metadane odbywa się przez HAproxy,
które pracuje na OPNsense.

D.4.4 Opis baz danych:
a.
PostgreSQL w trybie Hot Redundancy: 3 serwery z czego jeden wybrany
na master, jego wybór odbywa się poprzez HAproxy na OPNsense
- z dostępem do bazy danych przez wspólny port na OPNsense -
ta baza danych przechowuje metadane SeaweedFS i m.in. dane z
backupu Bareosa,
b. MySQL - 5 serwerów w
trybie Cluster Replication, komunikują się z OPNsense do
wyboru jednego mastera i jednocześnie na OPNsense jest udostępniony
wspólny port dostępu do danych. MySQL to głównie
bazy danych dla www,
c. uwaga - bazy danych są
backupowane z pomocą systemowych narzędzi jako zrzuty
z retencją min. 15 dni.

D.4.5 Opis backupu:
a.
każdy z 8 serwerów ma dwa dyski: SSD główny i
HDD z lokalnymi dumpami (robione moim własnym skryptem -
miesięczne),
b. dane
trafiają na wspólny dysk sieciowy (NFS nie
MooseFS),
c.
a z niego na dysk zewnętrzny archiwum,
d. backupy
Bareosa (klasyka codzienne, tydzień i miesiąc) na
oddzielnych dyskach NFS,
e.
Urbackup - oddzielny dysk nfs
e. dyski
MooseFS i SeaweedFS trafiają na wspomniany
zewnętrzny dysk archiwum,
f.
backupy /etc /usr/local/etc konfiguracji - etckeep (testowo).

D.5
Warstwa użytkowników i klientów (Client Layer) - kto
korzysta z infrastruktury
- komputery
domowe,
- laptopy,
- urządzenia
mobilne,
- urządzenia
IoT,
- systemy
testowe,
- urządzenia
sieciowe użytkowników,
- stacje
robocze.
D.6
Warstwa systemów pomocniczych i operacyjnych (Operations
Layer) - zwykle nie pokazują tego homelaby, jest w zjk.pl
- monitoring,
- alerting,
- log
aggregation,
- backup
orchestration,
- automatyzacja,
- skrypty
HA,
- synchronizacja
konfiguracji,
- dokumentacja
infrastruktury.
D.7
Warstwa zasilania i niezawodności (Power & Reliability Layer) -
w zjk.pl zasługuje na własną warstwę
- UPS
#1,
- UPS
#2,
- dystrybucja
DC 12 V,
- bufor
akumulatorowy,
- redundancja
PSU,
- monitoring
zasilania,
- OR-ing
/ Schottky,
- failover
energetyczny,
D.7.1 Opis warstwy
zasilania:
a. dwa
UPS Fideltronik KI PRO 2000,
b. ich wyjściu jest jeszcze podwójny przełącznik
wykrywający zanik zasilania - czyli wybór linii zasilania
jest kaskadowy, jeśli jeden UPS wyłączy się, przejmuje zasilanie drugi,
c. zasilanie trafia do dwóch linii -
jedna jest główna do zasilacza 660 W 80Platinum - dającego
główną linię zasilania 12 V do wszystkich
serwerów,
d. serwery (wszystkie) mają na
pokładzie zasilacze Picopsu (znajdź opis w Internecie),
e.
drugi zasilacz mini-ITX 80Platinum generuje drugą linię zasilania 12 V ,
f. obie linie 12 V za pośrednictwem diod Schottkiego łączą się na linii
zasilania serwerów i innych zasobów wrażliwych,
jak OPNsense, switch, WiFi itp - żeby zasilanie do nich zawsze było
dostępne,
g. trzeci zasilacz dużej mocy generuje 12
V, ale już tylko do komputerów użytkowych - aby
były odseparowane.

D.8
Podsumowanie: wyróżniające technologie i bezpieczeństwo
- FreeBSD,
- OPNsense,
- HAProxy,
- MooseFS,
- SeaweedFS,
- PostgreSQL
HA,
- Mysql
Cluster,
- Redis,
- HTTP/2
oraz HTTP/3,
- SPF /
DKIM / DMARC,
- monitoring
bezpieczeństwa,
- systematyczne
aktualizacje.
Nazwa historyczna:
Dawna nazwa "ciasteczkowy
serwer" (nie mylić ze współczesnymi obudowami mini-ITX).
Angielska nazwa subminiaturowych komputerów to "biscuit
computer". Biscuit to po polsku herbatnik, sucharek (także ang.
"rusk"). Jednocześnie można zauważyć, że "ciasteczko" to raczej
angielskie "cookie". Jednak po polsku "herbatnikowy serwer" albo
"sucharkowy serwer" brzmi tak sobie... Dlatego ostatecznie zostawiłem
"ciasteczkowy serwer". Więcej o tych niezwykle małych. pobierających
mało energii komputerkach w dziale "sprzęt". Zapraszam... UWAGA - dawne
"ciasteczka" zostały zastąpione nowocześniejszymi konstrukcjami, ale
również o bardzo niskim poborze mocy - opis także w dziale
sprzęt.
Łącza
internetowe
Infrastruktura
wykorzystuje dwa niezależne łącza operatorów dla zwiększenia
dostępności usług.
1. Aktualny dostawca
Internetu - Vectra oddział Sieradz - łącze Vectra
biznes
(od
18.VI.2021r.): 600/60 Mb/s (czyli 75 MB/s i 7,5 MB/s)
IP:
88.156.77.167 dawniej 232
2. Drugie łącze:
Netia na BSA Orange, światłowód
(od
11.V.2021): 1000/300 Mb/s (czyli 125 MB/s i 37,5 MB/s) - promocja Netia
IP: 83.238.166.222
Serwer
posiada rejestrację nazwy w NASK, aktualnie home.pl -
oficjalnie: zjk.pl