Puncte:0

Ceva se închide conexiunile în VM-urile mele CentOS - cum să depanez cel mai bine?

drapel cn

Am o configurare cu 3 VM-uri (1 server de aplicații pe CentOS6 și 2 servere de baze de date pe CentOS7).În ultimele 1-2 săptămâni am avut probleme cu timeout-urile la conectarea la serverele de baze de date (și între cele două servere care se află într-un cluster).

Furnizorul de baze de date (Couchbase) poate vedea din jurnale că conexiunile sunt forțate închise:

WARN com.couchbase.endpoint - [com.couchbase.endpoint][UnexpectedEndpointDisconnectedEvent] Partea de la distanță a deconectat punctul final în mod neașteptat

Jurnalele arată, de asemenea, că pachetele sunt abandonate, cum ar fi:

[avertisment] Eșecuri de interfață âens32â (eliminare a datelor): RX:2863 / TX:0 - Detalii:
- Pachete RX: 308.593.167 erori: 0
a scăzut:2.863 depășiri:0 frame:0

VM-urile sunt găzduite pe aceeași gazdă care este un VMware ESXi (versiunea 6.5). Astfel ei ar trebui să să poată avea legături bune unul cu celălalt.

Și ce s-a schimbat în ultimele două săptămâni? Actualizări de securitate pentru sistemele de operare VM și versiunea serverului de baze de date (de la 6.6.0 la 7.0.0). Actualizarea bazei de date nu ar trebui schimba orice în rețea, dar evident este motivul pentru care am contactat prima dată furnizorul de baze de date...

Orice idee pentru a găsi vinovatul este foarte apreciată :-)

Editați | ×:

Urmând sugestia lui Cameron, am rulat o scurtă urmărire a rețelei și am încărcat-o în Wireshark pe computerul meu local. Apoi am deschis „Informații despre experți” și am primit asta: Wireshark - Informații de specialitate Trebuie să spun că există un server proxy Nginx în fața serverului de aplicații. Se ocupă de SSL și „o ridică” înainte de a accesa aplicația. Server. Doar uitându-mă la informații, m-aș aștepta ca cele două blocuri „roșii” să fie legate de cererile venite din exterior - și nu din aplicație. server la serverele bazei de date.

Dar nu sunt sigur ce să caut în rezultate? - și cred că trebuie să mai las puțin - dar poate fără informațiile din exterior?

Editare 2

În timp ce stăteam și mă uitam la el, problema a apărut de fapt... - așa că am pornit rapid din nou tcpdump. Deci, rezultatele ar putea să nu conțină cauza principală - dar ar trebui să fie mai relevante decât prima: Wireshark - informații despre experți (2) Blocurile pe care le-am extins par a fi legate de comunicarea cu unul dintre serverele de baze de date.... :-)

Dar ce înseamnă aceste rezultate și cum mă apropii de a găsi cauza?

Cameron Kerr avatar
drapel id
Fereastra TCP fiind plină ar indica ceva agățat dintr-un anumit motiv și nu citește intrarea sa disponibilă. Pachetele „Couchbase” sunt deosebit de îngrijorătoare; dacă faceți clic pe ele, veți găsi că un pachet este selectat în fereastra principală Wireshark. Faceți clic dreapta și utilizați funcția Urmăriți fluxul TCP pentru a vedea ce se spune de fapt. Bănuiesc că aveți de-a face cu o incompatibilitate cu versiunea clientului sau serverul este acum mai sensibil la anumite tipuri de solicitări, cum ar fi caracterele ilegale dintr-un nume de antet.
John Dalsgaard avatar
drapel cn
Mulțumesc @CameronKerr. Nu pot spune din asta dacă ceva nu este așa cum ar trebui să fie... dar am trimis ultima captură unui inginer de la Couchbase. Vom vedea ce înseamnă pentru el :-)
Puncte:0
drapel id

bun venit la Server Fault.

Având în vedere vârsta; CentOS 6 fiind acum fără suport, ar fi foarte probabil să suferiți de incompatibilități SSL/TLS; presupunând, desigur, că vă conectați prin asta. Cu siguranță am experimentat o mulțime de astfel de evenimente de-a lungul timpului cu RHEL6, deoarece SSL2 etc. a fost dezactivat progresiv în mod implicit. În mod similar, cu diferite versiuni punctuale ale Java (unele versiuni punctuale din seria 1.7 au fost deosebit de distractive)

Un alt motiv posibil, având în vedere că rulați o sarcină de lucru CentOS pe ESXi, este acela că ați putea să nu faceți entropie, ceea ce provoacă un comportament de blocare care poate duce la expirări de timp și probleme de cluster, ceea ce duce la întreruperi de conexiune. Până undeva în Java 8, Java a fost deosebit de sensibil la acest lucru. Puteți judeca dacă aceasta este o problemă pentru dvs. uitându-vă la /proc/sys/kernel/random/entropy_avail în timp; dacă ajunge sub 128 sau cam asa ceva și nu revine, atunci ai foamete de entropie. Frecvent pe un VM unde nu există activitate de tastatură-mouse; ați putea încerca să rulați un daemon de colectare a entropiei, dacă acesta este cazul.

BTW, nu aș concluziona din acele jurnale că ceva [altceva] forțează în mod activ acele conexiuni să se închidă; este doar că conexiunea s-a închis într-un moment în care una dintre părți nu se aștepta. Acest lucru s-ar putea datora unor lucruri precum timeout, excepții, blocarea procesului etc.

Spui că serverul de baze de date a fost actualizat... a fost o actualizare a sistemului de operare de la CentOS 6? A fost și aplicația actualizată sau a fost ridicată și mutată?

Noroc, Cameron

John Dalsgaard avatar
drapel cn
Mulțumesc pentru răspuns Cameron! Eu rulez fără TLS în „interior”, unde serverele nu sunt accesibile public, așa că nu este problema.entropy_avail pe serverul CentOS6 este între 129 și 177 în ultimele 5-10 minute. Pe cutia CentOS7 este de aprox. 3500. Doar software-ul DB a fost actualizat (yum). Când am verificat ultima dată, nu părea să existe o opțiune de „upgrade” pentru CentOS 6 -> 7, ceea ce explică într-o oarecare măsură de ce app.server este încă pe 6 ;-)
John Dalsgaard avatar
drapel cn
Prin _„forțarea activă a conexiunilor să se închidă”_ mă refeream la exact ceva „în jurul” aplicației. Serverul bazei de date (și SDK-ul) nu se aștepta să se închidă. Sunt de acord că, cel mai probabil, acest lucru s-ar putea datora fie timeout-urilor, fie epuizării resurselor undeva... Nu sunt sigur unde să-l găsesc!
Cameron Kerr avatar
drapel id
Aș fi îngrijorat că „entropia” dvs. disponibilă (în realitate este o denumire greșită) este destul de deprimată. În general, mi-am rulat serverele într-o setare similară cu următoarele: `echo 1024 > /proc/sys/kernel/random/read_wakeup_threshold` (valorul implicit este 64). Am făcut acest lucru de ani de zile pe RHEL5, 6, 7, 8 în medii de producție, inclusiv dispozitive de la furnizor care rulează pe VMware (este frumos pentru că are un contact foarte scăzut)
Cameron Kerr avatar
drapel id
Care a fost saltul de versiune în partea bazei de date? Biblioteca clientului bazei de date trebuie să se potrivească? (Nu sunt familiarizat cu Couchbase). Deoarece rulați text clar, uitându-vă la o captură de trafic (de exemplu, tcpdump -i eth0 -s0 -w /tmp/capture.pcap, apoi copiați captura finalizată pe o mașină cu wireshark, este posibil să găsiți indicii utile folosind Funcțiile „Expert Info” și „Follow TCP Stream”.
John Dalsgaard avatar
drapel cn
Baza de date a fost actualizată de la versiunea 6.6.0 la 7.0.0. SDK-ul care a fost instalat ar trebui să vorbească fericit cu ambii. De asemenea, am actualizat SDK-ul la cel mai recent pentru a exclude această problemă. Înregistrarea de la SDK arată că cel mai probabil există probleme în stratul de rețea de bază. Am căutat mai multe informații despre `read_wakeup_threshold` și `entropie` și am găsit asta: https://redhatlinux.guru/2016/04/03/increase-system-entropy-on-rhel-centos-6-and-7/ - sugerează că „entropia_disponibil” ar trebui să fie în intervalul 3-3.500. Așa că ar trebui să încerc să-l măresc în aplicație. Server?
John Dalsgaard avatar
drapel cn
Hmmm... neștiind nimic despre `entropie` am citit câteva articole.... se pare că are legătură cu criptografie (SSL) și randomizare.... Poate aceasta să fie încă problema în situația mea în care am nu folosești SSL? Dar văd că `entropy_avail` este mult mai mic decât 3000 pe aplicația mea.server (128-190ish)
John Dalsgaard avatar
drapel cn
În special acest articol: https://www.2uo.de/myths-about-urandom/ - deși nu am intenționat să înțeleg totul, deoarece indică în direcția SSL....
John Dalsgaard avatar
drapel cn
Am crescut `read_wakeup_threshold` așa cum ați descris înainte de a raporta din nou un timeout (când am luat al doilea tcpdump). Deci nu `entropy_avail` raportează în intervalul de aproximativ 2500-2600
John Dalsgaard avatar
drapel cn
Tocmai am aflat de la cei care găzduiesc că găzduiesc aceste servere pe 3 servere ESXi. Deci, serverele ar fi putut rula pe diferite gazde la un moment dat - le-am rugat să vadă dacă pot verifica asta. După modificările aduse `entropy_avail` (sau prin coincidență) serverele par să fi funcționat mai bine. Încă nu am primit un răspuns de la inginerul Couchbase.
John Dalsgaard avatar
drapel cn
Dacă continuă să funcționeze fără probleme, atunci mă gândesc să iau o nouă urmă pe serverul de aplicații și pe cele două servere db - doar pentru a vedea dacă problemele anterioare sunt încă acolo.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.