{"id":92570,"date":"2020-08-28T19:42:21","date_gmt":"2020-08-28T17:42:21","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker"},"modified":"2020-08-28T19:42:21","modified_gmt":"2020-08-28T17:42:21","slug":"modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","status":"publish","type":"post","link":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","title":{"rendered":"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1 id=\"vvedenie\">Ievads<\/h1>\n<p><\/p>\n<p>Pirms k\u0101da laika man tika uzdots uzdevums izstr\u0101d\u0101t notur\u012bgu klasteri <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\">PostgreSQL<\/a><\/noindex>, kas darbojas vair\u0101kos datu centros, savienotiem ar \u0161\u0137iedru optiku vien\u0101 pils\u0113t\u0101, un sp\u0113j iztur\u0113t vienas datu centra atteici (piem\u0113ram, jauda tiek atsl\u0113gta). K\u0101 programmat\u016bru, kas atbild par notur\u012bbu, es izv\u0113l\u0113jos <noindex><a rel=\"nofollow\" href=\"https:\/\/clusterlabs.org\">Pacemaker<\/a><\/noindex>, jo tas ir ofici\u0101lais risin\u0101jums no RedHat, lai izveidotu notur\u012bgus klasterus. Tas ir labs ar to, ka RedHat nodro\u0161ina t\u0101 atbalstu un ka \u0161is risin\u0101jums ir univers\u0101ls (modul\u0101rs). Ar t\u0101 pal\u012bdz\u012bbu var\u0113s nodro\u0161in\u0101t notur\u012bbu ne tikai PostgreSQL, bet ar\u012b citiem pakalpojumiem, vai nu izmantojot standarta modu\u013cus, vai izstr\u0101d\u0101jot tos konkr\u0113t\u0101m vajadz\u012bb\u0101m.<\/p>\n<p><\/p>\n<p>Uz \u0161o risin\u0101jumu rad\u0101s sapr\u0101t\u012bgs jaut\u0101jums: cik notur\u012bgs b\u016bs notur\u012bgais klasteris? Lai to izp\u0113t\u012btu, es izstr\u0101d\u0101ju testa vidi, kas imit\u0113 da\u017e\u0101das atteices klastera mezglos, gaida atjauno\u0161anos, atjauno atteiku\u0161o mezglu un turpina testus cikl\u0101. S\u0101kotn\u0113ji \u0161is projekts tika saukts par hapgsql, bet laika gait\u0101 man apnika nosaukums, kur\u0101 ir tikai viena patska\u0146a. T\u0101p\u0113c notur\u012bg\u0101s datub\u0101zes (un float IP, kas uz t\u0101m nor\u0101da) es s\u0101ku d\u0113v\u0113t par <strong>krogan<\/strong> (varonis no datorsp\u0113les, kuram visiem svar\u012bgajiem org\u0101niem ir rezerves), bet mezglus, klasterus un pa\u0161u projektu - <strong>tuchanka<\/strong> (plan\u0113ta, kur dz\u012bvo kroga\u0146i).<\/p>\n<p><\/p>\n<p>Tagad vad\u012bba ir at\u013c\u0101vusi <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/domclick\/tuchanka\">atv\u0113rt projektu open source kopienai ar MIT licenci<\/a><\/noindex>. README dr\u012bz tiks iztulkots ang\u013cu valod\u0101 (jo tiek gaid\u012bts, ka galvenie pat\u0113r\u0113t\u0101ji b\u016bs Pacemaker un PostgreSQL izstr\u0101d\u0101t\u0101ji), bet veco krievu versiju README es nol\u0113mu noform\u0113t (da\u013c\u0113ji) \u0161\u012b raksta veid\u0101.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/7ebb04b3e56337060e981da319192a28.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Klasteri tiek izvietoti virtu\u0101laj\u0101s ma\u0161\u012bn\u0101s <noindex><a rel=\"nofollow\" href=\"https:\/\/www.virtualbox.org\">VirtualBox<\/a><\/noindex>. Kopum\u0101 tiks izvietotas 12 virtu\u0101l\u0101s ma\u0161\u012bnas (kop\u0101 36GiB), kas veidos 4 notur\u012bgus klasterus (da\u017e\u0101di varianti). Pirmie divi klasteri sast\u0101v no diviem PostgreSQL serveriem, kas izvietoti da\u017e\u0101dos datu centros, un kop\u0113j\u0101 servera <em>witness<\/em> c <strong>quorum device<\/strong> (kas izvietots l\u0113t\u0101 virtu\u0101laj\u0101 ma\u0161\u012bn\u0101 tre\u0161aj\u0101 datu centr\u0101), kas atrisina neskaidr\u012bbu <strong>50%\/50%<\/strong>, pie\u0161\u0137irot savu balsi vienai no pus\u0113m. Tre\u0161ais klasteris ir tr\u012bs datu centros: viens galvenais, divi vergi, bez <strong>quorum device<\/strong>. Ceturtais kl\u0101sters sast\u0101v no \u010detriem PostgreSQL serveriem, pa diviem datu centr\u0101: viens meistars, p\u0101r\u0113jie replikas, un ar\u012b izmanto <em>witness<\/em> c <strong>quorum device<\/strong>. Ceturtais sp\u0113j iztur\u0113t divu serveru vai viena datu centra av\u0101riju. \u0160o risin\u0101jumu, ja nepiecie\u0161ams, var papla\u0161in\u0101t uz vair\u0101kiem replik\u0101m.<\/p>\n<p><\/p>\n<p>Prec\u012bza laik\u0101 pakalpojums <noindex><a rel=\"nofollow\" href=\"https:\/\/www.ntp.org\">ntpd<\/a><\/noindex> ir ar\u012b p\u0101rkonfigur\u0113ts augst\u0101 pieejam\u012bb\u0101, bet tur tiek izmantota pa\u0161a <code>ntpd<\/code> (<em>orphan mode<\/em>). Kop\u0113jais serveris <em>witness<\/em> pilda centr\u0101l\u0101 NTP servera lomu, izdalot savu laiku visiem klasteriem, t\u0101d\u0113j\u0101di sinhroniz\u0113jot visus serverus sav\u0101 starp\u0101. Ja <em>witness<\/em> izn\u0101k no k\u0101rt\u012bbas vai non\u0101k izol\u0101cij\u0101, tad savu laiku s\u0101ks izdal\u012bt viens no klastera serveriem (iek\u0161\u0113j\u0101 klaster\u012b). Pal\u012bg\u0161\u0137ietamais ke\u0161atmi\u0146as <strong>HTTP proxy<\/strong> ir ar\u012b uzst\u0101d\u012bts <em>witness<\/em>, ar t\u0101 pal\u012bdz\u012bbu p\u0101r\u0113j\u0101m virtu\u0101laj\u0101m ma\u0161\u012bn\u0101m ir piek\u013cuve Yum repozitorijiem. Realit\u0101t\u0113 t\u0101di pakalpojumi k\u0101 prec\u012bzs laiks un proxy noteikti tiks izvietoti uz atsevi\u0161\u0137iem serveriem, bet \u0161aj\u0101 stand\u0101 tie ir izvietoti uz <em>witness<\/em> tikai, lai ietaup\u012btu virtu\u0101lo ma\u0161\u012bnu skaitu un vietu.<\/p>\n<p><\/p>\n<h1 id=\"versii\">Versijas<\/h1>\n<p><\/p>\n<p>v0. Str\u0101d\u0101 ar CentOS 7 un PostgreSQL 11 VirtualBox 6.1 vid\u0113.<\/p>\n<p><\/p>\n<h1 id=\"struktura-klasterov\">Kl\u0101steru strukt\u016bra<\/h1>\n<p><\/p>\n<p>Visi klasteri ir paredz\u0113ti izvieto\u0161anai vair\u0101kos datu centros, apvienoti vien\u0101 plakn\u0113 un j\u0101sp\u0113j iztur\u0113t viena datu centra av\u0101riju vai t\u012bkla izol\u0101ciju. T\u0101d\u0113\u013c <strong>nav iesp\u0113jama<\/strong> izmanto, lai aizsarg\u0101tu pret <strong>split-brain<\/strong> standarta tehnolo\u0123iju Pacemaker, kas saucas <em>STONITH<\/em> (Shoot The Other Node In The Head) vai <em>fencing<\/em>. T\u0101s b\u016bt\u012bba: ja mezglu klaster\u012b s\u0101k \u0161aub\u012bties, ka ar k\u0101du mezglu notiek kas nepareizs, vi\u0146\u0161 neatbild vai uzvedas nepareizi, tad tie piespiedu k\u0101rt\u0101 to izsl\u0113dz caur \u201e\u012bpa\u0161iem\u201d ier\u012bc\u0113m, piem\u0113ram, IPMI vai UPS vad\u012bbas karti. Bet tas darbosies tikai gad\u012bjumos, kad pie viena servera av\u0101rijas IPMI vai UPS turpina darboties. \u0160eit pl\u0101nota aizsardz\u012bba pret daudz katastrof\u0101l\u0101k\u0101m av\u0101rij\u0101m, kad avar\u0113 (piem\u0113ram, k\u013c\u016bst bez elektr\u012bbas) viss datu centrs. Un \u0161\u0101d\u0101 av\u0101rij\u0101 visi <em>stonith<\/em>-ier\u012bces (IPMI, UPS utt.) ar\u012b nedarbosies.<\/p>\n<p><\/p>\n<p>T\u0101 viet\u0101 sist\u0113mas pamat\u0101 ir kvoruma ideja. Visi mezgliem ir balss, un str\u0101d\u0101t var tikai tie, kuri redz vair\u0101k nek\u0101 pusi no visiem mezgliem. \u0160is skaits \u201epuse+1\u201d saucas <strong>kvorums<\/strong>. Ja kvorums netiek sasniegts, tad mezgls izlemj, ka tas atrodas t\u012bkla izol\u0101cij\u0101 un j\u0101atvieno savus resursus, t.i., tas ir t\u0101ds <strong>aizsardz\u012bba pret split-brain<\/strong>. Ja r\u012bkojumam, kas atbild par \u0161\u0101du uzved\u012bbu, programm\u0113\u0161ana nedarbojas, tad j\u0101aktiviz\u0113 uzraugs, piem\u0113ram, IPMI b\u0101z\u0113.<\/p>\n<p><\/p>\n<p>Ja mezglu skaits ir p\u0101ra skaitlis (klasteris divos datu centros), var rasties t\u0101 saucam\u0101 nenoteikt\u012bba. <strong>50%\/50%<\/strong> (<em>puse uz pusi<\/em>), kad t\u012bkla izol\u0101cija sadala klasteri tie\u0161i div\u0101s da\u013c\u0101s. T\u0101d\u0113\u013c p\u0101ra mezglu skaitam tiek pievienots <strong>quorum device<\/strong> \u2014 pras\u012bbu neizvirzo\u0161s demons, kuru var palaist uz visl\u0113t\u0101k\u0101s virtu\u0101l\u0101s ma\u0161\u012bnas tre\u0161aj\u0101 datu centr\u0101. Vi\u0146\u0161 dod savu balsi vienam no segmentiem (ko redz) un t\u0101d\u0113j\u0101di atrisina 50% \/ 50% nenoteikt\u012bbu. Serveris, uz kura tiks palaists quorum ier\u012bce, es nosaucu par <em>witness<\/em> (terminolo\u0123ija no repmgr, man pat\u012bk).<\/p>\n<p><\/p>\n<p>Resursi var p\u0101rvietoties no viena uz citu, piem\u0113ram, no boj\u0101tiem serveriem uz labiem, vai p\u0113c sist\u0113mas administratoru komandas. Lai klienti zin\u0101tu, kur atrodas nepiecie\u0161amie resursi (kur piesl\u0113gties?), tiek izmantoti <em>peld\u012bgi IP<\/em> (<strong>float IP<\/strong>). Tie ir IP, kurus Pacemaker var p\u0101rvietot pa mezgliem (viss atrodas plakn\u0113 t\u012bkl\u0101). Katrs no tiem simboliz\u0113 resursu (pakalpojumu) un atrad\u012bsies tur, kur vajag piesl\u0113gties, lai piek\u013c\u016btu \u0161im pakalpojumam (m\u016bsu gad\u012bjum\u0101 datu b\u0101zei).<\/p>\n<p><\/p>\n<h2 id=\"tuchanka1-shema-s-uplotneniem\">Tuchanka1 (bl\u012bv\u0113jumu sh\u0113ma)<\/h2>\n<p><\/p>\n<h3 id=\"struktura\">Strukt\u016bra<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/5651238e36f4af1c32f117191cf30261.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ideja bija t\u0101da, ka mums ir daudz mazu datu b\u0101zu ar zemu slodzi, kuru d\u0113\u013c nav izdev\u012bgi uztur\u0113t atsevi\u0161\u0137u slave-serveri karst\u0101 rezerves re\u017e\u012bm\u0101 read only transakcij\u0101m (nav nepiecie\u0161am\u012bbas p\u0113c t\u0101das resursu izs\u012bkuma).<\/p>\n<p><\/p>\n<p>Katram datu centr\u0101 ir viens servers. Katram serverim ir divi PostgreSQL instanci (PostgreSQL terminolo\u0123ij\u0101 tos sauc par klasteriem, ta\u010du lai nerad\u012btu confusion, es nosauk\u0161u tos par instanc\u0113m (analog\u0101 ar cit\u0101m DB), bet klasterus sauk\u0161u tikai par Pacemaker klasteriem). Viens instances darbojas k\u0101 meistars, un tikai vi\u0146\u0161 sniedz pakalpojumus (tikai uz vi\u0146u ved float IP). Otra instances darbojas k\u0101 vergs otraj\u0101 datu centr\u0101 un sniegs pakalpojumus tikai tad, ja vi\u0146a meistars izg\u0101z\u012bsies. T\u0101 k\u0101 liel\u0101ko da\u013cu laika pakalpojumus (veicot piepras\u012bjumus) sniegs tikai viens no diviem instanc\u0113m (meistars), visi servera resursi tiks optimiz\u0113ti uz meistaru (tiks atv\u0113l\u0113ta atmi\u0146a shared_buffers ke\u0161am u.tml.), bet t\u0101, lai ar\u012b otrai instancei pietiktu resursu (lai gan neoptim\u0101l\u0101 darb\u012bb\u0101 caur failu sist\u0113mas ke\u0161u) gad\u012bjum\u0101, ja viens no datu centriem atteiksies. Vergs nesniedz pakalpojumus (neveic read only piepras\u012bjumus) norm\u0101l\u0101 klastera darb\u012bbas laik\u0101, lai neb\u016btu resursu c\u012b\u0146as ar meistaru taj\u0101 pa\u0161\u0101 ma\u0161\u012bn\u0101.<\/p>\n<p><\/p>\n<p>Divu mezglu gad\u012bjum\u0101 k\u013c\u016bdas tolerance ir iesp\u0113jama tikai pie asinhronas replik\u0101cijas, jo pie sinhronas verga atteikums noved pie meista apst\u0101\u0161an\u0101s.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-witness\">Witness atteikums<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/3c046d13c0c6839de297827ca3a8928b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Witness atteikums (<em>quorum device<\/em>) es apskat\u012b\u0161u tikai Tuchanka1 klastera gad\u012bjum\u0101, p\u0101r\u0113jiem b\u016bs t\u0101da pati situ\u0101cija. Pie witness atteikuma klastera strukt\u016br\u0101 nekas nemain\u012bsies, viss turpin\u0101s darboties t\u0101pat k\u0101 iepriek\u0161. Ta\u010du kvorums k\u013c\u016bs vien\u0101ds 2 no 3, t\u0101p\u0113c jebkur\u0161 n\u0101kamais atteikums b\u016bs fat\u0101ls klasterim. Jebkur\u0101 gad\u012bjum\u0101 to b\u016bs j\u0101labo steidzami.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka1\">Tuchanka1 atteikums<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/112957293bd682428115e4e93c9f1a96.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Viens no datu centriem atteikums Tuchanka1 gad\u012bjum\u0101. \u0160aj\u0101 gad\u012bjum\u0101 <em>witness<\/em> vi\u0146\u0161 nodod savu balsi otrajam mezglam otraj\u0101 datu centr\u0101. Tur biju\u0161ais vergs p\u0101rv\u0113r\u0161as par meistaru, k\u0101 rezult\u0101t\u0101 uz viena servera darbojas abi meistari un uz tiem nor\u0101da abi to float IP.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka2-klassicheskaya\">Tuchanka2 (klasisk\u0101)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-1\">Strukt\u016bra<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/c3af368f823fbd580b4ebb14cc87c750.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Klasiska sh\u0113ma ar diviem mezgliem. Uz viena darbojas meistars, uz otra vergs. Abi var veikt piepras\u012bjumus (vergs tikai read only), t\u0101p\u0113c uz abiem nor\u0101da float IP: krogan2 \u2014 uz meistaru, krogan2s1 \u2014 uz vergu. K\u013c\u016bdas tolerance b\u016bs gan meistaram, gan vergam.<\/p>\n<p><\/p>\n<p>Divu mezglu gad\u012bjum\u0101 k\u013c\u016bdas tolerance ir iesp\u0113jama tikai pie asinhronas replik\u0101cijas, jo pie sinhronas verga atteikums noved pie meista apst\u0101\u0161an\u0101s.<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka2\">Tuchanka2 atteikums<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/79bfcaf88c96d8ee16767dcef53741c1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Viens no datu centriem atteikums <em>witness<\/em> balso par otro. Uz vien\u012bg\u0101 darbojo\u0161\u0101 datu centra tiks uzst\u0101d\u012bts meistars, un uz to nor\u0101d\u012bs abi float IP: meistara un darba. Protams, instancim j\u0101b\u016bt konfigur\u0113tam t\u0101, lai tam pietiktu resursu (limitus zem savienojuma utt.) vienlaikus pie\u0146emt visas savienojumus un piepras\u012bjumus no meistara un darba float IP. T\u0101tad norm\u0101las darb\u012bbas laik\u0101 tam j\u0101b\u016bt pietiekamai rezerv\u0113 limitos.<\/p>\n<p><\/p>\n<h2 id=\"tuchanka4-mnogo-rabov\">Tuchanka4 (daudz darba)<\/h2>\n<p><\/p>\n<h3 id=\"struktura-2\">Strukt\u016bra<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/17819fd97847f0573d429e422d799bc1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jau cita ekstr\u0113ma situ\u0101cija. Ir datu b\u0101zes, uz kur\u0101m n\u0101k \u013coti daudz read-only piepras\u012bjumu (tipiska augstas slodzes vietne). Tuchanka4 ir situ\u0101cija, kad darba var b\u016bt tr\u012bs vai vair\u0101k, lai apstr\u0101d\u0101tu \u0161\u0101dus piepras\u012bjumus, bet tom\u0113r ne p\u0101r\u0101k daudz. Pie \u013coti liela darbinieku skaita b\u016bs j\u0101izdom\u0101 hierarhiska replik\u0101cijas sist\u0113ma. Minim\u0101laj\u0101 gad\u012bjum\u0101 (att\u0113l\u0101) katr\u0101 no diviem datu centriem atrodas divi serveri, uz katra kuriem ir pa instancam PostgreSQL.<\/p>\n<p><\/p>\n<p>V\u0113l viena \u0161\u012bs sh\u0113mas iez\u012bme ir t\u0101, ka \u0161eit jau var organiz\u0113t vienu sinhrono replik\u0101ciju. T\u0101 ir konfigur\u0113ta, lai replik\u0113tu, ja iesp\u0113jams, cit\u0101 datu centr\u0101, nevis uz replikas taj\u0101 pa\u0161\u0101 datu centr\u0101, kur ir meistars. Uz meistaru un katru darba nor\u0101da float IP. Vair\u0101k vai maz\u0101k, starp darbiniekiem b\u016bs j\u0101veic piepras\u012bjumu balans\u0113\u0161ana ar k\u0101du <em>sql proxy<\/em>, piem\u0113ram, klienta pus\u0113. Da\u017e\u0101diem klientu tipiem var pras\u012bt at\u0161\u0137ir\u012bgu tipu <em>sql proxy<\/em>, un tikai klientu izstr\u0101d\u0101t\u0101ji zina, kuram kur\u0161 ir nepiecie\u0161ams. \u0160\u012b funkcionalit\u0101te var tikt \u012bstenota gan k\u0101 \u0101r\u0113js demons, gan klienta bibliot\u0113ka (savienojumu baseins), utt. Viss \u0161is iet \u0101rpus t\u0113mas par datu b\u0101zes notur\u012bgo klasteri (notur\u012bba <em>SQL proxy<\/em> var tikt \u012bstenota neatkar\u012bgi, kop\u0101 ar klienta notur\u012bbu).<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka4\">Tuchanka4 atteikums<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/e005ae90ffd63abdb272012b94735618.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kad viens datu centrs neizdodas (t.i., divi serveri), liecinieks balso par otro. Rezult\u0101t\u0101 otraj\u0101 datu centr\u0101 str\u0101d\u0101 divi serveri: uz viena darbojas meistars, un uz to nor\u0101d\u012bts meistara float IP (las\u012bt-rakst\u012bt piepras\u012bjumiem); bet uz otra servera darbojas darbinieks ar sinhrono replik\u0101ciju, un uz to nor\u0101d\u012bts viens no darba float IP (las\u012bt tikai piepras\u012bjumiem).<\/p>\n<p><\/p>\n<p>Pirmais, kas j\u0101atz\u012bst: str\u0101d\u0101jo\u0161s darba float IP b\u016bs ne visi, bet tikai viens. Un, lai to pareizi darbotos, b\u016bs nepiecie\u0161ams, <em>sql proxy<\/em> p\u0101radres\u0113ts visus piepras\u012bjumus uz vien\u012bgo paliku\u0161o float IP; ja n\u0113, tad var nor\u0101d\u012bt visus float IP vergu atdal\u012bt\u0101 ar komatu URL, lai piesl\u0113gtos. \u0160\u0101d\u0101 gad\u012bjum\u0101 <em>sql proxy<\/em> savienojums tiks izveidots ar pirmo darba IP, t\u0101 ir izdar\u012bts autom\u0101tiskaj\u0101 test\u0113\u0161anas sist\u0113m\u0101. Iesp\u0113jams, cit\u0101s bibliot\u0113k\u0101s, piem\u0113ram, JDBC, tas var nedarboties. <em>libpq<\/em> T\u0101 ir izdar\u012bts, jo float IP vergiem ir liegums vienlaikus p\u0101rcelties uz vienu serveri, lai tie vienm\u0113r\u012bgi sadal\u012btos starp vergu serveriem, ja tie darbojas vair\u0101ki. <em>sql proxy<\/em>Otrk\u0101rt: pat datu centra atteikuma gad\u012bjum\u0101 saglab\u0101sies sinhrona replik\u0101cija. Un pat ja notiks otrs atteikums, tas ir, ja paliku\u0161aj\u0101 datu centr\u0101 atteiksies viens no diviem serveriem, klasteris, lai gan p\u0101rtrauks sniegt pakalpojumus, tom\u0113r saglab\u0101s inform\u0101ciju par vis\u0101m apstiprin\u0101taj\u0101m transakcij\u0101m, par kur\u0101m tas deva apstiprin\u0101jumu par komitu (neb\u016bs inform\u0101cijas zuduma otraj\u0101 atteikum\u0101).<\/p>\n<p><\/p>\n<p>Tuchanka3 (3 datu centri)<\/p>\n<p><\/p>\n<h2 id=\"tuchanka3-3-data-centra\">Tas ir klasteris situ\u0101cijai, kad ir tr\u012bs pilnv\u0113rt\u012bgi str\u0101d\u0101jo\u0161i datu centri, kuros katr\u0101 ir pilnv\u0113rt\u012bgi daro\u0161s datu b\u0101zes serveris. \u0160\u0101d\u0101 gad\u012bjum\u0101<\/h2>\n<p><\/p>\n<h3 id=\"struktura-3\">Strukt\u016bra<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/e11f9884b92fe20a63b5080ae8c7f82b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>nav nepiecie\u0161ams. Vien\u0101 datu centr\u0101 darbojas meistars, divos citos \u2014 vergi. Replik\u0101cija ir sinhrona, tipa ANY (slave1, slave2), tas ir, klientam tiks nos\u016bt\u012bts apstiprin\u0101jums par komitu, kad jebkur\u0161 no vergiem pirmais atbild\u0113s, ka tas ir pie\u0146\u0113mis komitu. Resursi nor\u0101da uz vienu float IP meistaram un diviem vergiem. At\u0161\u0137ir\u012bb\u0101 no Tuchanka4 visi tr\u012bs float IP ir izg\u0101zties iztur\u012bgi. Las\u012bjumiem ir iesp\u0113jams izmantot <em>quorum device<\/em> (ar atsevi\u0161\u0137u izg\u0101zties iztur\u012bbu), vai ar\u012b pusei klientu pie\u0161\u0137irt vienu vergu float IP, bet otrai pusei \u2014 otro. <em>sql proxy<\/em> Izg\u0101\u0161an\u0101s Tuchanka3<\/p>\n<p><\/p>\n<h3 id=\"otkaz-tuchanka3\">Ja vienam no datu centriem ir izg\u0101\u0161an\u0101s, paliek divi. Viens ir pacelts meistars un float IP no meistara, bet otrs \u2014 vergs un abi vergu float IP (instanc\u0113 j\u0101b\u016bt divk\u0101r\u0161am resursu rezerv\u0113m, lai pie\u0146emtu visas piesl\u0113g\u0161an\u0101s no abiem vergu float IP). Starp meistariem un vergu ir sinhrona replik\u0101cija. T\u0101pat klasteris saglab\u0101s inform\u0101ciju par apstiprin\u0101taj\u0101m un apstiprin\u0101taj\u0101m transakcij\u0101m (neb\u016bs inform\u0101cijas zuduma) divu datu centru izn\u012bcin\u0101\u0161anas gad\u012bjum\u0101 (ja tie nav izn\u012bcin\u0101ti vienlaikus).<\/h3>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/1e61158be3c23742384d3621e8f7896b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja vienai datu centr\u0101 ir trauc\u0113jumi, paliek divas. Viens no tiem ir sagatavots k\u0101 meistars ar float IP no meistara, otrs \u2014 k\u0101 vergs ar abiem vergu float IP. (Instanc\u0113m j\u0101b\u016bt divk\u0101r\u0161am resursu rezervem, lai var\u0113tu uz\u0146emt visas saites no abiem vergu float IP). Starp meistariem un vergu notiek sinhron\u0101 replik\u0101cija. Klasteris ar\u012b saglab\u0101s inform\u0101ciju par apstiprin\u0101taj\u0101m un apstiprin\u0101taj\u0101m dar\u012bjumiem (inform\u0101cija netiks zaud\u0113ta) divu datu centru izn\u012bcin\u0101\u0161anas gad\u012bjum\u0101 (ja tie netiek izn\u012bcin\u0101ti vienlaic\u012bgi).<\/p>\n<p><\/p>\n<p><em>Izsme\u013co\u0161s failu strukt\u016bras un izvieto\u0161anas apraksts netika iek\u013cauts. Kur\u0161 v\u0113l\u0113sies pam\u0113\u0123in\u0101t, visu to var izlas\u012bt README. Es sniedzu tikai autom\u0101tisk\u0101 test\u0113\u0161anas aprakstu.<\/em><\/p>\n<p><\/p>\n<h1 id=\"sistema-avtomaticheskogo-testirovaniya\">Autom\u0101tisk\u0101s test\u0113\u0161anas sist\u0113ma<\/h1>\n<p><\/p>\n<p>Lai p\u0101rbaud\u012btu klusteru iztur\u012bbu, simul\u0113jot da\u017e\u0101das defektus, ir izstr\u0101d\u0101ta autom\u0101tisk\u0101s test\u0113\u0161anas sist\u0113ma. To palai\u017e ar skriptu <code>test\/failure<\/code>. Skripts var pie\u0146emt k\u0101 parametrus klusteru numurus, kurus v\u0113laties p\u0101rbaud\u012bt. Piem\u0113ram, \u0161\u012b komanda:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">test\/failure 2 3<\/code><\/pre>\n<p><\/p>\n<p>p\u0101rbaud\u012bs tikai otro un tre\u0161o klusteru. Ja parametri nav nor\u0101d\u012bti, tad tiks p\u0101rbaud\u012bti visi klasteri. Visi klasteri tiek test\u0113ti paral\u0113li, un rezult\u0101ts tiek par\u0101d\u012bts tmux panel\u012b. Tmux izmanto atsevi\u0161\u0137u tmux serveri, t\u0101p\u0113c skriptu var palaist no default tmux, veidojot iegultu tmux. Es iesaku izmantot termin\u0101lu liel\u0101 log\u0101 ar mazu fontu. Pirms test\u0113\u0161anas visas virtu\u0101l\u0101s ma\u0161\u012bnas tiek atjaunotas uz momentuz\u0146\u0113mumu, kas uz\u0146emts skripta beig\u0101s. <code>setup<\/code>.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/b546bab1ebbbe365991e1ff3d1667237.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Termin\u0101ls tiek sadal\u012bts kolonn\u0101s, atbilsto\u0161i test\u0113jamo klasteru skaitam, p\u0113c noklus\u0113juma (iek\u0161 screenshot) to ir \u010detri. Kolonnu saturu es aprakst\u012b\u0161u uz Tuchanka2 piem\u0113ra. Pane\u013ci screenshot ir numur\u0113ti:<\/p>\n<p><\/p>\n<ol>\n<li>\u0160eit tiek par\u0101d\u012bta statistika par testiem. Kolonnas:\n<ul>\n<li><strong>failure<\/strong> \u2014 testu nosaukums (funkcijas skript\u0101), kas simul\u0113 defektu.<\/li>\n<li><strong>reaction<\/strong> \u2014 vid\u0113jais laiks sekund\u0113s, kur\u0101 klusters atjaunoja savu darbsp\u0113ju. Tiek m\u0113r\u012bts no skripta palai\u0161anas s\u0101kuma, kas simul\u0113 defektu, l\u012bdz br\u012bdim, kad klusters atjauno savu darbsp\u0113ju un var turpin\u0101t sniegt pakalpojumus. Ja laiks ir \u013coti \u012bss, piem\u0113ram, se\u0161as sekundes (t\u0101 notiek klasteros ar vair\u0101kiem vergiem (Tuchanka3 un Tuchanka4)), tas noz\u012bm\u0113, ka defekts rad\u0101s uz asimetrisk\u0101 verga un nek\u0101d\u0101 veid\u0101 neietekm\u0113ja darbsp\u0113ju, klastera st\u0101vok\u013ca p\u0101rsl\u0113g\u0161ana nebija.<\/li>\n<li><strong>deviation<\/strong> \u2014 r\u0101da izkliedi (precizit\u0101ti) v\u0113rt\u012bbai <strong>reaction<\/strong> izmantojot \"standarta novirzes\" metodi.<\/li>\n<li><strong>count<\/strong> \u2014 cik reizes \u0161is tests tika veikts.<\/li>\n<\/ul>\n<\/li>\n<li>\u012ass \u017eurn\u0101ls \u013cauj nov\u0113rt\u0113t, ar ko klusters nodarbojas \u0161obr\u012bd. Tiek par\u0101d\u012bts iter\u0101cijas (testa) numurs, laika atz\u012bme un oper\u0101cijas nosaukums. P\u0101r\u0101k ilgs izpildes laiks (&gt; 5 min\u016btes) nor\u0101da uz kaut k\u0101d\u0101m probl\u0113m\u0101m.<\/li>\n<li><strong>heart<\/strong> (sirds) \u2014 pa\u0161reiz\u0113jais laiks. Lai vizu\u0101li nov\u0113rt\u0113tu darba sp\u0113ju <em>meistari<\/em> vi\u0146a tabul\u0101 past\u0101v\u012bgi tiek ierakst\u012bts pa\u0161reiz\u0113jais laiks, izmantojot meistara float IP. Ja tests ir veiksm\u012bgs, rezult\u0101ts tiek par\u0101d\u012bts \u0161aj\u0101 panel\u012b.<\/li>\n<li><strong>sit<\/strong> (puls\u0101cija) \u2014 \u00abpa\u0161reiz\u0113jais laiks\u00bb, kas iepriek\u0161 bija ierakst\u012bts skript\u0101 <strong>heart<\/strong> meistar\u0101, tagad tiek nolas\u012bts no <em>verga<\/em> caur vi\u0146a float IP. Tas \u013cauj vizu\u0101li nov\u0113rt\u0113t verga darba sp\u0113ju un replik\u0101ciju. Tuchanka1 nav vergu ar float IP (nav vergu, kas sniedz pakalpojumus), ta\u010du tur ir divi instan\u010du (DB), t\u0101p\u0113c \u0161eit tiks r\u0101d\u012bts ne <strong>sit<\/strong>, bet <strong>heart<\/strong> otra instance.<\/li>\n<li>Kl\u0101steru st\u0101vok\u013ca monitorings ar r\u012bku <code>pcs mon<\/code>. R\u0101da strukt\u016bru, resursu sadal\u012bjumu starp mezgliem un citu noder\u012bgu inform\u0101ciju.<\/li>\n<li>\u0160eit tiek par\u0101d\u012bta sist\u0113mas monitorings no katras virtu\u0101l\u0101s ma\u0161\u012bnas klaster\u012b. \u0160\u0101du pane\u013cu var b\u016bt vair\u0101k \u2014 cik daudz virtu\u0101lo ma\u0161\u012bnu ir klaster\u012b. Divi grafiki <em>CPU Slodze<\/em> (virtu\u0101laj\u0101s ma\u0161\u012bn\u0101s pa diviem procesoriem), virtu\u0101l\u0101s ma\u0161\u012bnas nosaukums, <em>Sist\u0113mas Slodze<\/em> (nor\u0101d\u012bts k\u0101 Slodzes Vid\u0113jais, jo tas ir vid\u0113js 5, 10 un 15 min\u016bt\u0113s), dati par procesiem un atmi\u0146as sadal\u012bjumu.<\/li>\n<li>Skripta tras\u0113\u0161ana, kas veic test\u0113\u0161anu. Ja rodas k\u013c\u016bme \u2014 p\u0113k\u0161\u0146a apst\u0101\u0161an\u0101s vai bezgal\u012bga gaid\u012b\u0161anas cikla \u2014 \u0161eit var\u0113s redz\u0113t \u0161\u0101da uzved\u012bbas iemeslu.<\/li>\n<\/ol>\n<p><\/p>\n<p>Test\u0113\u0161ana tiek veikta divos posmos. S\u0101kum\u0101 skripts iziet cauri vis\u0101m testa sug\u0101m, nejau\u0161i izv\u0113loties virtu\u0101lo ma\u0161\u012bnu, kurai \u0161o testu pielietot. P\u0113c tam tiek veikts bezgal\u012bgs test\u0113\u0161anas cikls, virtu\u0101l\u0101s ma\u0161\u012bnas un k\u013c\u016bme katru reizi tiek izv\u0113l\u0113tas nejau\u0161i. P\u0113k\u0161\u0146a test\u0113\u0161anas skripta pabeig\u0161ana (apak\u0161\u0113jais panels) vai bezgal\u012bga gaid\u012b\u0161ana uz kaut ko (&gt; 5 min\u016btes viena oper\u0101cija, tas redzams tras\u0113) nor\u0101da, ka k\u0101ds no testiem \u0161aj\u0101 klaster\u012b ir izg\u0101zies.<\/p>\n<p><\/p>\n<p>Katrs tests sast\u0101v no \u0161\u0101d\u0101m oper\u0101cij\u0101m:<\/p>\n<p><\/p>\n<ol>\n<li>Funkcijas palai\u0161ana, kas simul\u0113 k\u013c\u016bmi.<\/li>\n<li><strong>Gatavs?<\/strong> \u2014 gaid\u012b\u0161ana uz klastera atjauno\u0161anu (kad tiek sniegti visi pakalpojumi).<\/li>\n<li>Tiek r\u0101d\u012bts klastera atjauno\u0161anas laiks (<em>reaction<\/em>).<\/li>\n<li><strong>Labot<\/strong> \u2014 klasteris \u00abtiek labots\u00bb. P\u0113c tam tam j\u0101atgrie\u017eas piln\u012bg\u0101 darba st\u0101vokl\u012b un gatav\u012bb\u0101 uz n\u0101kamo k\u013c\u016bmi.<\/li>\n<\/ol>\n<p><\/p>\n<p>\u0160eit ir testu saraksts ar aprakstu, ko tie dara:<\/p>\n<p><\/p>\n<ul>\n<li><strong>ForkBomb<\/strong>: izveido &quot;Atmi\u0146as tr\u016bkums&quot; ar fork-bumbu.<\/li>\n<li><strong>OutOfSpace<\/strong>: p\u0101rpilda cieto disku. Ta\u010du tests ir dr\u012bz\u0101k simbolisks, \u0146emot v\u0113r\u0101 minim\u0101lo slodzi, kas tiek rad\u012bta test\u0113\u0161anas laik\u0101, pie ciet\u0101 diska p\u0101rpildes PostgreSQL parasti neizdodas.<\/li>\n<li><strong>Postgres-KILL<\/strong>: nogalina PostgreSQL ar komandu <code>killall -KILL postgres<\/code>.<\/li>\n<li><strong>Postgres-STOP<\/strong>: uzs\u0101kt PostgreSQL ar komandu <code>killall -STOP postgres<\/code>.<\/li>\n<li><strong>PowerOff<\/strong>: \u00abp\u0101rtrauc\u00bb virtu\u0101lo ma\u0161\u012bnu ar komandu <code>VBoxManage controlvm &quot;virtu\u0101l\u0101 ma\u0161\u012bna&quot; poweroff<\/code>.<\/li>\n<li><strong>Atjaunot<\/strong>: p\u0101rrestart\u0113 virtu\u0101lo ma\u0161\u012bnu ar komandu <code>VBoxManage controlvm &quot;virtu\u0101l\u0101 ma\u0161\u012bna&quot; reset<\/code>.<\/li>\n<li><strong>SBD-STOP<\/strong>: pau\u017e SBD demon ar komandu <code>killall -STOP sbd<\/code>.<\/li>\n<li><strong>ShutDown<\/strong>: caur SSH nos\u016bta virtu\u0101lajai ma\u0161\u012bnai komandu <code>systemctl poweroff<\/code>, sist\u0113ma pareizi nosl\u0113dz darb\u012bbu.<\/li>\n<li><strong>UnLink<\/strong>: t\u012bkla izol\u0101cija, komanda <code>VBoxManage controlvm &quot;virtu\u0101l\u0101 ma\u0161\u012bna&quot; setlinkstate1 off<\/code>.<\/li>\n<\/ul>\n<p><\/p>\n<p>Test\u0113\u0161anas nosl\u0113g\u0161ana, izmantojot standarta komandu tmux &quot;kill-window&quot; <strong>Ctrl-b &amp;<\/strong>, vai komandu &quot;detach-client&quot; <strong>Ctrl-b d<\/strong>: \u0161aj\u0101 proces\u0101 test\u0113\u0161ana beidzas, tmux aizveras, virtu\u0101l\u0101s ma\u0161\u012bnas izsl\u0113dzas.<\/p>\n<p><\/p>\n<h1 id=\"vyyavlennye-pri-testirovanii-problemy\">Identific\u0113t\u0101s probl\u0113mas test\u0113\u0161anas laik\u0101<\/h1>\n<p><\/p>\n<ul>\n<li>\n<p>Pa\u0161reiz ir j\u0101piespie\u017e izv\u0113l\u0113ties vai nu ska\u0146u, vai suspend\/atjaunot. Gaid\u0101m, kad moduli bce autors pabeigs funkcion\u0101l\u0101 uzlabo\u0161anu. <em>watchdog demons sbd<\/em> apstr\u0101d\u0101 nov\u0113rojamo demonu apst\u0101\u0161anos, bet ne to iesald\u0113\u0161anu. Un, k\u0101 rezult\u0101t\u0101, nepareizi apstr\u0101d\u0101 boj\u0101jumus, kas noved pie iesald\u0113\u0161anas tikai <em>Corosync<\/em> un <em>Pacemaker<\/em>, bet nep\u0101rtrauc <em>sbd<\/em>. P\u0101rbaudei <em>Corosync<\/em> jau ir pieejams <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/ClusterLabs\/sbd\/pull\/83\"><strong>PR#83<\/strong> (GitHub) <em>sbd<\/em>)<\/a><\/noindex>, apstiprin\u0101ts zar\u0101 <em>master<\/em>. Sol\u012bja (PR#83), ka ar\u012b Pacemaker b\u016bs kaut kas l\u012bdz\u012bgs, ceru, ka l\u012bdz <em>RedHat 8<\/em> tiks izstr\u0101d\u0101ts. Bet \u0161\u0101das \u00abboj\u0101jumu\u00bb teorijas ir viegli simul\u0113t m\u0101ksl\u012bgi, izmantojot, piem\u0113ram, <code>killall -STOP corosync<\/code>, bet nekad nesastopamas re\u0101laj\u0101 dz\u012bv\u0113.<\/p>\n<p>\n<\/li>\n<li>\n<p>Uz <em>Pacemaker<\/em> versij\u0101 <em>CentOS 7<\/em> nepareizi iestat\u012bts <em>sync_timeout<\/em> u <em>quorum device<\/em>, rezult\u0101t\u0101 <noindex><a rel=\"nofollow\" href=\"https:\/\/lists.clusterlabs.org\/pipermail\/users\/2019-August\/026145.html\">ja viena mezgla atteik\u0161an\u0101s notika, ar noteiktu varb\u016bt\u012bbu tiks restart\u0113ts ar\u012b otrais mezgls<\/a><\/noindex>, uz kuru b\u016btu j\u0101p\u0101riet ma\u00eet\u00e8re. Tika izlabots, palielinot <em>sync_timeout<\/em> u <em>quorum device<\/em> izvieto\u0161anas laik\u0101 (skript\u0101 <code>setup\/setup1<\/code>). \u0160is labojums netika pie\u0146emts izstr\u0101d\u0101t\u0101jiem <em>Pacemaker<\/em>, t\u0101 viet\u0101 vi\u0146i sol\u012bja p\u0101rstr\u0101d\u0101t infrastrukt\u016bru t\u0101d\u0101 veid\u0101 (k\u0101du nezin\u0101mu n\u0101kotn\u0113), lai \u0161o taimeri var\u0113tu apr\u0113\u0137in\u0101t autom\u0101tiski.<\/p>\n<p>\n<\/li>\n<li>\n<p>Ja, konfigur\u0113jot datu b\u0101zi, ir nor\u0101d\u012bts, ka <code>LC_MESSAGES<\/code> (teksta zi\u0146ojumi) var izmantot Unicode, piem\u0113ram, <code>ru_RU.UTF-8<\/code>, tad palai\u017eot <em>postgres<\/em> vid\u0113, kur locale nav UTF-8, piem\u0113ram, tuk\u0161\u0101 vid\u0113 (\u0161eit <em>pacemaker<\/em>+<em>pgsqlms<\/em>(paf) palai\u017e <em>postgres<\/em>), tad <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/13FE0F7C-5140-499C-8C2E-0BE64BC3A48B%40ya.ru\">\u017eurn\u0101l\u0101 viet\u0101 UTF-8 burti tiks att\u0113loti ar jaut\u0101juma z\u012bm\u0113m<\/a><\/noindex>. PostgreSQL izstr\u0101d\u0101t\u0101ji joproj\u0101m nav vienoju\u0161ies par to, kas j\u0101dara \u0161\u0101d\u0101 gad\u012bjum\u0101. Tas ir izdar\u0101ms, j\u0101uzst\u0101da <code>LC_MESSAGES=en_US.UTF-8<\/code> konfigur\u0113jot (izveidojot) DB instanci.<\/p>\n<p>\n<\/li>\n<li>\n<p>Ja ir iestat\u012bts wal_receiver_timeout (p\u0113c noklus\u0113juma 60s), tad, test\u0113jot PostgreSQL-STOP uz galven\u0101 servera klasteros tuchanka3 un tuchanka4 <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">notiek atk\u0101rtota replik\u0101cijas savienojuma veido\u0161ana ar jauno galveno serveri.<\/a><\/noindex>. Replik\u0101cija tur ir sinhrona, t\u0101p\u0113c apst\u0101jas ne tikai darba, bet ar\u012b jaun\u0101 galven\u0101 servera darb\u012bba. To var apiet, iestatot wal_receiver_timeout=0, konfigur\u0113jot PostgreSQL.<\/p>\n<p>\n<\/li>\n<li>\n<p>Retu reizi esmu nov\u0113rojis replik\u0101cijas apst\u0101\u0161anos PostgreSQL test\u0101 ForkBomb (atmi\u0146as p\u0101rpild\u012b\u0161ana). <noindex><a rel=\"nofollow\" href=\"https:\/\/www.postgresql.org\/message-id\/60590EC6-4062-4F25-A49C-3948ED2A7D47%40ya.ru\">P\u0113c ForkBomb da\u017ereiz str\u0101dnieki var nepiesl\u0113gties jaunajam galvenajam serverim.<\/a><\/noindex>. Esmu sask\u0101ries ar to tikai klasteros tuchanka3 un tuchanka4, kur, jo replik\u0101cija ir sinhrona, galvenais serveris apst\u0101j\u0101s. Probl\u0113ma izzuda pati par sevi p\u0113c k\u0101da ilga laika (ap div\u0101m stund\u0101m). Nepiecie\u0161ama papildu izp\u0113te, lai to nov\u0113rstu. P\u0113c simptomiem tas l\u012bdzin\u0101s iepriek\u0161\u0113jai k\u013c\u016bdai, ko izraisa cita iemesla d\u0113\u013c, ta\u010du ar l\u012bdz\u012bgiem rezult\u0101tiem.<\/p>\n<p>\n<\/li>\n<\/ul>\n<p><\/p>\n<p>Krogan att\u0113ls \u0146emts no <noindex><a rel=\"nofollow\" href=\"http:\/\/fav.me\/d8fo42n\">Deviant Art<\/a><\/noindex> ar autora at\u013cauju:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Klastra mode\u013cu model\u0113\u0161ana ar augstu pieejam\u012bbu, izmantojot PostgreSQL un Pacemaker\" src=\"\/wp-content\/uploads\/2020\/08\/ded1ead387814d97d84d0fb89e025386.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Avots: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/domclick\/blog\/516538\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430\u0445, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u043d\u044b\u0445 \u043e\u043f\u0442\u043e\u0432\u043e\u043b\u043e\u043a\u043d\u043e\u043c \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u043e\u0440\u043e\u0434\u0430, \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u0431\u0435\u0441\u0442\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0435) \u043e\u0434\u043d\u043e\u0433\u043e \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0430. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0444\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c, \u0432\u044b\u0431\u0440\u0430\u043b Pacemaker, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0442 RedHat \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432. \u041e\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0442\u0435\u043c, \u0447\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":92571,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-92570","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"lv_LV\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 PostgreSQL \u0438 Pacemaker | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-08-28T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-08-28T17:42:21+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Toleranto klasteru model\u0113\u0161ana, balstoties uz PostgreSQL un Pacemaker | ProHoster","description":"Ievads Pirms k\u0101da laika man tika uzdots uzdevums izstr\u0101d\u0101t tolerant\u0101 klasteri PostgreSQL.","canonical_url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"lv_LV","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u0434\u0435\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0445 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 PostgreSQL \u0438 Pacemaker | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u0437\u0430\u0434 \u043f\u0435\u0440\u0435\u0434\u043e \u043c\u043d\u043e\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u043a\u0430\u0437\u043e\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0434\u043b\u044f PostgreSQL.","og:url":"https:\/\/prohoster.info\/lv\/blog\/administrirovanie\/modelirovanie-otkazoustojchivyh-klasterov-na-baze-postgresql-i-pacemaker","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-08-28T17:42:21+00:00","article:modified_time":"2020-08-28T17:42:21+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"92570","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 12:06:03","updated":"2022-09-29 15:28:29","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/92570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/comments?post=92570"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/posts\/92570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media\/92571"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/media?parent=92570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/categories?post=92570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/lv\/wp-json\/wp\/v2\/tags?post=92570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}