Impactul buclei de rețea asupra proceselor noastre MongoDB și modul în care am răspuns
În timpul buclei de rețea, deoarece procesele noastre MongoDB nu s-au putut conecta normal, fiecare a marcat toate procesele asociate ca fiind offline. Adică, fiecare proces mongoS a marcat toate procesele mongoD asociate ca fiind offline și fiecare proces mongoD și-a marcat membrii setului de replici aferente ca offline. Cu toate acestea, chiar și după ce conectivitatea la rețea a fost restabilită la serverele noastre fizice de către Rackspace, nici procesele mongoS sau mongoD nu au restabilit toate conexiunile la celelalte procese care fuseseră marcate offline.
În acest moment, pentru a ajuta la eforturile echipei noastre de remediere a administratorului bazei de date Rackspace (DBA), echipele Braze DevOps au început rapid depanarea și testarea metodelor de restabilire a conectivității. Investigația noastră a stabilit că singura opțiune disponibilă a fost repornirea fiecăruia dintre cele aproape 16.000 de procese mongoD și peste 6.000 de procese mongoS din containerele lor virtualizate. Având în vedere amploarea acestei activități și faptul că automatizarea nu a existat pentru a reporni atât de multe containere rapid, inginerii Rackspace au scris un nou cod în timpul incidentului pentru a crea capacitatea de automatizare din mers.
Din păcate, pe măsură ce procesul de repornire a crescut, a apărut o altă problemă în sistemul Domain Name System (DNS). Pe măsură ce procesele mongoS și mongoD vin online, ele solicită informații de la rezolutorii DNS într-un proces cunoscut sub numele de căutare DNS. Cu căutările DNS continue determinate de viteza repornirilor, serverele DNS au fost supuse unei sarcini grele, ceea ce a dus la expirări de conectivitate pe straturile mongoS pe măsură ce se reconectau la procesele mongoD. Pentru a face față acestei sarcini în creștere, echipa noastră Rackspace a crescut capacitatea procesorului DNS, dar a fost apoi forțată să repornească a doua oară nivelul mongoS pentru a crea conexiuni sănătoase de la fiecare mongoS la procesele mongoD asociate.
În jurul orei 17:05 UTC, procesul de repornire a permis ca unele clustere să înceapă să revină online. Pe măsură ce performanța bazei de date și-a revenit și clusterele s-au stabilizat, Braze a continuat să crească capacitatea de procesare a datelor și de trimitere a mesajelor; totuși, acel efort a fost complicat de acumularea masivă rezultată din indisponibilitatea anterioară.
Având în vedere amploarea și sofisticarea mediului nostru de baze de date Rackspace, care constă din sute de baze de date distincte, durata întreruperii și volumul rezultat al restanțelor noastre (reprezentând miliarde de mesaje și miliarde de puncte de date ingerate), procesul de recuperare necesar în -adaptarea momentului a proceselor noastre normale de recuperare. Acest lucru a fost necesar pentru a se asigura că resursele bazei de date au rămas în echilibru cu cererile de procesare în curs, inclusiv introducerea unei cantități masive de capacitate generală de procesare.
Cu toate acestea, făcând acest lucru, Braze a atins o limită AWS a numărului de procesoare virtuale pe care le-am putut furniza, împiedicându-ne să adăugăm orice capacitate suplimentară de server. Echipa Braze a escaladat rapid această circumstanță cu echipa noastră AWS și a primit o creștere, permițând inginerilor noștri să crească capacitatea de procesare a serverului nostru la un nivel record, care a fost cu peste 50% mai mare decât capacitatea noastră maximă anterioară, care fusese atinsă pe Black. Vineri 2023.
Până la ora 20:30 UTC, toate clusterele noastre din SUA, cu excepția US 01, US 03 și US 08, își terminaseră procesarea restanțelor, iar acele clustere rămase procesau la rate maxime sau peste din ziua precedentă incidentului. În câteva ore, toate clusterele au fost redate la procesare în timp real și am declarat că incidentul a fost rezolvat.