ProHoster > Blogs > AdministrÄcija > KļūmjpÄrlÄces klasteru modelÄÅ”ana, pamatojoties uz PostgreSQL un Pacemaker
KļūmjpÄrlÄces klasteru modelÄÅ”ana, pamatojoties uz PostgreSQL un Pacemaker
Ievads
Pirms kÄda laika man tika dots uzdevums izstrÄdÄt kļūmjpÄrlÄces klasteru priekÅ” PostgreSQL, kas darbojas vairÄkos datu centros, kas savienoti ar optisko Ŕķiedru vienÄ pilsÄtÄ, un spÄj izturÄt viena datu centra atteici (piemÄram, strÄvas padevi). KÄ programmatÅ«ru, kas ir atbildÄ«ga par kļūdu toleranci, es izvÄlÄjos Elektrokardiostimulatorsjo tas ir oficiÄlais RedHat risinÄjums kļūmjpÄrlÄces klasteru izveidei. Tas ir labi, jo RedHat nodroÅ”ina tam atbalstu, un tÄpÄc, ka Å”is risinÄjums ir universÄls (modulÄrs). Ar tÄs palÄ«dzÄ«bu bÅ«s iespÄjams nodroÅ”inÄt kļūdu toleranci ne tikai PostgreSQL, bet arÄ« citiem servisiem, vai nu izmantojot standarta moduļus, vai veidojot tos konkrÄtÄm vajadzÄ«bÄm.
Å is lÄmums radÄ«ja pamatotu jautÄjumu: cik kļūmju izturÄ«gs bÅ«s kļūmjpÄrlÄces klasteris? Lai to izpÄtÄ«tu, es izstrÄdÄju testa stendu, kas simulÄ dažÄdas kļūmes klastera mezglos, gaida, lÄ«dz pakalpojums tiks atjaunots, atkopj neveiksmÄ«go mezglu un turpina testÄÅ”anu cilpÄ. Å is projekts sÄkotnÄji tika saukts par hapgsql, taÄu laika gaitÄ man kļuva garlaicÄ«gi nosaukums, kurÄ bija tikai viens patskanis. TÄpÄc es sÄku izsaukt defektu tolerantÄs datu bÄzes (un peldoÅ”Ä IP, kas norÄda uz tÄm) krogan (varonis no datorspÄles, kurÄ tiek dublÄti visi svarÄ«gie orgÄni), un mezgli, kopas un pats projekts ir tuchanka (planÄta, uz kuras dzÄ«vo krogani).
Tagad vadÄ«ba atļÄvusi atveriet projektu atvÄrtÄ koda kopienai saskaÅÄ ar MIT licenci. README drÄ«zumÄ tiks pÄrtulkots angļu valodÄ (jo paredzams, ka galvenie patÄrÄtÄji bÅ«s Pacemaker un PostgreSQL izstrÄdÄtÄji), un es nolÄmu Ŕī raksta veidÄ (daļÄji) prezentÄt README veco krievu versiju.
Klasteri tiek izvietoti virtuÄlajÄs maŔīnÄs VirtualBox. Pavisam tiks izvietotas 12 virtuÄlÄs maŔīnas (kopÄ 36GiB), kas veido 4 pret defektiem izturÄ«gas kopas (dažÄdas iespÄjas). Pirmie divi klasteri sastÄv no diviem PostgreSQL serveriem, kas atrodas dažÄdos datu centros, un kopÄja servera Liecinieks c kvoruma ierÄ«ce (mitinÄts lÄtÄ virtuÄlajÄ maŔīnÄ treÅ”ajÄ datu centrÄ), kas novÄrÅ” nenoteiktÄ«bu 50% / 50%, atdodot savu balsi kÄdai no partijÄm. TreÅ”ais klasteris trÄ«s datu centros: viens galvenais, divi vergu, Nr kvoruma ierÄ«ce. Ceturtais klasteris sastÄv no Äetriem PostgreSQL serveriem, diviem katrÄ datu centrÄ: viens galvenais, pÄrÄjÄs replikas un arÄ« izmanto Liecinieks c kvoruma ierÄ«ce. Ceturtais var izturÄt divu serveru vai viena datu centra kļūmi. Ja nepiecieÅ”ams, Å”o risinÄjumu var palielinÄt lÄ«dz lielÄkam kopiju skaitam.
PrecÄ«za laika apkalpoÅ”ana ntpd arÄ« pÄrkonfigurÄts, lai nodroÅ”inÄtu kļūdu toleranci, taÄu tajÄ tiek izmantota pati metode ntpd (bÄreÅu režīms). Koplietots serveris Liecinieks darbojas kÄ centrÄlais NTP serveris, sadalot savu laiku visiem klasteriem, tÄdÄjÄdi sinhronizÄjot visus serverus savÄ starpÄ. Ja Liecinieks neizdodas vai kļūst izolÄts, tad viens no klastera serveriem (klastera ietvaros) sÄks sadalÄ«t savu laiku. Papildu keÅ”atmiÅa HTTP proxy arÄ« paaugstinÄts lÄ«dz Liecinieks, ar tÄs palÄ«dzÄ«bu citÄm virtuÄlajÄm maŔīnÄm ir piekļuve Yum krÄtuvÄm. PatiesÄ«bÄ tÄdi pakalpojumi kÄ precÄ«zs laiks un starpniekserveri, visticamÄk, tiks mitinÄti specializÄtos serveros, bet kabÄ«nÄ tie tiek mitinÄti Liecinieks tikai, lai ietaupÄ«tu virtuÄlo maŔīnu skaitu un vietu.
Versijas
v0. Darbojas ar CentOS 7 un PostgreSQL 11 uz VirtualBox 6.1.
Klasteru struktūra
Visas kopas ir paredzÄtas izvietoÅ”anai vairÄkos datu centros, apvienotas vienÄ plakanÄ tÄ«klÄ, un tÄm ir jÄiztur viena datu centra atteice vai tÄ«kla izolÄcija. TÄpÄc nav iespÄjams izmantot aizsardzÄ«bai pret sadalÄ«tÄs smadzenes sauc par standarta elektrokardiostimulatora tehnoloÄ£iju STONITS (NoÅ”aut otru mezglu galvÄ) vai žogs. TÄs bÅ«tÄ«ba: ja klastera mezgliem rodas aizdomas, ka ar kÄdu mezglu kaut kas nav kÄrtÄ«bÄ, tas nereaÄ£Ä vai uzvedas nepareizi, tad viÅi to piespiedu kÄrtÄ izslÄdz caur āÄrÄjÄmā ierÄ«cÄm, piemÄram, IPMI vai UPS vadÄ«bas karti. . Bet tas darbosies tikai gadÄ«jumos, kad vienas kļūmes gadÄ«jumÄ IPMI vai UPS serveris turpina darboties. Å eit mÄs plÄnojam aizsargÄties pret daudz katastrofÄlÄku atteici, kad viss datu centrs sabojÄjas (piemÄram, pazÅ«d strÄva). Un ar tÄdu atteikumu viss stonis-ierÄ«ces (IPMI, UPS utt.) arÄ« nedarbosies.
TÄ vietÄ sistÄmas pamatÄ ir kvoruma ideja. Visiem mezgliem ir balss, un var darboties tikai tie, kas var redzÄt vairÄk nekÄ pusi no visiem mezgliem. Å o summu "puse + 1" sauc kvorums. Ja kvorums netiek sasniegts, tad mezgls nolemj, ka atrodas tÄ«kla izolÄcijÄ un ir jÄizslÄdz savi resursi, t.i. tas ir tas, kas tas ir Ŕķelto smadzeÅu aizsardzÄ«ba. Ja programmatÅ«ra, kas ir atbildÄ«ga par Å”o uzvedÄ«bu, nedarbojas, tad bÅ«s jÄdarbojas sargsunim, piemÄram, pamatojoties uz IPMI.
Ja mezglu skaits ir pÄra (klasteris divos datu centros), tad var rasties tÄ sauktÄ nenoteiktÄ«ba 50% / 50% (puse uz pusi), kad tÄ«kla izolÄcija sadala kopu tieÅ”i uz pusÄm. TÄpÄc pÄra skaitam mezglu mÄs pievienojam kvoruma ierÄ«ce ir mazprasÄ«gs dÄmons, ko var palaist lÄtÄkajÄ virtuÄlajÄ maŔīnÄ treÅ”ajÄ datu centrÄ. ViÅÅ” atdod savu balsi vienam no segmentiem (kuru viÅÅ” redz) un tÄdÄjÄdi atrisina 50%/50% nenoteiktÄ«bu. Es nosaucu serveri, kurÄ tiks palaista kvoruma ierÄ«ce Liecinieks (terminoloÄ£ija no repmgr, man patika).
Resursus var pÄrvietot no vienas vietas uz otru, piemÄram, no bojÄtiem serveriem uz veseliem vai pÄc sistÄmas administratoru pavÄles. Lai klienti zinÄtu, kur atrodas viÅiem nepiecieÅ”amie resursi (kur pieslÄgties?), peldoÅ”s IP (peldoÅ”s IP). Tie ir IP, kurus elektrokardiostimulators var pÄrvietot pa mezgliem (viss ir plakanÄ tÄ«klÄ). Katrs no tiem simbolizÄ kÄdu resursu (pakalpojumu) un atradÄ«sies vietÄ, kur nepiecieÅ”ams izveidot savienojumu, lai piekļūtu Å”im pakalpojumam (mÅ«su gadÄ«jumÄ datubÄzei).
Tuchanka1 (shÄma ar blÄ«vÄjumu)
Struktūra
Ideja bija tÄda, ka mums ir daudz mazu datu bÄzu ar zemu slodzi, kurÄm ir neizdevÄ«gi uzturÄt speciÄlu vergu serveri karstÄ gaidÄ«Å”anas režīmÄ tikai lasÄ«Å”anas transakcijÄm (nav vajadzÄ«ga tÄda resursu izŔķÄrdÄÅ”ana).
KatrÄ datu centrÄ ir viens serveris. Katram serverim ir divi PostgreSQL gadÄ«jumi (PostgreSQL terminoloÄ£ijÄ tos sauc par klasteriem, taÄu, lai izvairÄ«tos no neskaidrÄ«bÄm, es tos saukÅ”u par gadÄ«jumiem (pÄc analoÄ£ijas ar citÄm datu bÄzÄm), bet Pacemaker klasterus es saukÅ”u tikai par klasteriem). Viena instance darbojas galvenajÄ režīmÄ un tikai tÄ nodroÅ”ina pakalpojumus (uz to ved tikai float IP). OtrÄ instance darbojas kÄ otrÄ datu centra vergs un sniegs pakalpojumus tikai tad, ja tÄ galvenÄ ierÄ«ce neizdosies. TÄ kÄ lielÄkoties pakalpojumus (izpildÄ«s pieprasÄ«jumus) sniegs tikai viens gadÄ«jums no diviem (galvenais), visi servera resursi tiek optimizÄti galvenajam (atmiÅa tiek atvÄlÄta share_buffers keÅ”atmiÅai utt.), bet tÄ, lai otrÄ instance. ir arÄ« pietiekami daudz resursu (lai gan neoptimÄlai darbÄ«bai, izmantojot failu sistÄmas keÅ”atmiÅu), ja kÄds no datu centriem nedarbojas. Slave nesniedz pakalpojumus (neveic tikai lasÄ«Å”anas pieprasÄ«jumus) klastera normÄlas darbÄ«bas laikÄ, lai tajÄ paÅ”Ä maŔīnÄ nebÅ«tu karÅ” par resursiem ar galveno.
Divu mezglu gadÄ«jumÄ kļūdu tolerance ir iespÄjama tikai ar asinhrono replikÄciju, jo ar sinhrono replikÄciju vergu kļūme novedÄ«s pie galvenÄs ierÄ«ces apturÄÅ”anas.
NespÄja liecinÄt
NespÄja liecinÄt (kvoruma ierÄ«ce) IzskatÄ«Å”u tikai par Tuchanka1 klasteru, ar visiem pÄrÄjiem bÅ«s tas pats stÄsts. Ja liecinieks neizdosies, klastera struktÅ«rÄ nekas nemainÄ«sies, viss turpinÄs darboties tÄpat kÄ strÄdÄja. Bet kvorums kļūs par 2 no 3, un tÄpÄc jebkura turpmÄka neveiksme bÅ«s liktenÄ«ga klasterim. Tas joprojÄm bÅ«s steidzami jÄlabo.
Tuchanka1 atteikums
Viena no Tuchanka1 datu centriem atteice. Å ajÄ gadÄ«jumÄ Liecinieks nodod savu balsi otram mezglam otrÄ datu centrÄ. Tur bijuÅ”ais vergs pÄrvÄrÅ”as par saimnieku, kÄ rezultÄtÄ abi saimnieki strÄdÄ uz viena servera un abi viÅu peldoÅ”ie IP norÄda uz tiem.
Tuchanka2 (klasiskÄ)
Struktūra
KlasiskÄ divu mezglu shÄma. Saimnieks strÄdÄ pie viena, vergs pie otrÄ. Abi var izpildÄ«t pieprasÄ«jumus (pakalpojums ir tikai lasÄms), tÄpÄc uz abiem ir norÄdÄ«ts peldoÅ”ais IP: krogan2 ir galvenais, krogan2s1 ir slavens. Gan kapteinim, gan vergam bÅ«s kļūdu tolerance.
Divu mezglu gadÄ«jumÄ kļūdu tolerance ir iespÄjama tikai ar asinhrono replikÄciju, jo ar sinhrono replikÄciju vergu kļūme novedÄ«s pie galvenÄ apstÄÅ”anÄs.
Tuchanka2 atteikums
Ja kÄds no datu centriem neizdodas Liecinieks balsis par otro. VienÄ«gajÄ strÄdÄjoÅ”ajÄ datu centrÄ tiks pacelts galvenais, un uz to norÄdÄ«s abas peldoÅ”Äs IP ā galvenais un pakÄrtotais. Protams, eksemplÄrs ir jÄkonfigurÄ tÄ, lai tai bÅ«tu pietiekami daudz resursu (savienojumu ierobežojumi utt.), lai vienlaikus pieÅemtu visus savienojumus un pieprasÄ«jumus no galvenÄ un pakÄrtotÄ peldoÅ”Ä IP. Tas ir, normÄlas darbÄ«bas laikÄ tam vajadzÄtu bÅ«t pietiekamam ierobežojumu piedÄvÄjumam.
Tuchanka4 (daudzi vergi)
Struktūra
Jau cita galÄjÄ«ba. Ir datu bÄzes, kas saÅem daudz tikai lasÄmu pieprasÄ«jumu (tipisks augstas slodzes vietnes gadÄ«jums). Tuchanka4 ir situÄcija, kad Å”Ädu pieprasÄ«jumu apstrÄdei var bÅ«t trÄ«s vai vairÄk vergu, taÄu ne pÄrÄk daudz. Ar ļoti lielu vergu skaitu bÅ«s jÄizgudro hierarhiska replikÄcijas sistÄma. MinimÄlajÄ gadÄ«jumÄ (attÄlÄ) katrÄ no diviem datu centriem ir divi serveri, katrs ar PostgreSQL gadÄ«jumu.
VÄl viena Ŕīs shÄmas iezÄ«me ir tÄda, ka jau tagad ir iespÄjams organizÄt vienu sinhronu replikÄciju. Tas ir konfigurÄts, lai, ja iespÄjams, replicÄtu citÄ datu centrÄ, nevis replikÄ tajÄ paÅ”Ä datu centrÄ, kurÄ atrodas galvenais datu centrs. Uz galveno un katru vergu norÄda peldoÅ”ais IP. Par laimi, starp vergiem vajadzÄs kaut kÄ lÄ«dzsvarot pieprasÄ«jumus sql starpniekserveris, piemÄram, klienta pusÄ. DažÄdu veidu klientiem var bÅ«t nepiecieÅ”ami dažÄdi veidi sql starpniekserveris, un tikai klientu izstrÄdÄtÄji zina, kam kas ir vajadzÄ«gs. Å o funkcionalitÄti var ieviest vai nu ÄrÄjs dÄmons, vai klienta bibliotÄka (savienojumu pÅ«ls) utt. Tas viss pÄrsniedz tÄmu par kļūmjpÄrlÄces datu bÄzes klasteru (kļūmjpÄrlÄce SQL starpniekserveris var Ä«stenot neatkarÄ«gi, kopÄ ar klienta kļūdu toleranci).
Tuchanka4 atteikums
Ja viens datu centrs (t.i., divi serveri) neizdodas, liecinieks balso par otro. RezultÄtÄ otrajÄ datu centrÄ darbojas divi serveri: vienÄ darbojas galvenais, un galvenais peldoÅ”ais IP norÄda uz to (lasÄ«Å”anas-rakstÄ«Å”anas pieprasÄ«jumu saÅemÅ”anai); un otrajÄ serverÄ« ir slavens, kas darbojas ar sinhrono replikÄciju, un viens no slavenajiem peldoÅ”ajiem IP norÄda uz to (tikai lasÄmiem pieprasÄ«jumiem).
Vispirms jÄatzÄ«mÄ, ka ne visi vergu peldoÅ”ie IP bÅ«s darbinieki, bet tikai viens. Un, lai pareizi strÄdÄtu ar to, tas bÅ«s nepiecieÅ”ams sql starpniekserveris novirzÄ«ja visus pieprasÄ«jumus uz vienÄ«go atlikuÅ”o peldoÅ”o IP; un ja sql starpniekserveris nÄ, tad savienojuma vietrÄdÄ« URL varat uzskaitÄ«t visus peldoÅ”os IP vergus, atdalot tos ar komatiem. Å ajÄ gadÄ«jumÄ ar libpq savienojums bÅ«s ar pirmo darba IP, tas tiek darÄ«ts automÄtiskÄs testÄÅ”anas sistÄmÄ. VarbÅ«t citÄs bibliotÄkÄs, piemÄram, JDBC, tas nedarbosies un ir nepiecieÅ”ams sql starpniekserveris. Tas tiek darÄ«ts, jo vergu IP ir aizliegts vienlaikus palielinÄt vienÄ serverÄ«, lai tie bÅ«tu vienmÄrÄ«gi sadalÄ«ti starp vergu serveriem, ja darbojas vairÄki no tiem.
OtrkÄrt: pat datu centra kļūmes gadÄ«jumÄ tiks saglabÄta sinhronÄ replikÄcija. Un pat tad, ja rodas sekundÄra kļūme, tas ir, viens no diviem serveriem atlikuÅ”ajÄ datu centrÄ neizdodas, klasteris, lai gan pÄrtrauks pakalpojumu sniegÅ”anu, joprojÄm saglabÄ informÄciju par visiem veiktajiem darÄ«jumiem, par kuriem tas ir apstiprinÄjis saistÄ«bu izpildi. (sekundÄras atteices gadÄ«jumÄ informÄcija par zaudÄjumiem nebÅ«s).
Tuchanka3 (3 datu centri)
Struktūra
Å is ir klasteris situÄcijai, kad ir trÄ«s pilnÄ«bÄ funkcionÄjoÅ”i datu centri, no kuriem katram ir pilnÄ«bÄ funkcionÄjoÅ”s datu bÄzes serveris. Å ajÄ gadÄ«jumÄ kvoruma ierÄ«ce nav vajadzÄ«gs. VienÄ datu centrÄ strÄdÄ saimnieks, pÄrÄjos divos ā vergi. ReplikÄcija ir sinhrona, ierakstiet ANY (slave1, slave2), tas ir, klients saÅems apstiprinÄÅ”anas apstiprinÄjumu, kad kÄds no vergiem pirmais atbildÄs, ka viÅÅ” ir pieÅÄmis saistÄ«bu. Resursi ir norÄdÄ«ti ar vienu peldoÅ”o IP galvenajam un diviem pakÄrtotajiem. AtŔķirÄ«bÄ no Tuchanka4, visi trÄ«s peldoÅ”ie IP ir izturÄ«gi pret kļūmÄm. Lai lÄ«dzsvarotu tikai lasÄmus SQL vaicÄjumus, varat izmantot sql starpniekserveris (ar atseviŔķu kļūdu toleranci), vai pieŔķirt vienu slavenu peldoÅ”o IP pusei klientu, bet otru pusi - otrajam.
Tuchanka3 atteikums
Ja viens no datu centriem neizdodas, paliek divi. VienÄ tiek paaugstinÄts galvenais un peldoÅ”ais IP no galvenÄ, otrajÄ - vergu un abiem slavenajiem peldoÅ”ajiem IP (instancÄ ir jÄbÅ«t dubultai resursu rezervei, lai pieÅemtu visus savienojumus no abiem slavenajiem peldoÅ”ajiem IP). SinhronÄ replikÄcija starp saimniekiem un vergu. TÄpat klasteris saglabÄs informÄciju par veiktajiem un apstiprinÄtajiem darÄ«jumiem (informÄcija nezaudÄs) divu datu centru iznÄ«cinÄÅ”anas gadÄ«jumÄ (ja tie netiek iznÄ«cinÄti vienlaikus).
Es nolÄmu neiekļaut detalizÄtu faila struktÅ«ras un izvietoÅ”anas aprakstu. Ikviens, kurÅ” vÄlas spÄlÄties, to visu var izlasÄ«t README. Es sniedzu tikai automatizÄtÄs testÄÅ”anas aprakstu.
AutomÄtiskÄ testÄÅ”anas sistÄma
Lai pÄrbaudÄ«tu klasteru kļūdu toleranci, simulÄjot dažÄdus defektus, ir izveidota automÄtiskÄs testÄÅ”anas sistÄma. Palaists pÄc skripta test/failure. Skripts var izmantot kÄ parametrus to klasteru skaitu, kuras vÄlaties pÄrbaudÄ«t. PiemÄram, Ŕī komanda:
test/failure 2 3
pÄrbaudÄ«s tikai otro un treÅ”o kopu. Ja parametri nav norÄdÄ«ti, tiks pÄrbaudÄ«ti visi klasteri. Visas kopas tiek pÄrbaudÄ«tas paralÄli, un rezultÄts tiek parÄdÄ«ts tmux panelÄ«. Tmux izmanto Ä«paÅ”u tmux serveri, tÄpÄc skriptu var palaist no noklusÄjuma tmux, kÄ rezultÄtÄ tiek izveidots ligzdots tmux. Es ieteiktu terminÄli izmantot lielÄ logÄ un ar mazu fontu. Pirms testÄÅ”anas sÄkÅ”anas visas virtuÄlÄs maŔīnas tiek atgrieztas momentuzÅÄmumÄ brÄ«dÄ«, kad skripts tiek pabeigts. setup.
TerminÄlis ir sadalÄ«ts kolonnÄs atbilstoÅ”i pÄrbaudÄmo klasteru skaitam; pÄc noklusÄjuma (ekrÄnuzÅÄmumÄ) ir Äetras. Es aprakstÄ«Å”u kolonnu saturu, izmantojot Tuchanka2 piemÄru. EkrÄnuzÅÄmumÄ esoÅ”ie paneļi ir numurÄti:
Å eit tiek parÄdÄ«ta testa statistika. Kolonnas:
neveiksme ā testa nosaukums (funkcija skriptÄ), kas atdarina kļūdu.
reakcija ā vidÄjais aritmÄtiskais laiks sekundÄs, kurÄ klasteris atguva savu funkcionalitÄti. Tas tiek mÄrÄ«ts no kļūdu emulÄjoÅ”Ä skripta sÄkuma lÄ«dz brÄ«dim, kad klasteris atjauno savu funkcionalitÄti un var turpinÄt sniegt pakalpojumus. Ja laiks ir ļoti Ä«ss, piemÄram, seÅ”as sekundes (tas notiek klasteros ar vairÄkiem vergiem (Tuchanka3 un Tuchanka4)), tas nozÄ«mÄ, ka vaina bija asinhronajÄ vergÄ un nekÄdÄ veidÄ neietekmÄja veiktspÄju; nebija klasteru stÄvokļa slÄdži.
novirze ā parÄda vÄrtÄ«bas izplatÄ«bu (precizitÄti). reakcija izmantojot standarta novirzes metodi.
skaitÄ«t ā cik reizes Ŕī pÄrbaude tika veikta.
ÄŖss žurnÄls ļauj novÄrtÄt, ko klasteris paÅ”laik dara. Tiek parÄdÄ«ts iterÄcijas (testa) numurs, laika zÄ«mogs un darbÄ«bas nosaukums. PÄrÄk ilga skrieÅ”ana (> 5 minÅ«tes) norÄda uz problÄmu.
sirds (sirds) - paÅ”reizÄjais laiks. VeiktspÄjas vizuÄlai novÄrtÄÅ”anai meistari PaÅ”reizÄjais laiks tiek pastÄvÄ«gi ierakstÄ«ts tÄs tabulÄ, izmantojot peldoÅ”o IP galveno. Ja tas izdodas, rezultÄts tiek parÄdÄ«ts Å”ajÄ panelÄ«.
pÄrspÄt (pulss) - āpaÅ”reizÄjais laiksā, ko iepriekÅ” ierakstÄ«ja skripts sirds apgÅ«t, tagad lasÄ«t no vergs izmantojot savu peldoÅ”o IP. Ä»auj vizuÄli novÄrtÄt vergu un replikÄcijas veiktspÄju. VietnÄ Tuchanka1 nav vergu ar peldoÅ”o IP (nav vergu, kas sniedz pakalpojumus), bet ir divi gadÄ«jumi (DB), tÄpÄc tas Å”eit netiks parÄdÄ«ts pÄrspÄtUn sirds otrÄ instance.
Klasteru veselÄ«bas uzraudzÄ«ba, izmantojot utilÄ«tu pcs mon. ParÄda struktÅ«ru, resursu sadalÄ«jumu pa mezgliem un citu noderÄ«gu informÄciju.
Å eit tiek parÄdÄ«ta sistÄmas uzraudzÄ«ba no katras klastera virtuÄlÄs maŔīnas. Var bÅ«t vairÄk Å”Ädu paneļu atkarÄ«bÄ no tÄ, cik virtuÄlo maŔīnu ir klasterÄ«. Divi grafiki CPU slodze (virtuÄlajÄm maŔīnÄm ir divi procesori), virtuÄlÄs maŔīnas nosaukums, SistÄmas slodze (nosaukts par slodzes vidÄjo, jo tas ir vidÄji 5, 10 un 15 minÅ«tes), apstrÄdÄ datus un atmiÅas pieŔķirÅ”anu.
Skripta pÄdas, kas veic testÄÅ”anu. Nepareizas darbÄ«bas gadÄ«jumÄ - pÄkÅ”Ås darbÄ«bas pÄrtraukums vai nebeidzams gaidÄ«Å”anas cikls - Å”eit varat redzÄt Å”Ädas rÄ«cÄ«bas iemeslu.
PÄrbaude tiek veikta divos posmos. PirmkÄrt, skripts iziet visu veidu testus, nejauÅ”i atlasot virtuÄlo maŔīnu, kurai piemÄrot Å”o testu. PÄc tam tiek veikts nebeidzams testÄÅ”anas cikls, katru reizi nejauÅ”i tiek atlasÄ«tas virtuÄlÄs maŔīnas un kļūda. PÄkÅ”Åa testÄÅ”anas skripta pÄrtraukÅ”ana (apakÅ”Äjais panelis) vai nebeidzama cilpa, kas gaida kaut ko (> 5 minÅ«Å”u izpildes laiks vienai darbÄ«bai, to var redzÄt trasÄ) norÄda, ka daži Ŕī klastera testi ir bijuÅ”i neveiksmÄ«gi.
Katrs tests sastÄv no Å”ÄdÄm darbÄ«bÄm:
Palaidiet funkciju, kas atdarina kļūdu.
Gatavs? ā gaida klastera atjaunoÅ”anu (kad ir nodroÅ”inÄti visi pakalpojumi).
ParÄda klastera atkopÅ”anas taimautu (reakcija).
Noteikt ā klasteris tiek ālabotsā. PÄc tam tam jÄatgriežas pilnÄ«bÄ darba stÄvoklÄ« un jÄbÅ«t gatavam nÄkamajam darbÄ«bas traucÄjumam.
Å eit ir testu saraksts ar aprakstu par to, ko tie veic:
ForkBomb: izveido "Out of memory", izmantojot dakŔu bumbu.
Ärpus Kosmosa: Cietais disks ir pilns. TaÄu tests ir diezgan simbolisks; ar nenozÄ«mÄ«go slodzi, kas tiek radÄ«ta testÄÅ”anas laikÄ, PostgreSQL parasti neizdodas, kad cietais disks ir pilns.
Postgres-KILL: nogalina PostgreSQL ar komandu killall -KILL postgres.
Postgres-STOP: uzkaras PostgreSQL komanda killall -STOP postgres.
IzslÄgt: āatslÄdzā virtuÄlo maŔīnu ar komandu VBoxManage controlvm "Š²ŠøŃŃŃŠ°Š»ŠŗŠ°" poweroff.
Atjaunot: pÄrslogo virtuÄlo maŔīnu ar komandu VBoxManage controlvm "Š²ŠøŃŃŃŠ°Š»ŠŗŠ°" reset.
SBD-STOP: aptur SBD dÄmonu ar komandu killall -STOP sbd.
IzslÄgt: nosÅ«ta komandu uz virtuÄlo maŔīnu, izmantojot SSH systemctl poweroff, sistÄma graciozi izslÄdzas.
AtsaistÄ«t: tÄ«kla izolÄcija, komanda VBoxManage controlvm "Š²ŠøŃŃŃŠ°Š»ŠŗŠ°" setlinkstate1 off.
TestÄÅ”anas pabeigÅ”ana, izmantojot standarta tmux komandu "kill-window" Ctrl-b &, vai komandu "detach-client". Ctrl-b d: Å”ajÄ brÄ«dÄ« testÄÅ”ana beidzas, tmux tiek aizvÄrts, virtuÄlÄs maŔīnas tiek izslÄgtas.
PÄrbaudes laikÄ konstatÄtas problÄmas
Å obrÄ«d sargsuns dÄmons sbd darbojas, lai apturÄtu novÄrotos dÄmonus, bet ne iesaldÄtu tos. Un, kÄ rezultÄtÄ, defekti, kas noved tikai pie sasalÅ”anas Corosync Šø Elektrokardiostimulators, bet ne karÄjas sbd... Par pÄrbaudi Corosync jau ir PR#83 (GitHub vietnÄ plkst sbd), pieÅemts pavedienam meistars. ViÅi solÄ«ja (PR#83), ka bÅ«s kaut kas lÄ«dzÄ«gs elektrokardiostimulatoram, ceru, ka lÄ«dz RedHat 8 darÄ«Å”u. TaÄu Å”Ädi ādarbÄ«bas traucÄjumiā ir spekulatÄ«vi, un tos var viegli mÄkslÄ«gi simulÄt, izmantojot, piemÄram, killall -STOP corosync, bet nekad nesatiekas dzÄ«vÄ.
Š£ Elektrokardiostimulators versijÄ priekÅ” 7 CentOS nepareizi iestatÄ«ts sync_timeout Ń kvoruma ierÄ«cekÄ rezultÄtÄ ja viens mezgls neizdevÄs, ar zinÄmu varbÅ«tÄ«bu pÄrstartÄjÄs arÄ« otrais mezgls, uz kuru meistaram vajadzÄja pÄrcelties. IzÄrstÄts ar paplaÅ”inÄÅ”anos sync_timeout Ń kvoruma ierÄ«ce izvietoÅ”anas laikÄ (skriptÄ setup/setup1). Å o grozÄ«jumu izstrÄdÄtÄji nepieÅÄma Elektrokardiostimulators, tÄ vietÄ viÅi solÄ«ja pÄrprojektÄt infrastruktÅ«ru tÄdÄ veidÄ (kÄdÄ nenoteiktÄ nÄkotnÄ), lai Å”is taimauts tiktu aprÄÄ·inÄts automÄtiski.
Ja datu bÄzes konfigurÄcija to norÄda LC_MESSAGES (Ä«sziÅas) Var izmantot Unicode, piem. ru_RU.UTF-8, pÄc tam startÄÅ”anas laikÄ postgres vidÄ, kurÄ lokalizÄcija nav UTF-8, piemÄram, tukÅ”Ä vidÄ (Å”eit elektrokardiostimulators+pgsqlms(paf) skrien postgres), tad žurnÄlÄ bÅ«s jautÄjuma zÄ«mes, nevis UTF-8 burti. PostgreSQL izstrÄdÄtÄji nav vienojuÅ”ies, kÄ rÄ«koties Å”ajÄ gadÄ«jumÄ. Tas maksÄ, jums ir jÄinstalÄ LC_MESSAGES=en_US.UTF-8 konfigurÄjot (veidojot) datu bÄzes gadÄ«jumu.
Ja ir iestatÄ«ts wal_receiver_timeout (pÄc noklusÄjuma tas ir 60 s), tad PostgreSQL-STOP testa laikÄ galvenajÄ ierÄ«cÄ klasteros tuchanka3 un tuchanka4 replikÄcija neizveido savienojumu ar jauno galveno. ReplikÄcija tur ir sinhrona, tÄpÄc apstÄjas ne tikai slavenais, bet arÄ« jaunais galvenais. Darbojas, iestatot wal_receiver_timeout=0, konfigurÄjot PostgreSQL.
ReizÄm es novÄroju replikÄcijas sasalÅ”anu PostgreSQL ForkBomb testÄ (atmiÅas pÄrpilde). PÄc ForkBomb reizÄm vergi var nesavienoties ar jauno galveno. Ar to esmu saskÄries tikai klasteros tuchanka3 un tuchanka4, kur sinhronÄs replikÄcijas dÄļ kapteinis iesaldÄja. ProblÄma pazuda pati pÄc ilgÄka laika (apmÄram divas stundas). Lai to labotu, ir nepiecieÅ”ams vairÄk pÄtÄ«jumu. Simptomi ir lÄ«dzÄ«gi iepriekÅ”Äjai kļūdai, ko izraisa cits iemesls, bet ar tÄdÄm paÅ”Äm sekÄm.
Krogan attÄls uzÅemts no deviant Art ar autora atļauju: