Heronovo IT doupě

Můj přístup k administraci serverů

TLDR: minimalismus, výběr vhodných HW komponent, výběr vhodného OS, pouze nezbytné balíčky, nechat vše pokud možno v defaultních hodnotách, nenastavovat víc, než je nutné, firewall není potřeba, logy nejsou potřeba.

Už jsem to vlastně psal v mnoha článcích a v diskusích. Můj přístup k administraci serverů je odlišný od přístupu většiny lidí, se kterými jsem se potkal. Zde je můj pohled na věc.

Výběr HW

Tohle považuju za základ. HW komponenty vybírám tak, aby fungovaly out of box. Vzpomínám si, jak jsme v nějakém týmu řešili síťové karty (je to více než 12 let nazpět). Kupovaly se nějaké nejlevnější Realteky (ano…) s cenovou kolem 140Kč. A byly s nimi problémy (jak jinak). Prosazoval jsem, aby se kupovaly o něco dražší síťovky (tehdy tuším 3Com). Ne. Prý stačí nějak zkompilovat nějaký kernel modul, ten nějak nastavit a vše pojede. No nedopadlo to. Upřímně, nemá smysl věnovat čas (desítky hodin) na nastavení HW v této cenové kategorii. Ušetřeny stokoruny, promrhány desetitisíce.

Soukromě jsem to řešil tak, že po dvou hodinách nastavování Realteku na nějaké základní desce jsem prostě objednal Intel Pro Desktop Adapter (nebo tak nějak), s cenovou pár tisíc. Kernel module e1000e a běží všude. Kdykoliv mám problémy se síťovkou na desce (a je jedno, jestli Windows, Linux nebo FreeBSD) dám tam tuhle Intelku a je to. Zaplatila se už několikrát.

Nemám nic proti, pokud někoho soukromě baví ladit HW. Pokud je to jeho koníček a chce to dělat, tak je to skvělé. Já to nedělám. Od HW chci, aby fungoval. Chci si hrát se software.

Můj HW zkrátka musí fungovat out-of-box pro daný OS a podle toho jej vybírám. Dostaneme se k tomu ještě u software, obecně platí (moje zkušenost), že pokud jsou s něčím problémy už během instalace, provoz a řešení potíží bude už jenom horší.

Výběr OS

Není dobré se omezovat na jeden OS. Nejsem (už) ortodoxní linuxák, spravuju Linux, FreeBSD a už i nějaké ty Windows. Pokud je HW dodaný s nějakým OS, nemá smysl tam páčit něco jiného. V práci máme na stole HW přímo dodávaný s Windows (nejedná se o desktop PC nebo server, jde o specifický HW). Ano, zkusil se Debian 10 (s nevelkým úspěchem), Debian 11 fungoval, ale zase k tomu není potřebný software (byl by dejme tomu za několik měsíců). Proč tam tedy nenechat Windows? Když tam vše jede?

Stejně tak jeden pěkný server. Přišel s Windows Server (snad 2022). Nechat ho tam. Do Hyper-V se dají virtuálky s Debianem. Ideální kombinace. HW je plně podporován, hyper-v funguje. Ano, kdybych ten HW vybíral já, tak tam bude Linux / Promox a KVM. Ale výběr HW jde mimo mne a nevidím problém tam nechat MS Windows Server 2022.

Jsem velkým fandou FreeBSD, soukromě jej mám téměř výhradně, ale občas je lepší Linux (Debian). Z mnoha důvodů. Na VPS u Hetznera mám Debian. Proč ne.

Výběr software / služeb

Výběr systémové architektury je komplexní proces. Je třeba zvážit mnoho různých protichůdných požadavků. Pokud se jedná o interní vývoj, je třeba úzké komunikace mezi vývojáři, administrátory apod. Moc nevěřím na moderní DevOPS. Podle mě je myšlení programátora a technika naprosto odlišné. Jako admin požaduji stabilní software. Software, který je ideálně starší než já, má miliony uživatelů a jeho pád nikdo posledních 20 let neviděl. Programátoři (někteří), mají z nějakého důvodu rádi komponenty a frameworky, které před rokem neexistovaly a za rok už si na ně nikdo nevzpomene (na ten framework, ne na ty programátory ;-)).

Osobně se mi vždy vyplatila sázka na „30+“ let starý software. Ano, zní to konzervativně, ale na druhou stranu se mi nikdy nestalo, že by mě to nějakým způsobem zklamalo. Asi není překvapení, že DB je jednoznačně PostgreSQL, webserver za mě klidně Apache HTTPD (ale nic proti nginx), FreeBSD / Linux a jako backeng Python nebo ideálně Golang. Moje první stránky jsem psal v ANSI C, k tomu jako CGI Apache Webserver a nějaká souborová databáze (tuším snad TrivialDB). HTML je pouze text a text zvládne na výstup poslat jakýkoliv jazyk. Oblibu PHP považuju za velmi špatný krok stranou (fakt nevím, proč by se měla stránka renderovat při každém http requestu). Proč by měl být web psán ve skriptovacím jazyku? Python, ok, dejme tomu, ale proč ne rovnou kompilovaný jazyk? Dneska to vidím jednoznačně na Golang nebo Rust. Oba rychlé (dobře, Rust je mnohem rychlejší, ale když ono je to v podstatě takové C++ s lidskou tváří, Golang je mnohem jednodušší a zvládne totéž) memory safe jazyky s podporou multithreadingu a snadné pro psaní mikroslužeb, REST API apod.

Ale to jsem trochu odbočil. Vývoj vlastního software by měla být až ta poslední možnost. Poslední. Odmítnutá, tisíckrát posouzená, nakonec na výjimku povolná, pouze dočasně. Nemám žádný sentiment ke svému kódu. Jakmile najdu v repositáři vhodný program, který dělá co potřebuji, tak můj program jde okamžitě pryč a přechází se na balíčky z repositáře dané distribuce. A o starost je méně. Programy z repa používá víc lidí, jsou logicky více testované, většinou i lépe výkonnostně odladěné (no, i když tohle neplatí univerzálně) a nemusím se o ně starat. Ano, v repu toho hodně chybí, protože nejsou maintaineři, což je velmi odpovědná a záslužná práce. Svoje programy budu postupně dávat jako OSS pod licencí GPL/BSD, ale balíčky pro ně tvořit nebudu. Ostatně, je to Golang, takže kompilace jednoduchá a výsledek je jedna binárka. O mém postoji ke goučku jsem tu psal.

Software třetích stran

Nakousl jsem to už u výběru HW. Pokud je nějaký program složité nainstalovat, tak jeho provoz bude už jen horší. Můžete se mnou klidně nesouhlasit v diskusi.

Z praxe vím, jak složité je nainstalovat software různého typu. WordPress, Drupal, Gallery2 (ne, fakt ji nenechám umřít a budu na ni dál odkazovat. G2 považuju za jeden z nejlepších PHP programů. Galerie pro techniky, ACL, hromada komponent, funguje od PHP5 do PHP7.2, psaná pro PostgreSQL 7.4 a funguje i na PostgreSQL12 – takto se má psát software!) nainstalujete do pěti minut. Pokud nějaký software vyžaduje desítky manuálních kroků, tak jej dávám na blacklist. Instaloval jsem nejspíš GLPI (nevím, zda to byl tento projekt, nechci jim škodit), a instalační manuál byl na několik stránek. Takto tedy ne, přátelé. Potřebuješ DB, jméno heslo. Tím to prostě končí. Už i ta G2 uměla používat mnoho různých komponent na grafiku, takže pokud chybělo jedno rozšíření a bylo k disposici jiné, tak program prostě běžel. Software, který vyžaduje přesný seznam modulů a ještě ve specifických verzích je prostě špatně napsaný. Jiné programy to zvládnou levou zadní, očichají si prostředí, případně si řeknou o několik málo opravdu nutných komponent (kde několik málo jsou typicky 3) a spokojeně běží.

Administrace

Všechno dělat as simple as posible (simple as fuck ;-)). Tohle souvisí s výběrem služeb. Většina mnou provozovaných serverů (serverů, kde jsem měl svůj podpis), měla minimum služeb v naprosto minimální konfiguraci. Jako příklad můžu uvést diskové pole pro vmware cluster. Instalace linuxu, export NFS. Hotovo! Nic víc není potřeba, pokud si tak navrhnete infrastrukturu.

Shořelo nám pole (samozřejmě v noci, v neděli, po flámu a já nevím co), instalace OS (toho času snad ještě CentOS), nastavení exportů NFS, připojení do vmware. Hotovo za půl hodinky, největší zdržení byl snad boot hw raid řadiče (Areca). Dneska mi boot serveru zdržuje Adaptec.

Toto je moje rada pro adminy. Představte si, co všechno budete muset nastavit, když to CELÉ shoří. Já moc ne. Aplikační server znamená čistý minimální Debian, PostgreSQL (default), Apache Webserver (jen nastavení virtualhost) a daná appka. Práce na 20 minut, z toho 19 čekání na reboot a instalaci debianu. Potom je to jen o jednom řádku apt install, nastavení uživatelů v PostgreSQL, load dumpu do DB, nastavení virtualhostu a nakopírování appky. Done!

Firewall není potřeba

Firewall by neměl být potřeba. Na serveru by měly běžet pouze nezbytně nutné služby pouze v minimálním nastavení. Kde co umí používat UNIX sockety, nemusí mít vůbec IP socket. Kde co lze nabindlovat na localhost. Správně nastavený server by měl poslouchat pouze na portech, které mají být tak jako tak exportovány do světa. Na takto nastaveném serveru není potřeba firewall. A toto myslím zcela vážně.

Neříkám, že používat FW je chybou, to vůbec ne. Ale je chybou na něj spoléhat jako na jedinou ochranu serveru. Ne, mělo by to být něco doplňkového. Firewall – oddělení požárních prostor zde není pro každodenní použití. Ve fabrice / v bytovém domě by nemělo trvale hořet a obyvatelé by neměli být spokojeni s protipožárními dveřmi, které oddělují trvale hořící prostory od zbytku. Ne. Protipožární stěny svou funkci v ideálním případě nenaplní nikdy. Stejně by to mělo být s firewallem. Neměl by být vlastně vůbec potřeba.

Logy nejsou potřeba

Přijde mi zvláštní, kolik úsilí se věnuje logování. Každý nováček na pohovoru mi řekl, že nejdůležitější je správné a bohaté logování. No není.

Základem je znát všechny komponenty, všechny služby. Vědět proč jsou nainstalované, jak se chovají za různých situací a jak se pozná, že něco není ok. Měl jsem ve správě servery, u kterých jsem po letech už jenom z chování ssh konzole poznal, že něco není ok. Ta neuronka v naší lebce má ráda vyhledávání vzorů, velmi rychle se naučí správný stav a velmi rychle vyhodnotí, když je něco jinak.

Takže, ze znalosti všech služeb, jejich chování v nestandardních situacích lze velmi rychle a velmi snadno poznat, co je špatně. Na tohle téma jsem vedl hodně diskusí, které bych shrnul do: „admin přece neví, co je špatně, pokud nemá monitoring a logy“. Moje odpověď je, že by to prostě poznat měl. Taky dáváte auto do servisu, kde technik nepozná, že motor má divný zvuk, kola upadávají, řadička je nějak nakřivo a ve výfuku jsou díry, jen podle diagnostiky? Ne! Zkušený automechanik pozná během několika sekund, že motor dělá divný zvuk, které ložisko je zadřené, že je špatně geometrie apod. Jasně, diagnostika je potřeba, ale ne na absolutní základy. Opravdu nechci servis čehokoliv od člověka, který vůbec neví co servisuje a jen spoléhá na monitoring a logy.

Za ty roky jsem viděl desítky monitoringů, které byly sice krásně kompletně zelené (OK, NORMAL, NOMINAL), ale server vůbec neposkytoval potřebné služby. (Prý to je těžké nastavit, prej stačí monitorovat load – k tomu už se vůbec raději nebudu rozepisovat.) Potom jsem viděl monitoringy, které chrlily jeden warning za druhým a server fungoval zcela bezchybně. A zoufalé techniky, které jen řeší, jak ten warning vyřešit. Na tom zcela funkčním serveru.

Monitoring a logy jsou jistě fajn, ale není to základ. Základem je vědět co a proč a jak tam běží. A stačí se jen přihlásit na ssh, aby člověk poznal, že něco není ok.

Osobně logy moc nepoužívám a nenastavuju. Obvykle stačí default, dát si pozor na GDPR – za mě super věc. Konečně je vidět, kolik zcela zbytečných infromací se sbíralo. Nedávám souhlas se zpracováním nikde. A díky znalosti problematiky nastavuju logování pouze na nezbytné technické minimum. Když se ty logy dostanou do nesprávných rukou, tak tam stejně nic není – i IP lze anonymizovat (zcela nesmyslně je to osobní údaj, já nevím kde vy na těle máte network interface, ale já nic takového nenám). Logy jsou pro technika, ne pro šmíráky.

Zamyšlení nakonec, proč to tak je

Vůbec to nesouvisí s IT, souvisí to s povahou daných lidí. Krásně to vysvětluje vtip: oprava 200USD: 1USD šroubek, 199USD vím, kam patří. Spousta lidí oceňuje práci jen na základě stráveného času. A jsou rozčíleni, pokud si někdo za půl hodiny práce řekne 10tis.Kč. A tito lidé v práci pracují tak, aby to bylo co nejvíc vidět. Nastavují „všechno“, prakticky žádný soubor v /etc nezůstane v defaultu. Stráví tím (zbytečně) hromadu hodin. A dostanou ocenění, jak na tom makali. Na tom serveru, který potom bude nutné znovu nastavit při každém major update. Protože je tam nastavené zcela všechno.

Ne. Tohle nepovažuju za správné. Důvod je ten, že 199USD za „vím kam ho zašroubovat“ opravdu neznamená jen těch 10minut času. Všechny IT problémy jsem schopen vyřešit do několika minut. Výměna disků v mdadm, zfs, btrfs. Instalace a nastavení PostgreSQL. NFS storage, webservery apod. Co ti lidé obvykle nevidí jsou ty stovky nebo už spíše tisíce hodin času, které jsem na tom strávil učením, zkoušením, přemýšlením, jak to co nejvíce rozbít a potom zase opravit. PostgreSQL umím adminovat proto, že jsem si vzal dokumentaci, celou jsem ji přečetl a všechno si vyzkoušel, včetně krajních situací. Proto vím, co má smysl se ještě pokusit opravit a kde už je lepší obnovit zálohu.

Stejně tak v SVJ (jsem předseda SVJ, už 10 let, a k tomu nově předseda BYTOL). Opravdu nechci, aby tam každý řemeslník trávil zbytečně hodiny času navíc. Umíš to za půl hoďky? Super. Faktura na 10tis? No problémo. Kolegové (někteří) s tím mají problém a raději ocení někoho, kdo to dělá desítky hodin a jede tam 4x, než člověka, který má vše v autě a profesionálně to vyřeší během jedné návštěvy (taky nesnášíte, když přijede řemeslník na předem přesně dohodnutou práci a vzápětí odjede nakoupit? Proč to nemá v dodávce? O to víc oceňuju profíky, kteří prostě přijedou a udělají vše potřebné na jeden zátah). Tak s kolegy ve výboru SVJ/spolku vedu diskusi na téma, kdo jiný by to udělal tak dobře a za nás s menšími náklady na administraci (předání klíčů, prostor, hlídání apod.). Tohle jsou další náklady navíc. Stejně jako ty nefunkční a levné síťovky. Kolem špatného řemeslníka musíte neustále běhat. Dobrý to vyřeší hned napoprvé. Ať si to klidně nechá zaplatit, ušetřil mi spoustu času. Já jako předseda chci také trávit administrací SVJ a spolku minimum času. Chci, aby to fungovalo a ne se v tom neustále hrabat.

Tohle se jen tak nezmění. Jsou lidé, kteří rádi ukazují, co všechno umí nastavit a jejich díla jsou maximalistická. Zbytečné komponenty, zbytečné nastavení, zbytečná kompilace driverů z důvodů špatného výběru HW. A jsou lidé, kteří účtují jen podle času. 30h je lepší, než půl hodiny. Protože přece se potom nebude v práci 7.5h flákat… Ale to je další téma na jindy.

Základem je být profík v dané oblasti. Už to pomalu, velmi pomalu nastupuje do česka. Už to nejsou „brouci pytlíci“, kteří umějí všechno a zároveň nic pořádně. Už to jsou profíci na danou oblast. Ano, místo jednoho technika jich bude potřeba třeba 5, ale každý z nich udělá rychle, efektivně svou část práce a výsledek bude stát za to. Stejně tak v IT je blbost dělat všechno. Někdo umí DB, storage, systémy souborů, někdo jiný umí nastavit MX server, někdo další umí programovat, někdo zná dokonale HW. Každý ve své expertní oblasti. Snad už opravdu končí doba, kdy se všechno oceňovalo jen pouze podle vykázaného času nebo podle řádků kódů (hehe, kdybych chtěl být placen za kód, tak budu psát XML/XSD, co by se jinak zvládlo na pár desítkách řádků má už několik tisíc :-D). Cílem by mělo být nezbytné minumum.