{"id":90103,"date":"2020-07-29T13:42:32","date_gmt":"2020-07-29T11:42:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij"},"modified":"2020-07-29T13:42:32","modified_gmt":"2020-07-29T11:42:32","slug":"patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","title":{"rendered":"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6404cba13214f499d1f347cca0aacbe7.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Patroni peamine eesm\u00e4rk on tagada PostgreSQL-i k\u00f5rge k\u00e4ttesaadavus. Kuid Patroni on vaid mall, mitte valmis t\u00f6\u00f6riist (nagu dokumentatsioonis ka \u00f6eldud). Esmapilgul, kui seadistada Patroni testlaboris, v\u00f5ib n\u00e4ha, kui suurep\u00e4rane see t\u00f6\u00f6riist on ja kui lihtsalt ta meie katseid klastrit l\u00f5hkuda talub. Kuid praktikas tootmis\u00f5hus ei toimu k\u00f5ik alati nii sujuvalt ja elegantselt, nagu testlaboris.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ff445e6d76a2ad46a232b705e104446f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>R\u00e4\u00e4gin natuke endast. Alustasin s\u00fcsteemiadministraatorina. Tegin veebiarendust. Alates 2014. aastast t\u00f6\u00f6tan Data Egretis. Meie ettev\u00f5te tegeleb Postgresi n\u00f5ustamisega. Me haldame just Postgresit ja t\u00f6\u00f6tame sellega iga p\u00e4ev, mist\u00f5ttu on meil erinev eksperiment olemas, mis on seotud kasutamisega. <\/p>\n<p><\/p>\n<p>Ja 2018. aasta l\u00f5pus hakkasime vaikselt Patronit kasutama. Oleme omandanud teatud kogemused. Oleme seda kuidagi diagnostikaks kasutanud, h\u00e4\u00e4lestanud ja leidnud oma parimad praktikad. Sellest r\u00e4\u00e4gin ma oma ettekandes.<\/p>\n<p><\/p>\n<p>Lisaks Postgres\u2019ile armastan Linuxi. Mulle meeldib sellega katsetada ja uurida, samuti ka kernelite koostamine. Mulle meeldib virtualiseerimine, konteinerid, Docker, Kubernetes. See k\u00f5ik huvitab mind, sest see on seotud vanade administraatori harjumustega. Mulle meeldib tegeleda j\u00e4lgimisega. Ja armastan Postgres'iga seotud asju, mis on seotud administreerimisega, st replikatsioon, varundamine. Vabal ajal kirjutan Go-s. Ma ei ole tarkvarainsener, kirjutan lihtsalt enda jaoks Go-s. Ja see toob mulle r\u00f5\u00f5mu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/02cfd9293af5a8410c91e39afe2c75e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Ma arvan, et paljud teist teavad, et Postgres ei toeta HA (High Availability) otse v\u00e4lja pakutuna. HA saavutamiseks tuleb midagi paigaldada, seadistada, pingutada ja see saavutada. <\/li>\n<li>On mitmeid t\u00f6\u00f6riistu, ja Patroni on \u00fcks neist, mis lahendab HA probleemid \u00fcsna osavalt ja t\u00f5husalt. Kuid kui paigaldame selle k\u00f5ik testlaborisse ja k\u00e4ivitame, saame n\u00e4ha, et see t\u00f6\u00f6tab, saame paljusid probleeme korduda ja j\u00e4lgida, kuidas Patroni nendega tegeleb. Ja n\u00e4eme, et k\u00f5ik toimib suurep\u00e4raselt. <\/li>\n<li>Kuid praktikas oleme kokku puutunud erinevate probleemidega. Ja nende probleemide \u00fcle ma r\u00e4\u00e4gin.<\/li>\n<li>R\u00e4\u00e4gin, kuidas me neid diagnoosisime, mida kohendasime \u2013 kas see aitas meid v\u00f5i mitte. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/7126b45b40dd08521e80a3c150382bec.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<ul>\n<li>Ma ei hakka r\u00e4\u00e4kima, kuidas Patroni installida, sest selle kohta saab internetist palju teavet, samuti on v\u00f5imalik vaadata konfigureerimisfaile, et m\u00f5ista, kuidas see k\u00f5ik t\u00f6\u00f6tab ja seadistatakse. Saab uurida skeeme, arhitektuure, leides selle kohta informatsiooni internetis. <\/li>\n<li>Ma ei hakka r\u00e4\u00e4kima teiste kogemustest. R\u00e4\u00e4gin ainult nendest probleemidest, millega meie olime silmitsi. <\/li>\n<li>Ja ma ei hakka r\u00e4\u00e4kima probleemidest, mis ei puuduta Patronit ja PostgreSQL-i. N\u00e4iteks kui probleemid on seotud tasakaalustamisega, kui meie klaster lagunes, siis sellest ma ei r\u00e4\u00e4gi. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/3f8d179e7c78ce83e8842ef5c72fe30d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja v\u00e4ike disclaimer enne, kui meie ettekannet alustame. <\/p>\n<p><\/p>\n<p>K\u00f5ik need probleemid, millega me silmitsi seistes kokku puutusime, tulid esimestel 6-7-8 kuud. Aja jooksul j\u00f5udsime oma sisemiste parimate tavade juurde. Ja probleemid kadusid. Seet\u00f5ttu oli ettekanne planeeritud kusagil pool aastat tagasi, kui see k\u00f5ik oli v\u00e4rskelt meeles ja ma m\u00e4letasin seda h\u00e4sti. <\/p>\n<p><\/p>\n<p>Ettevalmistuse k\u00e4igus vaatasin l\u00e4bi vanad postmorten, j\u00e4lgisin logisid. Osad detailid v\u00f5ivad olla ununenud v\u00f5i teatud aspekte ei pruugitud t\u00e4ielikult uurida probleeme anal\u00fc\u00fcsides, seega v\u00f5ib tunduda, et probleemide k\u00e4sitlemine ei ole t\u00e4ielik v\u00f5i informatsiooni on puudulik. Palun vabandage selle hetke p\u00e4rast. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/30d414284a41fcbc3bf417c9da28ca52.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mis on Patroni?<\/p>\n<p><\/p>\n<ul>\n<li>See on HA konstruktsiooni mall. Nii on dokumentatsioonis kirjas. Ja minu arvates on see v\u00e4ga \u00f5ige t\u00e4psustus. Patroni ei ole h\u00f5bedane kuul, mis lahendab k\u00f5ik teie probleemid, st peate pingutama, et see t\u00f6\u00f6le hakkaks ja kasu tooks. <\/li>\n<li>See on agenditeenus, mis paigaldatakse igasse andmebaasi teenusesse ja mis toimib omamoodi init-s\u00fcsteemina teie Postgres'i jaoks. See k\u00e4ivitab, peatab, taask\u00e4ivitab, muudab konfiguratsiooni ja muudab teie klastrite topoloogiat. <\/li>\n<li>Seega, et s\u00e4ilitada klastrite olekut ja selle hetkeesitust, on vajalik mingisugune salvestusruum. Selle vaatenurgast on Patroni valinud lahenduseks klastrite oleku s\u00e4ilitamise v\u00e4listes s\u00fcsteemides. Need v\u00f5ivad olla Etcd, Consul, ZooKeeper v\u00f5i Kubernetesi Etcd, ehk \u00fcks neist variantidest. <\/li>\n<li>\u00dcks Patroni erip\u00e4ra on see, et automaatne failivahetus on juba s\u00fcsteemis olemas, tuleb vaid see seadistada. V\u00f5rdluseks Repmgriga, kus failivahetus tuleb komplektiga. Repmgriga saame switchoveri, kuid kui soovime automaatset failivahetust, peame selle eraldi seadistama. Patronis on automaatne failivahetus juba s\u00fcsteemis kaasas.<\/li>\n<li>Ja on veel palju muid funktsioone. N\u00e4iteks konfiguratsioonide haldamine, uute koopiate loomine, varundamine jne. Kuid need j\u00e4\u00e4vad ettekande v\u00e4lisse, seega ma nendest ei r\u00e4\u00e4gi. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fed0f1ce931df99ca76ae1116f8098cc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja v\u00e4ike kokkuv\u00f5te \u2013 Patroni peamine \u00fclesanne on teha automaatne failivahetus t\u00f5husalt ja usaldusv\u00e4\u00e4rselt, et klaster j\u00e4\u00e4ks t\u00f6\u00f6korrale ja rakendus ei m\u00e4rkaks muudatusi klastrite topoloogias. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fac52620957efa47ced330e7cc8084e0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui hakkame kasutama Patronit, muutub meie s\u00fcsteem veidi keerulisemaks. Kui meil oli varem Postgres, siis Patroni kasutamise korral saame me Patroni enda, saame DCS-i, kus hoitakse olekuteavet. Ja see k\u00f5ik peab kuidagi t\u00f6\u00f6tama. Nii et mis v\u00f5ib katki minna?<\/p>\n<p><\/p>\n<p>V\u00f5ib katki minna:<\/p>\n<p><\/p>\n<ul>\n<li>Postgres v\u00f5ib katki minna. See v\u00f5ib olla master v\u00f5i replikatsioon, kumbki neist v\u00f5ib eba\u00f5nnestuda. <\/li>\n<li>Ka Patroni v\u00f5ib katki minna. <\/li>\n<li>Ka DCS, kus hoitakse olekuteavet, v\u00f5ib eba\u00f5nnestuda.<\/li>\n<li>Ja v\u00f5rk v\u00f5ib katki minna. <\/li>\n<\/ul>\n<p><\/p>\n<p>Kasutame neid punkte oma ettekandes. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/1aeaf46d37bf1935b514b0581e0dbd0b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vaatan juhtumeid l\u00e4bi, kui need muutuvad keerulisemaks, mitte mitte selle j\u00e4rgi, et juhtum puudutab palju komponente, vaid subjektiivsete tunnete j\u00e4rgi, et see juhtum oli minu jaoks keeruline, seda oli raske anal\u00fc\u00fcsida... ja vastupidi, m\u00f5ni juhtum oli lihtne ja seda oli lihtne anal\u00fc\u00fcsida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/65b0c98bf2284610e955ced5eb998f39.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esimene juhtum on k\u00f5ige lihtsam. See on juhtum, kus v\u00f5tsime andmebaasi klastrite ja sellel samal klastril k\u00e4ivitasime meie DCS-i salvestusruumi. See on k\u00f5ige levinum viga. See on arhitektuuriliste raskuste viga, st erinevate komponentide \u00fchendamine \u00fchte kohta. <\/p>\n<p><\/p>\n<p>Nii et juhtus faili rike, l\u00e4hme vaatama, mis juhtus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/244b69d623fe2205c2d9ed2aa4620067.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja siin on meil huvitav, millal failivahe juhtus. St. meid huvitab see ajahetk, mil klastris toimus oleku muutus. <\/p>\n<p><\/p>\n<p>Kuid failivahe ei toimu alati \u00fcheaegselt, st. see ei kesta mingit kindlat aega, see v\u00f5ib venida. See v\u00f5ib olla kestnud protsess.<\/p>\n<p><\/p>\n<p>Seega on tal algusaeg ja l\u00f5ppaeg, s.t. tegu on kestva s\u00fcndmusega. Jagame k\u00f5ik s\u00fcndmused kolme ajavahemikku: meil on aeg enne failivahet, failivahetuse ajal ja p\u00e4rast failivahetust. St. vaatleme k\u00f5iki s\u00fcndmusi selles ajaskaalas. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a0ed61afe55d1a157147e0d80b17e5d1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kohe, kui failivahe juhtus, otsime p\u00f5hjust, mis juhtus, mis viis failivahetuseni. <\/p>\n<p><\/p>\n<p>Kui vaatame logisid, n\u00e4eme klassikalisi Patroni logisid. Need \u00fctlevad meile, et serverist sai meister ja meistri roll l\u00e4ks sellele s\u00f5lmele. See on siin esile t\u00f5stetud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/9998c69f7d0d4358b277f4e0e7b4350f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edasi peame aru saama, miks fail on toimunud, st millised s\u00fcndmused on p\u00f5hjustanud, et meistri roll on pidanud \u00fcle minema \u00fchelt s\u00f5lmlt teisele. Sel juhul on k\u00f5ik lihtne. Meil on probleem salvestuss\u00fcsteemiga. Meister m\u00f5istis, et ta ei saa DCS-iga t\u00f6\u00f6tada, st tekkis mingi probleem suhtluses. Ta \u00fctleb, et ei saa enam meistriks olla ja loobub oma volitustest. See rida \"demoted self\" r\u00e4\u00e4gib just sellest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/4a8eca27689546b4b0fc3c666a3c37c4.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui vaatame s\u00fcndmusi, mis eelnesid failimisele, siis n\u00e4eme seal neid p\u00f5hjuseid, mis p\u00f5hjustasid probleemi meistri t\u00f6\u00f6 j\u00e4tkamiseks. <\/p>\n<p><\/p>\n<p>Kui vaatame Patroni logisid, siis n\u00e4eme, et meil on palju erinevaid vigu, ajastusi, st Patroni agent ei saa t\u00f6\u00f6tada DCS-iga. Sel juhul on see Consul agent, kellega suhtlemine toimub pordil 8500. <\/p>\n<p><\/p>\n<p>Ja probleem seisneb selles, et Patroni ja andmebaas on k\u00e4ivitunud \u00fchel ja samal hostil. Ja sellel samal s\u00f5lmel olid k\u00e4ivitatud Consul serverid. Koormuse tekitamine serveris p\u00f5hjustas probleeme ka <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/\"   title=\"serverite\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1515\">serverite<\/a> Consuliga. Nad ei suutnud normaalselt suhelda. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/0d8dba6641809560e6b32825d481e30b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5ne aja p\u00e4rast, kui koormus oli vaibunud, suudeti meie Patroni j\u00e4lle suhelda agentidega. Tavaline t\u00f6\u00f6 taastus. Ja sama Pgdb-2 server sai taas meistriks. See t\u00e4hendab, et toimus v\u00e4ike vahetus, mille t\u00f5ttu s\u00f5lm kaotas oma meistri volitused ja v\u00f5ttis need uuesti endale, st k\u00f5ik naasis algsesse seisundisse. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/131b93e0bd83099e1b99b53742419e13.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seda v\u00f5ib pidada vale h\u00e4ireks v\u00f5i samas v\u00f5ib \u00f6elda, et Patroni tegutses \u00f5igesti. See t\u00e4hendab, et ta sai aru, et ei suuda s\u00e4ilitada klasti olekut ja v\u00f5ttis enda volitused tagasi.<\/p>\n<p><\/p>\n<p>Siin tekkis probleem, kuna Consul serverid olid sama riistvara peal, mis andmebaasid. Seega m\u00f5jutab iga koormus, olgu see siis koormus kettadelt v\u00f5i protsessoritelt, ka suhtlemist Consul klastri k\u00fcljest.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/142c7cf839c8da078451f7ba9d5499e5.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja me leppisime, et see ei pea koos elama, seega jagasime Consuli jaoks eraldi klastri. Patroni t\u00f6\u00f6tas juba eraldi Consuliga, s.t. meil oli eraldi Postgres klasster ja eraldi Consul klasster. See on p\u00f5hijuhend, kuidas k\u00f5ik need asjad eraldada ja hoida, et nad koos ei elaks. <\/p>\n<p><\/p>\n<p>\u00dche variandina on v\u00f5imalik reguleerida ttl, loop_wait ja retry_timeout parameetreid, st proovida neid parameetreid suurendades l\u00fchiajalised koormuse tipud \u00fcle elada. Kuid see ei ole k\u00f5ige sobivam lahendus, kuna koormus v\u00f5ib kesta kaua. Sel juhul \u00fcletame lihtsalt nende parameetrite limiidid, mis ei pruugi olla kasulik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c51f35dcd88b1c792acec231c0c6c66c.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Esimene probleem, nagu te arvatavasti aimasite, on lihtne. Me panime DCS koos andmebaasiga kokku ja saime probleemi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/cc2a98d9790441577fb4080406cbc53f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teine probleem on sarnane esimesele. See sarnaneb sellega, et meil on j\u00e4lle probleeme DCS s\u00fcsteemiga suhtlemisel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/e5c01b105adca48cc620085db8dd2d2b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui vaatame logisid, n\u00e4eme, et meil on j\u00e4lle suhtlemise viga. Patroni \u00fctleb, et ta ei saa DCS-iga suhelda, seet\u00f5ttu l\u00e4heb praegune master repliigi re\u017eiimi.<\/p>\n<p><\/p>\n<p>Vana master muutub repliigiks, siin toimib Patroni nagu peab. Ta k\u00e4ivitab pg_rewind, et tagasiviia tehingu ajalugu ja seej\u00e4rel \u00fchenduda uue masteriga, et j\u00f5uda uue masterini. Nii toimib Patroni, nagu tal ette n\u00e4htud on. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/29255f4790abb15b64dbf9ee0b41c7fc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin peame leidma selle koha, mis eelnes failide muutmisele, st need vead, mis olid p\u00f5hjuseks, miks meil failide muutmine aset leidis. Selles osas on logide j\u00e4lgimine Patroni abil \u00fcsna mugav. Ta kirjutab kindla intervalliga samu s\u00f5numeid. Kui me alustame logide kiiret kerimist, n\u00e4eme, et logid on muutunud, mis t\u00e4hendab, et mingeid probleeme on alanud. Me taastume kiiresti sellele kohale ja vaatame, mis toimub. <\/p>\n<p><\/p>\n<p>Normaalsetes olukordades n\u00e4evad logid umbes sellised v\u00e4lja. Kontrollitakse lukustuse omanikku. Ja kui omanik on n\u00e4iteks muutunud, v\u00f5ivad tekkida mingeid s\u00fcndmusi, millele Patroni peab reageerima. Kuid antud juhul on meil k\u00f5ik korras. Otsime seda kohta, kus vead algasid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f48ebd22a405f5b2900621451c68f543.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kerides tagasi sinna, kus vead hakkasid ilmuma, n\u00e4eme, et meil toimus automaatne failide muutmine. Ja kuna meie vead olid seotud suhtlemisega DCS-iga ning meie puhul kasutasime Consulit, vaatame \u00fcle ka Consuli logid, et n\u00e4ha, mis seal toimus. <\/p>\n<p><\/p>\n<p>Umbes ajakohastades failiserveri aega ja Consul'i logides olevat aega, n\u00e4eme, et meie Consul'i klastrikaaslased hakkavad kahtlema teiste Consul'i klastriliikmete olemasolus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/63b02ac5b4f5a34a2822f1eee2b1f2f8.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja kui vaadata ka teiste Consul'i agentide logisid, siis on seal samuti n\u00e4ha, et toimub mingi v\u00f5rgu kokkuvarisemine. K\u00f5ik Consul'i klastriliikmed kahtlevad \u00fcksteise olemasolus. See on andnud t\u00f5uke failiserverile. <\/p>\n<p><\/p>\n<p>Kui vaadata, mis juhtus enne neid vigu, siis v\u00f5ib n\u00e4ha erinevaid vigu, n\u00e4iteks deadline, RPC eba\u00f5nnestumine, st on ilmselgelt mingi probleem Consul'i klastriliikmete omavahelises suhtluses. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b15c912f2afb49d9d85e7bb9361ce449.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lihtsaim vastus on - parandada v\u00f5rku. Kuid mul, seistes trib\u00fc\u00fcnil, on lihtne sellest r\u00e4\u00e4kida. Kuid asjaolud on sellised, et tellija ei saa alati endale lubada v\u00f5rgu parandamist. Ta v\u00f5ib elada andmekeskuses ja tal ei pruugi olla v\u00f5imalusi v\u00f5rku parandada v\u00f5i seadmetele m\u00f5ju avaldada. Seet\u00f5ttu vajame mingeid teisi variante. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/1dbdb66233acc3bc321a30a1c5fe14f9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Variantideks on:<\/p>\n<p><\/p>\n<ul>\n<li>Lihtsaim variant, millest r\u00e4\u00e4gitakse minu arvates isegi dokumentatsioonis, on Consul-i kontrollide keelamine, st lihtsalt t\u00fchja massiivi edastamine. Niiviisi \u00fctlebime Consul-agendile, et ta ei kasuta mingeid kontrolle. Nende kontrollide t\u00f5ttu suudame me ignoreerida neid v\u00f5rgu torme ja mitte algatada failide edastamist. <\/li>\n<li>Teine variant on raft_multiplieri kontrollimine. See on Consul-serveri parameeter. Vaikev\u00e4\u00e4rtus on 5. See v\u00e4\u00e4rtus on dokumentatsioonis soovitatud staging keskkondade jaoks. Tegelikult m\u00f5jutab see s\u00f5numite vahetamise sagedust Consul v\u00f5rgu osaliste vahel. See parameeter m\u00f5jutab ametlike teatiste vahetamise kiirus, mis toimub Consul-klastris. Tootmisprotsessis soovitatakse seda v\u00e4\u00e4rtust v\u00e4hendada, et s\u00f5lmed saaksid teateid sagedamini vahetada. <\/li>\n<li>Teine v\u00f5imalus, mida me hakkasime kasutama, on Consul-protsesside prioriteedi suurendamine teiste protsesside seas operatsioonis\u00fcsteemi protsessoriplaneerijas. On olemas selline parameeter nagu \"nice\", mis m\u00e4\u00e4rab protsesside prioriteedi, mida operatsioonis\u00fcsteemi planeerija arvestab. Me v\u00e4hendasime Consul-agentide nice v\u00e4\u00e4rtust, st t\u00f5stsime prioriteeti, et operatsioonis\u00fcsteem annaks Consul-protsessidele rohkem aega t\u00f6\u00f6ks ja oma koodi t\u00e4itmiseks. Meie puhul lahendas see meie probleemi. <\/li>\n<li>Teine v\u00f5imalus on mitte kasutada Consulit. Mul on s\u00f5ber, kes on suur Etcd'i toetaja. Me vaidleme regulaarselt, kumb on parem: Etcd v\u00f5i Consul. Kuid mis puutub paremustesse, siis j\u00f5uame tavaliselt arusaamisele, et Consul'il on agent, mida tuleb igas andmebaasi s\u00f5lmes k\u00e4ivitada. See t\u00e4hendab, et Patroni suhtleb Consul'i klastriga l\u00e4bi selle agendi. Ja just see agent muutub kitsaskohaks. Kui agendiga midagi juhtub, siis ei saa Patroni enam Consul'i klastri t\u00f6\u00f6ga tegeleda. See on probleem. Etcd puhul ei ole agenti. Patroni saab otse suhelda Etcd'i serverite nimekirjaga ja nendega. Seega, kui teie ettev\u00f5ttes on kasutusel Etcd, siis v\u00f5ib see ilmselt olla parem valik kui Consul. Kuid meie klientide puhul oleme alati piiratud sellega, mida klient on valinud ja kasutab. Enamikul juhtudel on k\u00f5igil klientidel Consul. <\/li>\n<li>Viimase punktina vaatame parameetrite v\u00e4\u00e4rtusi \u00fcle. Saame neid v\u00e4\u00e4rtusi t\u00f5sta, lootes, et meie l\u00fchiajalised v\u00f5rguprobleemid on l\u00fchikesed ega \u00fcleta nende parameetrite vahemikku. Nii saame v\u00e4hendada Patroni agressiivsust automaatse failivahetuse osas, kui tekivad mingid v\u00f5rguprobleemid.<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f0043050da20f6368dabf66ec9a4eade.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Usun, et paljud, kes kasutavad Patronit, tunnevad selle k\u00e4su \u00e4ra. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/9f78f59dab166e47ac78436802156d04.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See k\u00e4sk n\u00e4itab klastrite praegust seisundit. Esmapilgul v\u00f5ib see pilt tunduda normaalne. Meil on meister, meil on koopiah\u00e4ire, replikatsioonilagi ei ole. Kuid see pilt on normaalne seni, kuni me ei tea, et selles klastris peaks olema kolm s\u00f5lme, mitte kaks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a39c891f8620ba210b6bce0727e0fa8b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Seega toimus automaatne failivahetus. P\u00e4rast seda failivahetust kadus meil koopiah\u00e4ire. Peame v\u00e4lja selgitama, miks see kadus ja tagasi tooma, taastama. Ja me l\u00e4heme j\u00e4lle logidesse, et vaadata, miks automaatne failivahetus toimus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/e6e67d46cb20c8d7e58c7505157f68e1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Antud juhul sai teine koopiah\u00e4ire meistriks. Siin on k\u00f5ik korras. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b86ccea68b0c6013a23bbd2804e48320.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja peame vaatama replikat, mis on v\u00e4ljaspool klastrit. Avame Patroni logid ja vaatame, et klastriga \u00fchendamisel tekkis probleem pg_rewind'i etapis. Klastrisse \u00fchendamiseks on vajalik tagasiviimine tehingulogisse, et k\u00fcsida vajalik tehingulogi meistrilt ja sellega meistrile j\u00e4rele j\u00f5uda. <\/p>\n<p><\/p>\n<p>Antud juhul meil ei ole tehinguloge ja replikatsioon ei saa k\u00e4ivituda. Seet\u00f5ttu peatame Postgresi vea t\u00f5ttu. Seega ei ole see klastris. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/dadbd44b766674b719d85781ef7f0caa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Peame m\u00f5istma, miks seda klastris ei ole ja miks logisid ei olnud. Liigume uue meistri juurde ja vaatame, mis tal logides on. Tundub, et pg_rewind'i teostamisel toimus checkpoint. Ja osa vanadest tehingulugudest nimetati lihtsalt \u00fcmber. Kui vana meister proovida uue meistriga \u00fchenduda ja neid logisid k\u00fcsida, olid need juba \u00fcmber nimetatud, neid lihtsalt ei olnud.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f2d5c37324f9436b2bdad1290612d86f.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ma v\u00f5rdlesin s\u00fcndmuste toimumise aegu. Seal on vahe vaid 150 millisekundit, st checkpoint l\u00f5petati 369 millisekundiga, WAL-segmendid nimetati \u00fcmber. Ja 517 millisekundi m\u00f6\u00f6dudes k\u00e4ivitus vana koopia rewind. St me saime vaid 150 millisekundiga hakkama, et koopia ei saaks \u00fchendust luua ja t\u00f6\u00f6tada. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/99dd80deb8466bfc3aff568456e07102.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Millised on valikud?<\/p>\n<p><\/p>\n<p>Alguses kasutasime replikatsiooni slote. Me arvasime, et see on hea. Kuigi k\u00e4ituse algfaasis l\u00fclitasime slote v\u00e4lja. Me arvasime, et kui slote koguneb palju WAL-segmente, v\u00f5ib meistriseade kokku kukkuda. Ta kukub kokku. Me piinasime ennast m\u00f5nda aega ilma slotideta. Ja saime aru, et me vajame slote, me taastastasime need. <\/p>\n<p><\/p>\n<p>Aga siin on probleem, et kui meistriseade muutub koopiaks, kustutab ta slote ja koos slottidega ka WAL-segmendid. Selle probleemi v\u00e4ltimiseks otsustasime t\u00f5sta wal_keep_segments parameetrit. See on vaikimisi 8 segmenti. T\u00f5stsime selle 1000-ni ja vaatasime, kui palju vaba ruumi meil on. Ja me andsime 16 gigabaiti wal_keep_segments jaoks. St \u00fcleminekul on meil alati k\u00f5igil s\u00f5lmedel 16 gigabaiti tehingute ajakirju reservi.<\/p>\n<p><\/p>\n<p>Ja pluss \u2013 see on endiselt asjakohane pikaajaliste hooldust\u00f6\u00f6de jaoks. Oletame, et peame v\u00e4rskendama \u00fchte replit. Ja me tahame selle v\u00e4lja l\u00fclitada. Me peame uuendama tarkvara, v\u00f5ib-olla operatsioonis\u00fcsteemi, midagi veel. Ja kui me repliika v\u00e4lja l\u00fclitame, kustutatakse sellele replikale ka pesa. Ja kui me kasutame v\u00e4ikest wal_keep_segments, siis pikka aega repliika puudumise korral, m\u00e4ngitakse tehingu logid uuesti. Me k\u00e4ivitame repliika, see k\u00fcsib neid tehingu logisid, kus ta peatus, kuid meistris ei pruugi neid olla. Ja repliika ei saa ka \u00fchendust saada. Seet\u00f5ttu hoiame suurt logide varu.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/dad55c828128ce92f649a99cc53ce54b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/63e70f0b098567f3a6d4fd66a0c293bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meil on tootmisbaas. Seal t\u00f6\u00f6tavad juba projektid. <\/p>\n<p><\/p>\n<p>Toimus faili t\u00f5rge. Me sisenesime ja vaatasime \u2013 k\u00f5ik on korras, replikad on kohal, replikatsiooni viivitus puudub. Ka logide osas pole vigu, k\u00f5ik on h\u00e4sti. <\/p>\n<p><\/p>\n<p>Toote meeskond \u00fctleb, et tundub, et peaks olema mingit t\u00fc\u00fcpi andmeid, kuid me n\u00e4eme neid \u00fches allikas, ent andmebaasis neid ei ole. On vaja m\u00f5ista, mis nendega juhtus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/568ca9aa31680d5e0c9d4ed9693b14e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>On selge, et pg_rewind on need \u00fcle kirjutatud. Me m\u00f5istsime seda kohe, kuid l\u00e4ksime vaatama, mis juhtus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a8fee389201d96e81761cd276c5265c3.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Logides saame alati leida, millal toimus failide haldamine, kes sai meistriks ja saame m\u00e4\u00e4rata, kes oli vana meister ja millal ta soovis saada koopiaks. Seega, need logid on vajalikud, et selgitada v\u00e4lja kadunud tehinguajakirjade maht.<\/p>\n<p><\/p>\n<p>Meie vana meister taask\u00e4ivitati. Ja autostartis oli m\u00e4rgitud Patroni. Patroni k\u00e4ivitati. Seej\u00e4rel k\u00e4ivitas see Postgres'i. T\u00e4psemalt, enne Postgres'i k\u00e4ivitamist ja enne selle replikaks muutmist, k\u00e4ivitas Patroni pg_rewind protsessi. Vastavalt sellele kustutas ta osa tehingute ajalugu, laadis uued ja \u00fchendas sisse. Siin t\u00f6\u00f6tas Patroni suurep\u00e4raselt, st nagu peab. Meie klastri taastumine toimus. Meil oli 3 s\u00f5lme, p\u00e4rast failih\u00e4daga 3 s\u00f5lme \u2013 k\u00f5ik l\u00e4ks suurep\u00e4raselt. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b747a24f53e20ed098c2dc0afc79bead.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Me kaotasime osa andmeid. Ja meil on vaja aru saada, kui palju me kaotasime. Otsime just seda hetke, mil toimus rewindi protsess. Saame seda leida selliste logikirjete p\u00f5hjal. Rewind k\u00e4ivitus, tegi midagi ja l\u00f5petas.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/5b7bacffb52e3ccd529a3a734c441295.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Peame leidma selle positsiooni tehinguajakirjades, kus vana meister peatunud on. Antud juhul on see see mark. Ja me vajame teist m\u00e4rki, st seda vahet, mille v\u00f5rra vana meister erineb uuest. <\/p>\n<p><\/p>\n<p>V\u00f5rdleme tavalist pg_wal_lsn_diff kahe ajam\u00e4rgiga. Antud juhul saame 17 megabaiti. Kas see on palju v\u00f5i v\u00e4he, otsustab iga\u00fcks ise. Sest kellelegi on 17 megabaiti v\u00e4he, kellelegi palju ja vastuv\u00f5etamatu. Siin peab iga\u00fcks individuaalselt hindama vastavalt oma \u00e4ri vajadustele. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/55335fce85961e159459c38300a0ad12.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Aga mida me enda jaoks selgitanud oleme? <\/p>\n<p><\/p>\n<p>Esiteks peame otsustama \u2013 kas me vajame s\u00fcsteemi taask\u00e4ivitamise j\u00e4rel alati Patroni automaatk\u00e4ivitust? Tihti on nii, et peame minema vana peameistri juurde, vaatama, kui kaugele ta on l\u00e4inud. V\u00f5ib-olla kontrollima tehingute ajakirjade segmente, vaatama, mis seal toimub. Ja m\u00f5istma \u2013 kas me saame need andmed kaotada v\u00f5i peame k\u00e4ivitama vanema peameistri standalone-re\u017eiimis, et need andmed v\u00e4lja tuua. <\/p>\n<p><\/p>\n<p>Ja alles p\u00e4rast seda peame langetama otsuseid, kas saame need andmed k\u00f5rvale j\u00e4tta v\u00f5i saame neid taastada, \u00fchendades selle s\u00f5lme meie klastrisse replikana.<\/p>\n<p><\/p>\n<p>Lisaks on olemas parameeter \u00abmaximum_lag_on_failover\u00bb. Kui ma \u00f5igesti m\u00e4letan, on selle parameetri vaikimisi v\u00e4\u00e4rtus 1 megabaid. <\/p>\n<p><\/p>\n<p>Kuidas see t\u00f6\u00f6tab? Kui meie replikatsioon on andmete edastamisel 1 megabaidiga maas, ei osale see replikatsioon valimistel. Ja kui peaks juhtuma fail, vaatab Patroni, millised replikatsioonid on maas. Kui nad on suure hulga tehingute logidega maas, ei saa nad olla peamine. See on v\u00e4ga hea kaitsefunktsioon, mis aitab v\u00e4ltida suurte andmekadude tekkimist. <\/p>\n<p><\/p>\n<p>Aga probleem seisneb selles, et Patroni ja DCS replikatsioonilagu uuendatakse teatud ajavahemike j\u00e4rel. Minu arust on vaikimisi ttl v\u00e4\u00e4rtus 30 sekundit.<\/p>\n<p><\/p>\n<p>Seega v\u00f5ib olla olukord, kus DCS-is oleva replikatsiooni lag on \u00fcks, aga tegelikult v\u00f5ib see olla hoopis teine lag v\u00f5i isegi mitte olla, st see ei ole reaalajas. Ja see ei kajasta alati t\u00f5elist olukorda. Seega ei tasuks sellele tuginedes keerukat loogikat ehitada. <\/p>\n<p><\/p>\n<p>Ja alati j\u00e4\u00e4b risk andmete kadumise osas. Halvimal juhul kehtib \u00fcks valem, parimal juhul aga teine. St kui planeerime Patroni rakendamist ja hindame, kui palju andmeid me v\u00f5ime kaotada, peame arvestama nende valemitega ja saama enam-v\u00e4hem aru, kui palju andmeid me v\u00f5ime kaotada. <\/p>\n<p><\/p>\n<p>Ja teil on h\u00e4id uudiseid. Kui vana meister lahkus, v\u00f5ib ta lahkuda m\u00f5ne taustaprotsessi arvelt. Ehkki mingil hetkel toimus autovakuum ja ta kirjutas andmed, salvestades need tehingute registrisse. Need andmed saame h\u00f5lpsasti t\u00e4helepanuta j\u00e4tta ja kaotada. Sellest ei ole mingit probleemi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a86e8971ab4ef41b89af9cf0bdf519ba.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nii n\u00e4evad logid v\u00e4lja juhul, kui on m\u00e4\u00e4ratud maximum_lag_on_failover ja toimus failover, ning tuleb valida uus meister. Replikatsioon hindab ennast osalemiseks sobimatuks ja loobub liidri valimisest. Ta ootab, kuni uus meister on valitud, et siis temaga \u00fchendust v\u00f5tta. See on t\u00e4iendav meede andmete kadumise v\u00e4ltimiseks.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f760788e5951facdd08b2069037830fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c32f26e7526e1873f3bfd7d3693fcc72.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Siin on meie tootmismeeskond m\u00e4rkinud, et nende toode kogeb probleeme Postgresi kasutamisel. Samas ei saa me kogu meistrisse sisse logida, kuna see ei ole SSH kaudu saadaval. Samuti ei toimu automaatset failoverit. <\/p>\n<p><\/p>\n<p>See host saadeti sunniviisiliselt taask\u00e4ivitama. Taask\u00e4ivitamise t\u00f5ttu toimus automaatne failover, kuigi oleks olnud v\u00f5imalik teha ka k\u00e4sitsi failoverit, nagu ma n\u00fc\u00fcd m\u00f5istan. P\u00e4rast taask\u00e4ivitamist vaatame juba, mis meil praeguse meistriga oli. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/95efb82e0647a396a21683cd53a69547.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samas teadsime meeldud, et meil on ketastega probleeme, st olime juba j\u00e4lginud, kus kaevata ja mida otsida. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/367aaab607d833d96a573ddbbbced502.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Uurime PostgreSQL logi, et vaadata, mis seal toimub. N\u00e4gime seal komiteerimisi, mis kestavad \u00fcks-kaks-kolm sekundit, mis ei ole normaalne. N\u00e4gime, et meie automaatne puhastus k\u00e4ivitub v\u00e4ga kaua ja kummaliselt. Ja n\u00e4gime ajutisi faile kettal. St need on k\u00f5ik ketaste probleemide n\u00e4itajad. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/7e0cfce7a81901ef9ef736c3fefc8dce.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Vaatasime s\u00fcsteemi dmesg\u2019i (tuumak\u00fcsimuste logi). Ja n\u00e4gime, et meil on \u00fche kettaga probleeme. Kettas\u00fcsteem oli tarkvaraline RAID. Vaatasime \/proc\/mdstat ja n\u00e4gime, et meil puudub \u00fcks ketas. St siin on 8 ketta RAID, meil puudub \u00fcks. Kui slaidi hoolikalt vaadata, saab v\u00e4ljundis n\u00e4ha, et meil puudub sde. \u00dcldiselt \u00f6eldes, on ketas v\u00e4lja langenud. See k\u00e4ivitas ketta probleemid ja rakendused kogesid ka probleeme PostgreSQL klastriga t\u00f6\u00f6tamisel.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/4b09b3aa761cb504fa79173ef280faac.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja ei aita meile antud juhul Patroni, kuna Patronil pole \u00fclesannet j\u00e4lgida serveri, ketta seisundit. Selliseid olukordi peame j\u00e4lgima v\u00e4lise monitooringu kaudu. Me lisasime v\u00e4lisse monitooringusse kiiresti ketaste monitooringu. <\/p>\n<p><\/p>\n<p>Ja tuli m\u00f5te \u2013 kas v\u00f5iks meid aidata fencing v\u00f5i software watchdog? Arvasime, et neist ei oleks olnud kasu, kuna probleemide ajal j\u00e4tkas Patroni suhtlemist DCS-klastriga ega n\u00e4inud \u00fchtegi probleemi. See t\u00e4hendab, et DCS-i ja Patroni jaoks oli klaster korras, kuigi tegelikult oli probleeme ketastega, oli probleeme andmebaasi saadavusega. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/15fdac78535355d4eb889efcc27efc46.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minu arvates on see \u00fcks k\u00f5ige kummalisemaid probleeme, mida olen v\u00e4ga kaua uurinud, lugenud l\u00e4bi v\u00e4ga palju logisid, kaevanud ja nimetanud seda klastrisimulatsiooniks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/b5259774931c290eda6673deb14b6c48.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Probleem seisnes selles, et vana master ei saanud normaalseks replikaks, st Patroni k\u00e4ivitas selle, Patroni n\u00e4itas, et see s\u00f5lm on replikana kohal, kuid samas ei olnud ta normaalne replika. N\u00fc\u00fcd n\u00e4ete, miks. See j\u00e4i mulle meelde selle probleemi k\u00e4sitlemisest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/c35a5d102a46764bbf96e5a75ee88171.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas k\u00f5ik algas? Nagu eelmine probleem, algas see kettajamidest. Meil olid sekundis \u00fcks v\u00f5i kaks tehtud muudatust. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/435c1b350a89f288e0e10ca9d5a2ec6e.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oli \u00fchenduse katkestamisi, st kliendid viskasid v\u00e4lja. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/920cb1f3f3b40578e15e6ff711e85c50.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Oli erineva raskusastmega blokeeringuid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/285d6292d89b928a85e95602ee57d38a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja seet\u00f5ttu ei olnud kettaalajuhatus kuigi vastutulelik. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ebe71d49360e7f604ecd6a3c8276cb73.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja k\u00f5ige m\u00fcstilisem minu jaoks \u2013 see saabunud immediate shutdown request. Postgres'il on kolm v\u00e4ljal\u00fclitamise re\u017eiimi:<\/p>\n<p><\/p>\n<ul>\n<li>On graceful, kui me ootame, et k\u00f5ik kliendid ise v\u00e4lja l\u00fclituvad. <\/li>\n<li>On fast, kui me sunnime kliente v\u00e4lja l\u00fclituma, sest me valmistume v\u00e4ljal\u00fclitamiseks. <\/li>\n<li>Ja immediate. Antud juhul immediate ei teata isegi klientidele, et nad peaks v\u00e4lja l\u00fclituma, vaid see lihtsalt sulgub ilma hoiatamata. K\u00f5igile klientidele saadab operatsioonis\u00fcsteem juba RST s\u00f5numi (TCP-s\u00f5num, et \u00fchendus katkestati ja kliendil pole enam midagi teha). <\/li>\n<\/ul>\n<p><\/p>\n<p>Kes saatis selle signaali? Postgres'i taustaprotsessid ei saada \u00fcksteisele selliseid signaale, st see on kill-9. Nad ei saata selliseid \u00fcksteisele, vaid reageerivad vaid sellega, st see on Postgres'i h\u00e4dasekundiline taask\u00e4ivitamine. Kes selle saatis, ma ei tea. <\/p>\n<p><\/p>\n<p>Vaadates k\u00e4sku \u201elast\u201d, m\u00e4rkasin, et \u00fcks inimene, kes oli samuti sellele serverile sisse logitud, oli koos meiega, kuid ma kartsin k\u00fcsimust esitada. V\u00f5ib-olla oli see kill -9. Logidest oleksin n\u00e4inud kill -9, kuna Postgres teatab, et sai kill -9, kuid ma ei leidnud seda logidest. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fe8e844649cea3384ebfde86e36eba44.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Edasi uurides m\u00e4rkasin, et Patroni ei olnud pikka aega loginud \u2013 54 sekundit. Ja kui v\u00f5rrelda kahte ajatemplit, siis siin oli umbes 54 sekundit s\u00f5numeid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ffb1c4db3d7de591d77d56ed2fcc4f2a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Selle aja jooksul toimus automaatne failiv\u00f5it. Patroni t\u00f6\u00f6tas siinkohal taas suurep\u00e4raselt. Meie vana meister ei olnud j\u00f5udnud, midagi temaga juhtus. Ja algasid uue meistri valimised. K\u00f5ik toimis h\u00e4sti. Meie pgsql01 sai uueks juhiks. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6b2457653e9f77af44cd64b4aff021a0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Meil on replikatsioon, mis sai meistriks. Ja on teine replikatsioon. Teise replikatsiooniga olidki probleemid. See \u00fcritas \u00fcmber konfigureerida. Nagu ma aru saan, \u00fcritas ta muuta recovery.conf, taask\u00e4ivitada Postgresi ja \u00fchenduda uue meistriga. iga 10 sekundi tagant saadab ta s\u00f5numeid, et ta proovib, kuid tal ei \u00f5nnestu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/381818f189e19c3e1154074b4652f837.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja isegi nendel katsetel, kui vana master saab immediate-shutdown signaali. Master taask\u00e4ivitub. Ja taastumine l\u00f5ppeb, kuna vana master l\u00e4heb taask\u00e4ivitamise re\u017eiimi. St replikatsioon ei saa temaga \u00fchendust v\u00f5tta, kuna ta on v\u00e4lja l\u00fclitatud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/d8a8cde925fa8fe601d44ab908ae69dc.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Mingi hetk ta toimis, kuid replikatsioon ei k\u00e4ivitatud. <\/p>\n<p><\/p>\n<p>Mul on ainult \u00fcks h\u00fcpotees, et recovery.conf-is oli vana masteri aadress. Ja kui uus master ilmus, siis teine replik p\u00fc\u00fcdis endiselt \u00fchendust v\u00f5tta vana masteriga. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/425ea3af1f1e186f4760e1fb1f5419fa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kui Patroni k\u00e4ivitati teisel replikal, node k\u00e4ivitati, kuid ei saanud replikatsiooni kaudu \u00fchendust v\u00f5tta. Ja replikatsiooni viivitus tekkis, mis n\u00e4gi v\u00e4lja umbes niimoodi. St k\u00f5ik kolm s\u00f5lme olid kohal, kuid teine s\u00f5lm j\u00e4i maha. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/f564eacd9944666c9a3f5bea634ede6b.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Samas, kui vaadata logisid, mis kirjutati, oli n\u00e4ha, et replikatsioon ei saa k\u00e4ivituda, kuna tehingu logid erinevad. Ja need tehingu logid, mida master pakub ja mis on m\u00e4rgitud recovery.conf-is, ei sobi lihtsalt meie praeguse s\u00f5lmega. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/6b09947d157c9ef0a190da2df2cb5892.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja tegin siin vea. Ma oleksin pidanud tulema ja vaatama, mis recovery.confis toimub, et kontrollida oma oletust, et me ei seo end vale meesteriga. Aga toona ma alles \u00f5ppisin ja see ei tulnud mulle p\u00e4he, v\u00f5i ma m\u00e4rkasin, et replikatsioon j\u00e4\u00e4b maha ja seda tuleb \u00fcmber laadida, nii et ma t\u00f6\u00f6tasin kuidagi hooletult. See oli minu eksimus. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/159f2256fd81428fd0d82a255528887d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>30 minuti p\u00e4rast tuli administraator, st ma taask\u00e4ivitasin Patroni replikatsioonil. Ma olin juba temast loobunud, m\u00f5tlesin, et seda tuleb \u00fcmber laadida. Ja m\u00f5tlesin \u2013 taask\u00e4ivitaks Patroni, \u00e4kki \u00f5nnestub midagi head. Recovery k\u00e4ivitus. Ja andmebaas avanes isegi, ta oli valmis \u00fchendusi vastu v\u00f5tma. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/aeac98750386c8389d39e006a229cc85.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Replikatsioon k\u00e4ivitus. Aga minuti p\u00e4rast kukkus see v\u00e4lja veaga, et tal ei sobi tehingute logid. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/17eaba000a79c80c29d1bc3902de05e6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>M\u00f5tlesin, et taask\u00e4ivitaks veel kord. Taask\u00e4ivitasin Patroni veel kord, ja ma ei k\u00e4ivitanud Postgresi, vaid just Patroni, lootes, et ta maagiliselt k\u00e4ivitab andmebaasi. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a85b38e033c45ad73da317f41e0ef24a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Replikatsioon k\u00e4ivitus uuesti, kuid tehingute ajalugu erines, need ei olnud need, mis olid eelmisel k\u00e4ivitamisel. Replikatsioon peatus uuesti. Ja s\u00f5num oli juba veidi erinev. See ei andnud mulle eriti teavet. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/fd90d708230bd54af685786c7e361ee1.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja siis tuli mul m\u00f5te \u2013 mis siis, kui ma taask\u00e4ivitaksin Postgressi, samal ajal teeksin praeguses masteris checkpoint'i, et edendada tehingute ajaloos punkti veidi edasi, et taastumine algaks teisest hetkest? Lisaks oli meil seal ka WAL'i varu. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/19e67f95d1a74141a013947c9aa39e38.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Taask\u00e4ivitasin Patroni, tegin paar checkpoint'i masteris, paar taask\u00e4ivitamise punkti replikas, kui see avati. Ja see aitas. M\u00f5tlesin kaua, miks see aitas ja kuidas see toimis. Ja replikatsioon k\u00e4ivitus. Ja replikatsioon enam purunenud ei olnud. <\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/418ca59a681be84f51ed374a73a759c9.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>See probleem on minu jaoks \u00fcks m\u00fcsteeriume, mille \u00fcle ma ikka veel pead vaevan, et mis seal tegelikult toimus. <\/p>\n<p><\/p>\n<p>Milliseid j\u00e4reldusi siit teha? Patroni t\u00f6\u00f6tab nagu kavandatud ja ilma vigu tegemata. Kuid see ei t\u00e4henda 100% garantii, et k\u00f5ik on korras. Replika v\u00f5ib t\u00f6\u00f6le hakata, kuid samas v\u00f5ib see olla pooliku olekuga, ning rakendus ei saa sellise replikaga t\u00f6\u00f6tada, kuna seal on vanad andmed. <\/p>\n<p><\/p>\n<p>Ja p\u00e4rast failivahetust tuleb alati kontrollida, et meie klaster on korras, st et replikaid on piisavalt ja replikatsioonis pole viivitusi.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/aca7047ff33d3efe14071b798b554091.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Ja nende probleemide k\u00e4sitlemise k\u00e4igus formuleerin soovitusi. Olen p\u00fc\u00fcdnud need koondada kahte slaidi. T\u00f5en\u00e4oliselt v\u00f5iks k\u00f5ik lood kokku panna kahe slaidi peale ja neid vaid r\u00e4\u00e4kida.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/d4ad31b26d83c8846fe4097a11d70849.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Patronit kasutades peab alati olema monitooring. Peate alati teadma, millal on toimunud automaatne failivahetus, sest kui te ei tea, et teil on olnud automaatne failivahetus, siis ei kontrolli te klastrit. Ja see on halb.<\/p>\n<p><\/p>\n<p>P\u00e4rast igat failivahetust peame alati k\u00e4sitsi kontrollima klastrit. Peame veenduma, et meil on alati piisav arv replikasid, et replikatsioonis pole viivitusi, logides ei esine voogedastusega, Patroni ega DCS s\u00fcsteemiga seotud vigu.<\/p>\n<p><\/p>\n<p>Automaatika suudab toimida t\u00f5husalt, Patroni on v\u00e4ga hea t\u00f6\u00f6riist. See suudab todistada, kuid see ei vii klastrit soovitud olekusse. Ja kui me sellest teada ei saa, siis tekivad meil probleemid.<\/p>\n<p><\/p>\n<p>Patroni ei ole h\u00f5bedane kuul. Me peame ikkagi m\u00f5istma, kuidas Postgres t\u00f6\u00f6tab, kuidas replikeerimine toimub ja kuidas Patroni Postgresega suhtleb ning kuidas s\u00f5lmede vahel koosk\u00f5lastamine toimub. See on vajalik, et osata k\u00e4sitsi lahendada tekkivaid probleeme.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/ea4162df3561d2ea7001f2ef6788eaaa.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas ma l\u00e4henen diagnostika k\u00fcsimusele? Kuidas on kujunenud, et t\u00f6\u00f6tame erinevate klientidega ja ELK virnat keegi ei kasuta, mist\u00f5ttu tuleb logisid uurida, avades 6 konsooli ja 2 vahelehte. \u00dchel vahelehel on Patroni logid iga s\u00f5lme jaoks, teisel vahelehel on Consuli v\u00f5i vajadusel Postgrese logid. Diagnoosimine on v\u00e4ga keeruline. <\/p>\n<p><\/p>\n<p>Milliseid l\u00e4henemisi ma olen v\u00e4lja t\u00f6\u00f6tanud? Esiteks, ma alati vaatan, millal failis\u00fcsteem muutus. See on minu jaoks tee \u00e4\u00e4res. Vaatan, mis juhtus enne failivahetust, selle ajal ja p\u00e4rast failivahetust. Failivahetusel on kaks m\u00e4rgist: alguse ja l\u00f5pu aeg. <\/p>\n<p><\/p>\n<p>J\u00e4tkan logide vaatamist kuni failivahetuseni, mis toimus enne failivahetust, st otsin p\u00f5hjuseid, miks failivahetus juhtus. <\/p>\n<p><\/p>\n<p>See annab \u00fclevaate sellest, mis toimus ja mida tulevikus teha, et selliseid olukordi ei tekiks (ja seega ei toimuks failivahetust).<\/p>\n<p><\/p>\n<p>Kuhu me tavaliselt vaatame? Mina vaatan:<\/p>\n<p><\/p>\n<ul>\n<li>Esiteks Patroni logisid. <\/li>\n<li>Seej\u00e4rel vaatan Postgrese logisid v\u00f5i DCS logisid, s\u00f5ltuvalt sellest, mida olen Patroni logides leidnud. <\/li>\n<li>Ka s\u00fcsteemi logid annavad vahel arusaama, mis oli failivahetuse p\u00f5hjus. <\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/a53618e366020e1a550d852fc308c188.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Kuidas ma suhtub Patronisse? Patronisse suhtub v\u00e4ga h\u00e4sti. Minu arvates on see parim, mis praegu olemas on. Tunnen palju teisi tooteid. Need on Stolon, Repmgr, Pg_auto_failover, PAF. 4 t\u00f6\u00f6riista. Olen neid k\u00f5iki proovinud. Patroni meeldis mulle k\u00f5ige rohkem. <\/p>\n<p><\/p>\n<p>Kui keegi k\u00fcsib: \u201eKas ma soovitaksin Patronit?\u201c, siis \u00fctlen, et jah, sest Patron meeldib mulle. Ja tundub, et olen \u00f5ppinud seda h\u00e4sti seadistama. <\/p>\n<p><\/p>\n<p>Kui teid huvitab, millised probleemid v\u00f5ivad veel esineda Patroniga, peale nende, mida olen maininud, saate alati minna lehele <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/zalando\/patroni\/issues\/\">issues<\/a><\/noindex> GitHubis on palju erinevaid lugusid ja seal arutatakse palju huvitavaid probleeme. L\u00f5puks on seal v\u00e4lja toodud ja lahendatud ka m\u00f5ned vead, nii et see on huvitav lugemine. <\/p>\n<p><\/p>\n<p>Seal on huvitavaid lugusid sellest, kuidas inimesed endale jalga lasevad tulistada. V\u00e4ga \u00f5petlik. Loed ja m\u00f5istad, et seda ei peaks tegema. Panin endale m\u00e4rkme. <\/p>\n<p><\/p>\n<p>Soovin jagada suurt t\u00e4nu ettev\u00f5ttele Zalando, et nad toetavad seda projekti, eriti Alexander Kukushkinile ja Alexei Kliukinile. Alexei Kliukin on \u00fcks kaasautor, kes ei t\u00f6\u00f6ta enam Zalando juures, kuid need on kaks inimest, kes alustasid selle tootega. <\/p>\n<p><\/p>\n<p>Ja ma arvan, et Patroni on t\u00f5eliselt \u00e4ge t\u00f6\u00f6riist. Olen rahul, et see olemas on, see on huvitav. Suur ait\u00e4h k\u00f5igile kaasautoritele, kes kirjutavad Patroni jaoks plaane. Loodan, et Patroni muutub vananedes \u00fcha k\u00fcpsemaks, \u00e4gedamaks ja t\u00f6\u00f6kindlamaks. See on juba t\u00f6\u00f6kindel, kuid loodan, et see muutub veel paremaks. Niisiis, kui plaanite Patronit kasutada, siis \u00e4rge kartke. See on hea lahendus, mida saate rakendada ja kasutada. <\/p>\n<p><\/p>\n<p>Sellega on k\u00f5ik. Kui teil on k\u00fcsimusi, k\u00fcsige.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"Patroni ebafailide lood v\u00f5i kuidas oma PostgreSQL klastrit kokku kukutada. Aleksei Lesovski\" src=\"\/wp-content\/uploads\/2020\/07\/85c2fef2455999b48413c9fc3b235ed6.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>K\u00fcsimused<\/p>\n<p><\/p>\n<p><em>Ait\u00e4h ettekande eest! Kui p\u00e4rast failis\u00fcsteemi siiski on vaja v\u00e4ga hoolikalt vaatama minna, siis miks me vajame automaatset failis\u00fcsteemi?<\/em> <\/p>\n<p><\/p>\n<p>Kuna see on uus asi. Me oleme sellega tegelenud vaid aasta. Parim on kindel olla. Soovime sisse minna ja vaadata, et k\u00f5ik on t\u00f5epoolest \u00f5igesti toimunud. See on t\u00e4iskasvanu taseme usaldamatuse tase \u2013 parem on \u00fcle kontrollida ja vaadata. <\/p>\n<p><\/p>\n<p><em>N\u00e4iteks, me k\u00e4isime hommikul vaatamas, eks ole?<\/em><\/p>\n<p><\/p>\n<p>Ei hommikul, me tavaliselt saame automaatse failis\u00fcsteemi kohta teada peaaegu kohe. Me saame teateid, n\u00e4eme, et automaatne failis\u00fcsteem on toimunud. Me l\u00e4heme praktiliselt kohe sisse ja vaatame. Kuid k\u00f5ik need kontrollid peaksid olema viidud j\u00e4lgimise tasemele. Kui p\u00f6\u00f6rduda Patroni poole REST API kaudu, on olemas ajalugu. Ajaloo p\u00f5hjal saab vaadata ajam\u00e4rke, millal failis\u00fcsteem toimus. Selle p\u00f5hjal saab teha j\u00e4lgimist. Saame vaadata ajalugu, kui palju seal s\u00fcndmusi on olnud. Kui meie s\u00fcndmuste arv on suurenenud, t\u00e4hendab, et automaatne failis\u00fcsteem on toimunud. Saame minna ja vaadata. V\u00f5i meie automatiseerimine j\u00e4lgimisel kontrollis, et k\u00f5ik meie koopiad on kohal, viivitust ei ole ja k\u00f5ik on h\u00e4sti. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h!<\/em><\/p>\n<p><\/p>\n<p><em>Suur t\u00e4nu suurep\u00e4rase jutu eest! Kui me viime DCS klastrit kaugele Postgres klastrist, kas siis tuleb ka seda klastrit perioodiliselt hooldada? Millised on parimad tavad selle osas, et osad DCS klastrist tuleb v\u00e4lja l\u00fclitada, midagi nendega teha jne? Kuidas kogu see konstruktsioon sel ajal t\u00f6\u00f6tab? Ja kuidas need asjad teostada?<\/em><\/p>\n<p><\/p>\n<p>\u00dchele ettev\u00f5ttele tuli koostada probleemide matriits, et m\u00f5ista, mis juhtub, kui \u00fcks v\u00f5i mitu komponenti eba\u00f5nnestub. Selle matriitsi p\u00f5hjal vaatame j\u00e4rjestikku l\u00e4bi k\u00f5ik komponendid ja koostame stsenaariume, mis juhtub nende komponentide rike korral. Vastavalt sellele on iga rikke stsenaariumi jaoks v\u00f5imalik koostada taastamisplaan. DCS puhul on see osa standardsetest infrastruktuuridest. Administraator tegeleb selle haldamisega, ja me toetume juba halduritele, kes seda haldavad, ning nende v\u00f5imele seda olukordades parandada. Kui DCS-d \u00fcldse ei ole, siis korraldame selle juurutamise meie, kuid ei j\u00e4lgi selle eest v\u00e4ga hoolikalt, kuna me ei vasta infrastruktuuri eest, vaid anname soovitusi selle kohta, kuidas ja mida j\u00e4lgida. <\/p>\n<p><\/p>\n<p><em>Nii et, kas ma sain \u00f5igesti aru, et tuleb v\u00e4lja l\u00fclitada Patroni, v\u00e4lja l\u00fclitada failivaatleja ja l\u00f5petada k\u00f5ik tegevused enne, kui teeme midagi hostidega?<\/em><\/p>\n<p><\/p>\n<p>See s\u00f5ltub sellest, kui palju s\u00f5lmi on DCS-klusteris. Kui s\u00f5lmi on palju ja me katkestame vaid \u00fche s\u00f5lme (replika), siis kluster s\u00e4ilitab kvoorumi. Patroni j\u00e4\u00e4b t\u00f6\u00f6v\u00f5imeliseks ja mitte midagi ei aktiveeru. Kui teeme keerulisi toiminguid, mis m\u00f5jutavad rohkem s\u00f5lmi ja mille puudumine v\u00f5ib kvoorumi rikkuda, siis \u2013 jah, v\u00f5ib-olla tasub Patroni pausile panna. Selleks on vastav k\u00e4sk \u2013 patronictl pause, patronictl resume. Me lihtsalt paneme pausile ja autofailivaatleja ei aktiveeru sel ajal. Teeme DCS-klusteris hooldust\u00f6id, siis eemaldame pausi ja j\u00e4tkame elu.<\/p>\n<p><\/p>\n<p><em>Ait\u00e4h palju!<\/em><\/p>\n<p><\/p>\n<p><em>Suur t\u00e4nu ettekande eest! Kuidas toote meeskond suhtub andmete kaotsiminekusse?<\/em> <\/p>\n<p><\/p>\n<p>Toote meeskond on \u00fcksk\u00f5ikne, aga meeskonnajuhid on mures. <\/p>\n<p><\/p>\n<p><em>Millised garantiiid seal on?<\/em><\/p>\n<p><\/p>\n<p>Garantiide tagamine on v\u00e4ga keeruline. Aleksandr Kukushkinilt on olemas ettekande \"Kuidas arvutada RPO ja RTO\", st taastamisaeg ja kui palju andmeid v\u00f5ime kaotada. Ma arvan, et peaksime need slaidid leidma ja uurima. M\u00e4letan, et seal on spetsiifilised sammud, kuidas neid asju arvutada. Kui palju tehinguid me v\u00f5ime kaotada, kui palju andmeid me v\u00f5ime kaotada. \u00dche v\u00f5imalusena saame kasutada s\u00fcnkroonset replikatsiooni Patroni tasemel, kuid see on ka kahe teraga m\u00f5\u00f5k: kas meil on andmete usaldusv\u00e4\u00e4rsus v\u00f5i kaotame kiirusest. On olemas s\u00fcnkroonne replikatsioon, kuid see ei taga ka 100% -list kaitset andmete kaotamise eest.<\/p>\n<p><\/p>\n<p><em>Aleksei, ait\u00e4h suurep\u00e4rase ettekande eest! Kas teil on kogemusi Patroni kasutamisel nulltaseme kaitse jaoks? St koos s\u00fcnkroonse standby-ga? See on esimene k\u00fcsimus. Ja teine k\u00fcsimus. Te olete kasutanud erinevaid lahendusi. Me kasutasime Repmgr, kuid ilma automaatfailoverita ja n\u00fc\u00fcd plaanime autot \u00fchendamist failoveriga. Me kaalume Patronit kui alternatiivset lahendust. Mida te saate \u00f6elda Patroni plusside kohta v\u00f5rreldes Repmgr-iga?<\/em><\/p>\n<p><\/p>\n<p>Esimene k\u00fcsimus puudutas s\u00fcnkroonilisi replikaate. Meil ei kasuta keegi s\u00fcnkroonilist replikatsiooni, kuna see tekitab k\u00f5igis hirmu (M\u00f5ned kliendid juba kasutavad, ega ole saanud tootlikkuse osas mingeid probleeme - <em>Ettekanne m\u00e4rkmed<\/em>). Kuid oleme endale v\u00e4lja t\u00f6\u00f6tanud reegli, et s\u00fcnkroonilise replikatsiooniga klastris peavad olema v\u00e4hemalt kolm s\u00f5lme, sest kui meil on kaks s\u00f5lme ja kui peamine v\u00f5i replikatsioon murdub, siis Patroni viib selle s\u00f5lme Standalone-re\u017eiimi, et rakendus saaks edasi t\u00f6\u00f6tada. Sel juhul on andmete kadumise riskid.<\/p>\n<p><\/p>\n<p>Teise k\u00fcsimuse osas oleme kasutanud Repmgr'i ja kasutame seda endiselt osades klientides ajaloolistel p\u00f5hjustel. Mis on \u00f6elda? Patronis on automaatne failikuulamine olemas juba vaikimisi, Repmgris tuleb automaatne failikuulamine aga sisse l\u00fclitada eraldi funktsioonina. Peame k\u00e4ivitama Repmgr daemon'i igas s\u00f5lmes ja siis saame automaatse failikuulamise seadistada. <\/p>\n<p><\/p>\n<p>Repmgr kontrollib \u2013 kas Postgres s\u00f5lmed on elus. Repmgr protsessid kontrollivad teineteise olemasolu, mis ei ole v\u00e4ga efektiivne l\u00e4henemine, kuna v\u00f5ivad esineda keerulised olukorrad v\u00f5rgu isolatsioonis, kus suur Repmgr klaster v\u00f5ib laguneda mitmeks v\u00e4iksemaks ja j\u00e4tkata toimimist. Olen ammu Repmgr'i j\u00e4lginud, v\u00f5ib-olla on nad selle probleemi lahendanud... aga v\u00f5ib-olla ka mitte. Info edastamine kihi seisundist DCS-i, nagu teeb Stolon v\u00f5i Patroni, on k\u00f5ige eluj\u00f5ulisem variant. <\/p>\n<p><\/p>\n<p><em>Aleksei, mul on k\u00fcsimus, mis v\u00f5ibolla on algaja oma. Te t\u00f5ite \u00fches esimeses DCS-i n\u00e4ites kohalikult masinalt kaugs\u00f5lme. Me m\u00f5istame, et v\u00f5rk on asi, millel on oma erip\u00e4rad, see eksisteerib iseseisvalt. Ja mis juhtub, kui mingil p\u00f5hjusel DCS-klaster muutub k\u00e4ttesaamatuks? P\u00f5hjuseid ei hakka ma nimetama, neid v\u00f5ib olla palju: alates vigasest v\u00f5rguh\u00e4\u00e4lestusest kuni reaalse probleemini.<\/em> <\/p>\n<p><\/p>\n<p>Ma ei launud seda valjult, kuid DCS-kloon peab olema ka talitlush\u00e4irete vastu vastupidav, st see peab koosnema paarist arvutist, et kvoorum saaks kokku tulla. Mis juhtub, kui DCS-kloon muutub k\u00e4ttesaamatuks v\u00f5i ei suuda kvoorumit kokku kutsuda, st mingisugune v\u00f5rgu jagunemine v\u00f5i node'id eba\u00f5nnestuvad? Sel juhul l\u00e4heb Patroni klaster read only re\u017eiimi. Patroni klaster ei suuda m\u00e4\u00e4rata klastrite seisundit ega seda, mida teha. Ta ei suuda DCS-iga \u00fchendust v\u00f5tta ja salvestada klastris uut olekut, seet\u00f5ttu l\u00e4heb kogu klaster read only re\u017eiimi. Ta ootab kas operaatori k\u00e4sitsi sekkumist v\u00f5i kuni DCS taastub.<\/p>\n<p><\/p>\n<p><em>\u00dcksk\u00f5ik kuidas \u00f6elda, DCS muutub meie jaoks teenuseks, mis on sama oluline kui ise andmebaas?<\/em><\/p>\n<p><\/p>\n<p>Jah, jah. Paljudes kaasaegsetes ettev\u00f5tetes on teenuste avastamine (Service Discovery) lahutamatu osa infrastruktuurist. See rakendatakse isegi enne, kui andmebaasid infrastruktuuris olemas on. \u00dctleme nii, et infrastruktuur k\u00e4ivitati, andmekeskuses oli k\u00f5ik seadistatud, ja meil oli kohe teenuste avastamine. Kui see on Consul, siis saab selle pealt \u00fcles ehitada ka DNS. Kui see on Etcd, siis v\u00f5ib see olla osa Kubernetes'i klastrist, kus k\u00f5ik muu juba seadistatakse. Minu arvates on teenuste avastamine juba lahutamatu osa kaasaegsetest infrastruktuuridest. Ja sellest m\u00f5eldakse palju varem, kui andmebaasidest. <\/p>\n<p><\/p>\n<p><em>Ait\u00e4h!<\/em><\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/512768\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c Patroni \u2014 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 High Availability \u0434\u043b\u044f PostgreSQL. \u041d\u043e Patroni \u2014 \u044d\u0442\u043e \u043b\u0438\u0448\u044c template, \u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 (\u0447\u0442\u043e, \u0432 \u043e\u0431\u0449\u0435\u043c, \u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438). \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 Patroni \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043b\u0430\u0431\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u044d\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u0430\u043a \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":90104,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-90103","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c Patroni \u2014 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 High Availability \u0434\u043b\u044f PostgreSQL. \u041d\u043e Patroni \u2014 \u044d\u0442\u043e \u043b\u0438\u0448\u044c template, \u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 (\u0447\u0442\u043e, \u0432 \u043e\u0431\u0449\u0435\u043c, \u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438). \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 Patroni \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043b\u0430\u0431\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u044d\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u0430\u043a \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439\" \/>\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\/et\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\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\udd47Patroni Failure Stories or How to crash your PostgreSQL cluster. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c Patroni \u2014 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 High Availability \u0434\u043b\u044f PostgreSQL. \u041d\u043e Patroni \u2014 \u044d\u0442\u043e \u043b\u0438\u0448\u044c template, \u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 (\u0447\u0442\u043e, \u0432 \u043e\u0431\u0449\u0435\u043c, \u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438). \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 Patroni \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043b\u0430\u0431\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u044d\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u0430\u043a \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij\" \/>\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-07-29T11:42:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-29T11:42:32+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\udd47Patroni rikke lood v\u00f5i kuidas kokku puutuda teie PostgreSQL klastri kokkuvarisemisega. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster","description":"Patroni peamine eesm\u00e4rk on tagada PostgreSQL puhul k\u00f5rge saadavus (High Availability). Kuid Patroni on lihtsalt mall, mitte valmis t\u00f6\u00f6riist (nagu dokumentatsioonis \u00f6eldud). Esmapilgul, seadistades Patroni testimise laboratooriumis, v\u00f5ib n\u00e4ha, kui hea see t\u00f6\u00f6riist on ja kuidas ta kergesti meie katseid klastrit kokku kukutada k\u00e4sitleb. Kuid praktikas tootmisprotsessis.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","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\udd47Patroni Failure Stories or How to crash your PostgreSQL cluster. \u0410\u043b\u0435\u043a\u0441\u0435\u0439 \u041b\u0435\u0441\u043e\u0432\u0441\u043a\u0438\u0439 | ProHoster","og:description":"\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0446\u0435\u043b\u044c Patroni \u2014 \u044d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 High Availability \u0434\u043b\u044f PostgreSQL. \u041d\u043e Patroni \u2014 \u044d\u0442\u043e \u043b\u0438\u0448\u044c template, \u0430 \u043d\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 (\u0447\u0442\u043e, \u0432 \u043e\u0431\u0449\u0435\u043c, \u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438). \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 Patroni \u0432 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043b\u0430\u0431\u0435, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u044d\u0442\u043e \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043a\u0430\u043a \u043e\u043d \u043b\u0435\u0433\u043a\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0448\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0440\u0430\u0437\u0432\u0430\u043b\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0442\u0435\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/patroni-failure-stories-or-how-to-crash-your-postgresql-cluster-aleksej-lesovskij","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-07-29T11:42:32+00:00","article:modified_time":"2020-07-29T11:42:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"90103","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:58:48","updated":"2026-02-09 16:50:35"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/90103","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=90103"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/90103\/revisions"}],"predecessor-version":[{"id":158759,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/90103\/revisions\/158759"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/90104"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=90103"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=90103"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=90103"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}