Áno, aj v ére GNS3/Eve-ng ešte používame Dynamis/dynagen ako super CLI riešenie pre beh overených monolitických IOS

Na našom serveri / LXC kontajneri však pozorujeme “zamŕzanie” TCP relácii, ktoré sa prejavuje výpadkom telnet pripojenia na konzolu zariadenia na cca 10minut.

Server spravuje veľké množstvo interných topológií, aktuálne beží v danom čase desiatky Dynagen hypervizorov, ktoré obsluhujú cca 400 smerovačov a zároveň obsluhuje do 50 študentov. Zdá sa, že je vhodné a potrebné optimalizovať systémové a sieťové nastavenia, aby sa zabezpečila stabilita a výkon. Tu je konfigurácia ktorú testujem pre náš server či LXC kontajner:

1.Zvýšenie limitu otvorených súborov (file descriptors)

Server bude potrebovať veľké množstvo otvorených súborov (file descriptors) pre sieťové spojenia a virtuálne zariadenia.

* soft nofile 262144
* hard nofile 524288

Upraviť v /etc/security/limits.conf:

Upraviť /etc/sysctl.conf:

fs.file-max = 1048576

Aplikovať zmeny: sudo sysctl -p

2. Optimalizácia TCP nastavení

Optimalizácia TCP nastavení pomôže zvládnuť viac sieťových spojení a zabrániť problémom, ako sú straty paketov alebo oneskorenia.

Upraviť /etc/sysctl.conf:

net.core.somaxconn = 2048
net.core.netdev_max_backlog = 10000
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 5

Aplikovať zmeny: sudo sysctl -p

3. Možno do budúcna – Optimalizácia sieťových rozhraní


Pre vysokú sieťovú záťaž odporúčam optimalizovať sieťové rozhrania.

Upraviť /etc/sysctl.conf:

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

Aplikovať zmeny: sudo sysctl -p

Teória okolo

1) Zvýšenie limitu pre počet otvorených súborov:


Skontroluj limit príkazom:
ulimit -n VALUE


Výpis otvorených súborov a počet podporovaných file descriptorov:
cat /proc/sys/fs/file-nr

Tento príkaz vypíše tri čísla:

  • Prvé číslo: Počet aktuálne alokovaných file descriptorov (otvorených súborov).
  • Druhé číslo: Počet nepoužitých file descriptorov.
  • Tretie číslo: Maximálny počet file descriptorov, ktoré systém podporuje (hodnota fs.file-ma

or celkový počet otvorených súborov pre všetky procesy v systéme

lsof | wc -l

Nastaviť počet:
Nastav neperzistentne:
ulimit -n 131072

Nastav perzistentne:

  1. Nastavenie limitu v /etc/security/limits.conf:
    Uprav súbor /etc/security/limits.conf a pridaj nasledujúce riadky pre používateľa alebo skupinu, ktorá beží na serveri. Ja nastavujem na:
  • * soft nofile 262144
  • * hard nofile 524288
  • soft nofile: Aktuálny limit, ktorý môže používateľ zvýšiť.
  • hard nofile: Maximálny limit, ktorý nemôže byť prekročený.
  • * – vsetci používatelia or nahraď menom

  1. Nastavenie systémového limitu v /etc/sysctl.conf:
    Uprav súbor /etc/sysctl.conf a pridaj nasledujúci riadok:

fs.file-max = 2097152


Tento parameter nastavuje maximálny počet otvorených súborov pre celý systém. Hodnota 2097152 je bežne používaná pre serverové prostredia.

Po úprave aplikuj zmeny príkazom:

sudo sysctl -p

2) Nastavenie TCP keepalive:
Aktivujem TCP keepalive, aby sa zabránilo tomu, že neaktívne spojenia zostanú otvorené príliš dlho. Robím pridaním nasledujúcich riadkov do /etc/sysctl.conf:


Potom použi príkaz sysctl -p, aby sa zmeny prejavili.

net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 60
net.ipv4.tcp_keepalive_probes = 5

Teória:

Čo robí TCP keepalive?
TCP keepalive je mechanizmus, ktorý periodicky kontroluje, či je druhá strana spojenia stále aktívna. Ak nie, spojenie sa uzavrie. Toto je dôležité pre:

  • Uvoľnenie zdrojov: Uzavretie nepotrebných spojení uvoľní file descriptory a pamäť.
  • Detekciu problémov: Zistenie, či druhá strana spojenia prestala reagovať (napr. kvôli výpadku siete alebo pádu servera).
  • Parametre TCP keepalive:
    V Linuxe sú tri hlavné parametre, ktoré ovplyvňujú správanie TCP keepalive:

net.ipv4.tcp_keepalive_time:

  • Čas (v sekundách), po ktorom sa začnú odosielať keepalive pakety, ak spojenie nebolo aktívne.
  • Predvolená hodnota: 7200 sekúnd (2 hodiny).
  • Odporúčaná hodnota: 600 (10 minút).

net.ipv4.tcp_keepalive_intvl:

  • Interval (v sekundách) medzi odoslaním jednotlivých keepalive paketov.
  • Predvolená hodnota: 75 sekúnd.
  • Odporúčaná hodnota: 60 (1 minúta).

net.ipv4.tcp_keepalive_probes:

  • Počet keepalive paketov, ktoré sa majú odoslať, ký*m sa spojenie považuje za mŕtve.
  • Predvolená hodnota: 9.
  • Odporúčaná hodnota: 5.

3) Optimalizácia nastavení TCP:
Ďalšie nastavenia TCP v /etc/sysctl.conf:
Opäť použite príkaz sysctl -p, aby sa zmeny prejavili.

net.core.somaxconn = 1024
net.core.netdev_max_backlog = 5000
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1

Teória

Tu je vysvetlenie, čo robia jednotlivé parametre a ako ich optimalizovať:

net.core.somaxconn = 1024

  • Čo robí: Nastavuje maximálny počet požiadaviek na pripojenie (connection requests), ktoré môžu čakať v rade na prijatie (backlog) pre každý socket.
  • Predvolená hodnota: Zvyčajne 128.
  • Optimalizácia: Zvýšenie na 1024 alebo vyššie zlepšuje výkon serverov, ktoré spracúvajú veľké množstvo súčasných pripojení (napr. webové servery).
  • Kedy použiť: Ak máte server s vysokou záťažou a často sa vyskytujú problémy s oneskorenými pripojeniami.

net.core.netdev_max_backlog = 5000

  • Čo robí: Nastavuje maximálny počet paketov, ktoré môžu čakať v rade na spracovanie sieťovým rozhraním (interface), keď je systém zaneprázdnený.
  • Predvolená hodnota: Zvyčajne 1000.
  • Optimalizácia: Zvýšenie na 5000 pomáha predchádzať stratám paketov pri vysokom sieťovom zaťažení.
  • Kedy použiť: Ak máte vysokú sieťovú prevádzku a často strácate pakety.

net.ipv4.tcp_max_syn_backlog = 2048

  • Čo robí: Nastavuje maximálny počet neúplných TCP spojení (SYN packets), ktoré môžu čakať v rade na dokončenie (trojcestného handshake).
  • Predvolená hodnota: Zvyčajne 128.
  • Optimalizácia: Zvýšenie na 2048 alebo vyššie zlepšuje odolnosť servera proti SYN flood útokom a zvyšuje kapacitu pre súčasné pripojenia.
  • Kedy použiť: Ak máte server, ktorý často prijíma veľké množstvo nových pripojení.

net.ipv4.tcp_fin_timeout = 30

  • Čo robí: Nastavuje čas (v sekundách), po ktorom sa uzavrie TCP spojenie po odoslaní posledného paketu (FIN).
  • redvolená hodnota: Zvyčajne 60 sekúnd.
  • Optimalizácia: Zníženie na 30 sekúnd urýchľuje uvoľnenie zdrojov (file descriptorov a pamäte) pre neaktívne spojenia.
  • Kedy použiť: Ak máte veľa krátkodobých TCP spojení a chcete rýchlejšie uvoľniť zdroje.

net.ipv4.tcp_tw_reuse = 1

  • Čo robí: Umožňuje opätovné použitie TIME-WAIT socketov pre nové TCP spojenia, ak je to bezpečné.
  • Predvolená hodnota: Zvyčajne 0 (vypnuté).
  • Optimalizácia: Nastavenie na 1 znižuje počet socketov v stave TIME-WAIT a zlepšuje výkon pri vysokom počte krátkodobých spojení.
  • Kedy použiť: Ak máte server, ktorý často vytvára a uzatvára veľa TCP spojení (napr. webové servery).

net.ipv4.tcp_tw_recycle = 1

  • Čo robí: Umožňuje rýchlejšie uvoľnenie socketov v stave TIME-WAIT.
  • Predvolená hodnota: Zvyčajne 0 (vypnuté).
  • Optimalizácia: Nastavenie na 1 môže zlepšiť výkon, ale môže spôsobiť problémy v prostrediach s NAT (napr. za routerom).
  • Kedy použiť: Len na serveroch, ktoré nie sú za NAT a majú veľa krátkodobých TCP spojení.
  • Poznámka: Tento parameter sa nepoužíva v novších jadrách Linuxu (od 4.12), pretože môže spôsobovať problémy.

Leave a Reply

Your email address will not be published. Required fields are marked *