Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Tujuan utama Patroni nyaéta nyayogikeun Kasadiaan Tinggi pikeun PostgreSQL. Tapi Patroni ngan template, teu alat siap-dijieun (anu, sacara umum, ceuk dina dokuméntasi). Dina glance kahiji, sanggeus nyetél Patroni di lab test, anjeun tiasa ningali naon alat hébat éta sarta kumaha gampang eta handles usaha urang pikeun megatkeun klaster. Nanging, dina prakna, dina lingkungan produksi, sadayana henteu salawasna kajantenan saé sareng elegan sapertos di laboratorium tés.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kuring gé ngabejaan Anjeun saeutik ngeunaan diri. Kuring ngamimitian salaku administrator sistem. Digarap dina ngembangkeun web. Kuring parantos damel di Data Egret ti saprak 2014. Pausahaan kalibet dina konsultasi dina widang Postgres. Sarta kami ngawula persis Postgres, sarta kami gawé bareng Postgres unggal poé, sangkan boga kaahlian béda patali operasi.

Sareng dina ahir 2018, urang mimiti lalaunan nganggo Patroni. Jeung sababaraha pangalaman geus akumulasi. Kami kumaha waé didiagnosis, nyetél éta, dugi ka prakték pangsaéna. Sareng dina laporan ieu kuring bakal ngobrolkeun aranjeunna.

Salian ti Postgres, kuring resep Linux. Kuring resep nyodok di dinya tur ngajalajah, Kuring resep ngumpulkeun cores. Abdi bogoh virtualization, peti, docker, Kubernetes. Sadaya ieu dipikaresep ku kuring, sabab kabiasaan admin heubeul mangaruhan. Kuring resep nungkulan monitoring. Sareng kuring resep hal-hal postgres anu aya hubunganana sareng administrasi, nyaéta réplikasi, cadangan. Sareng dina waktos senggang kuring nyerat dina Go. Kami lain insinyur software, Kuring ngan nulis keur kuring sorangan di Go. Sarta méré kuring pelesir.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

  • Jigana loba anjeun terang yen Postgres teu boga HA (Kasadiaan High) out of the box. Pikeun meunang HA, Anjeun kudu masang hiji hal, ngonpigurasikeun eta, nyieun usaha jeung meunang eta.
  • Aya sababaraha alat jeung Patroni salah sahijina nu solves HA geulis tiis tur kacida alusna. Tapi ku nempatkeun éta sadayana dina lab tés sareng ngajalankeun éta, urang tiasa ningali yén éta sadayana tiasa dianggo, urang tiasa ngahasilkeun sababaraha masalah, tingali kumaha Patroni ngalayanan aranjeunna. Sareng urang bakal ningali yén éta sadayana tiasa dianggo hébat.
  • Tapi dina prakna, urang nyanghareupan masalah anu béda. Sarta kuring bakal ngobrol ngeunaan masalah ieu.
  • Kuring bakal nyarioskeun ka anjeun kumaha urang didiagnosis, naon anu urang tweake - naha éta ngabantosan urang atanapi henteu.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

  • Kuring moal ngabejaan ka maneh kumaha install Patroni, sabab anjeun tiasa google dina Internét, anjeun tiasa ningali dina file konfigurasi ngartos kumaha eta sadayana dimimitian, kumaha eta geus ngonpigurasi. Anjeun tiasa ngartos skéma, arsitéktur, milarian inpormasi ngeunaan éta dina Internét.
  • Kuring moal ngobrol ngeunaan pangalaman batur. Kuring ngan bakal ngobrol ngeunaan masalah anu urang nyanghareupan.
  • Sareng kuring moal ngobrol ngeunaan masalah anu aya di luar Patroni sareng PostgreSQL. Upami, contona, aya masalah anu aya hubunganana sareng balancing, nalika kluster urang ambruk, kuring moal ngobrol ngeunaan éta.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng bantahan leutik sateuacan urang ngamimitian laporan urang.

Sadaya masalah ieu nu urang encountered, urang tadi aranjeunna dina mimiti 6-7-8 bulan operasi. Kana waktosna, urang dugi ka prakték pangsaéna internal urang. Sareng masalah urang ngaleungit. Ku alatan éta, laporan ieu diumumkeun kira genep bulan ka tukang, nalika éta sakabéh seger dina sirah kuring sarta kuring inget eta sadayana sampurna.

Dina kursus Nyiapkeun laporan, kuring geus diangkat postmortems heubeul, nempo log. Sareng sababaraha detil tiasa hilap, atanapi sababaraha detil henteu tiasa ditalungtik sapinuhna nalika nganalisa masalah, ku kituna dina sababaraha titik sigana masalahna henteu dianggap sapinuhna, atanapi aya sababaraha kakurangan inpormasi. Janten kuring nyuhunkeun anjeun hapunten kanggo waktos ieu.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Naon Patroni?

  • Ieu citakan pikeun ngawangun HA. Éta naon nyebutkeun dina dokuméntasi. Sareng tina sudut pandang kuring, ieu mangrupikeun klarifikasi anu leres pisan. Patroni sanés pélor pérak anu bakal ngabéréskeun sadaya masalah anjeun, nyaéta, anjeun kedah usaha supados tiasa dianggo sareng kéngingkeun kauntungan.
  • Ieu mangrupikeun jasa agén anu dipasang dina unggal jasa database sareng mangrupikeun jenis sistem init pikeun Postgres anjeun. Ieu dimimitian Postgres, eureun, restarts, reconfigures, sarta ngarobah topologi klaster Anjeun.
  • Sasuai, pikeun nyimpen kaayaan klaster, ngagambarkeun ayeuna, sakumaha eta Sigana mah sababaraha jenis gudang diperlukeun. Sareng tina sudut pandang ieu, Patroni nyandak jalan pikeun nyimpen kaayaan dina sistem éksternal. Éta sistem panyimpenan konfigurasi anu disebarkeun. Éta tiasa Etcd, Konsul, ZooKeeper, atanapi kubernetes Etcd, nyaéta salah sahiji pilihan ieu.
  • Sareng salah sahiji fitur tina Patroni nyaéta anjeun kéngingkeun autofiler tina kotak, ngan ukur ku nyetél éta. Upami urang nyandak Repmgr pikeun ngabandingkeun, maka filer kalebet di dinya. Kalayan Repmgr, urang nampi switchover, tapi upami urang hoyong autofiler, maka urang kedah ngonpigurasikeun éta ogé. Patroni parantos ngagaduhan autofiler tina kotak.
  • Jeung aya loba hal séjén. Contona, pangropéa tina konfigurasi, tuang réplika anyar, cadangan, jsb Tapi ieu téh saluareun ruang lingkup laporan, Kuring moal ngobrol ngeunaan eta.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sarta hasil leutik éta tugas utama Patroni pikeun ngalakukeun hiji autofile ogé sarta reliably ambéh klaster urang tetep operasional sarta aplikasi teu aya bewara parobahan dina topologi klaster.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Tapi nalika urang mimitian nganggo Patroni, sistem kami janten langkung rumit. Upami sateuacana urang ngagaduhan Postgres, teras nalika nganggo Patroni kami nampi Patroni nyalira, kami nampi DCS dimana kaayaan disimpen. Sareng sadayana kedah dianggo kumaha waé. Janten naon anu salah?

Bisa megatkeun:

  • Postgres tiasa rusak. Éta tiasa janten master atanapi réplika, salah sahijina tiasa gagal.
  • The Patroni sorangan bisa megatkeun.
  • DCS dimana kaayaan disimpen tiasa rusak.
  • Jeung jaringan bisa megatkeun.

Sadaya titik ieu kuring bakal mertimbangkeun dina laporan.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kuring bakal mertimbangkeun kasus sabab janten langkung kompleks, sanés tina sudut pandang yén kasus éta ngalibatkeun seueur komponén. Sareng tina sudut pandang parasaan subjektif, yén kasus ieu sesah pikeun kuring, sesah ngabongkar éta ... sareng sabalikna, sababaraha kasus éta hampang sareng gampang ngabongkar éta.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng kasus anu pangpayunna anu panggampangna. Ieu mangrupikeun kasus nalika urang nyandak klaster database sareng nyebarkeun gudang DCS kami dina klaster anu sami. Ieu kasalahan paling umum. Ieu mangrupikeun kasalahan dina ngawangun arsitéktur, nyaéta, ngagabungkeun komponén anu béda dina hiji tempat.

Janten, aya filer, hayu urang nungkulan naon anu lumangsung.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sarta di dieu urang museurkeun nalika filer lumangsung. Nyaéta, urang kabetot dina momen ieu nalika kaayaan klaster robah.

Tapi filer teu salawasna sakedapan, i.e. teu butuh sagala unit waktu, éta bisa ditunda. Éta tiasa tahan panjang.

Ku alatan éta, éta boga waktu mimiti jeung hiji waktu tungtung, i.e. mangrupa acara terus-terusan. Sareng urang ngabagi sadaya kajadian kana tilu interval: urang gaduh waktos sateuacan filer, salami filer sareng saatos filer. Hartina, urang nganggap sagala kajadian dina timeline ieu.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Jeung hal kahiji, nalika filer kajantenan, urang néangan anu ngabalukarkeun naon anu lumangsung, naon anu ngabalukarkeun naon ngarah ka filer nu.

Lamun urang tingali dina log, aranjeunna bakal log Patroni Palasik. Anjeunna nyarioskeun ka urang yén server parantos janten master, sareng peran master parantos lulus kana titik ieu. Di dieu eta disorot.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Salajengna, urang kedah ngartos naha filer kajantenan, nyaéta naon kajadian anu nyababkeun peran master pindah ti hiji titik ka titik anu sanés. Sareng dina hal ieu, sadayana saderhana. Urang boga kasalahan dina interacting jeung sistem gudang. Master sadar yén anjeunna henteu tiasa damel sareng DCS, nyaéta, aya sababaraha masalah sareng interaksi. Sareng anjeunna nyarios yén anjeunna henteu tiasa deui janten master sareng mundur. Baris ieu "demoted diri" nyebutkeun persis éta.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Upami urang ningali kajadian anu sateuacanna filer, urang tiasa ningali alesan anu janten masalah pikeun neraskeun wizard.

Lamun urang nempo log Patroni, urang bakal nempo yén urang boga loba kasalahan, timeouts, i.e. agén Patroni teu tiasa dianggo kalayan DCS. Dina hal ieu, ieu agén Konsul, anu komunikasi dina port 8500.

Sareng masalahna di dieu nyaéta Patroni sareng pangkalan data dijalankeun dina host anu sami. Sareng server Konsul diluncurkeun dina titik anu sami. Ku nyieun beban dina server, urang dijieun masalah pikeun server Konsul ogé. Aranjeunna teu tiasa komunikasi leres.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Saatos sababaraha waktos, nalika beban turun, Patroni kami tiasa komunikasi deui sareng agén. Karya normal diteruskeun. Sareng server Pgdb-2 anu sami janten master deui. Nyaéta, aya hiji flip leutik, alatan nu node pasrah kakawasaan master, lajeng nyandak eta leuwih deui, nyaeta, sagalana balik sakumaha anu kasebut.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng ieu tiasa dianggap salaku alarm palsu, atanapi tiasa dianggap yén Patroni ngalakukeun sadayana leres. Nyaéta, anjeunna sadar yén anjeunna henteu tiasa ngajaga kaayaan klaster sareng ngaleungitkeun otoritasna.

Sareng di dieu masalahna timbul kusabab kanyataan yén server Konsul aya dina hardware anu sami sareng dasarna. Sasuai, beban naon waé: naha éta beban dina disk atanapi prosesor, éta ogé mangaruhan interaksi sareng kluster Konsul.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sarta kami mutuskeun yén éta teu kudu hirup babarengan, kami disadiakeun klaster misah pikeun Konsul. Sareng Patroni parantos damel sareng Konsul anu kapisah, nyaéta, aya kluster Postgres anu misah, kluster Konsul anu kapisah. Ieu mangrupakeun instruksi dasar ngeunaan cara mawa sarta ngajaga sagala hal ieu ambéh teu hirup babarengan.

Salaku pilihan, anjeun tiasa pulas parameter ttl, loop_wait, retry_timeout, nyaéta coba salamet puncak beban jangka pondok ieu ku cara ningkatkeun parameter ieu. Tapi ieu sanés pilihan anu paling cocog, sabab beban ieu tiasa panjang dina waktosna. Sareng urang ngan saukur bakal ngalangkungan wates ieu parameter ieu. Jeung nu bisa jadi teu bener mantuan.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Masalah kahiji, sakumaha anjeun ngartos, basajan. Kami nyandak sareng nempatkeun DCS sareng dasarna, kami ngagaduhan masalah.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Masalah kadua sami sareng anu kahiji. Éta sami sareng urang gaduh deui masalah interoperabilitas sareng sistem DCS.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Lamun urang nempo log, urang bakal nempo yén urang deui boga kasalahan komunikasi. Sarta Patroni nyebutkeun Abdi teu tiasa berinteraksi sareng DCS jadi master ayeuna mana kana mode replica.

Master heubeul janten replica a, didieu Patroni jalan kaluar, sakumaha kuduna. Ngajalankeun pg_rewind pikeun mundurkeun log urus teras sambungkeun ka master anyar pikeun nyekel master anyar. Di dieu Patroni jalan kaluar, sakumaha sakuduna.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Di dieu urang kedah milarian tempat anu sateuacanna filer, nyaéta kasalahan anu nyababkeun urang gaduh filer. Sareng dina hal ieu, log Patroni cukup merenah pikeun dianggo. Anjeunna nyerat pesen anu sami dina interval anu tangtu. Sareng upami urang mimiti ngagulung log ieu gancang, maka urang bakal ningali tina log yén log parantos robih, anu hartosna sababaraha masalah parantos ngamimitian. Urang gancang balik ka tempat ieu, tingali naon kajadian.

Sareng dina kaayaan normal, log katingali sapertos kieu. Nu boga konci dipariksa. Sareng upami anu gaduh, contona, parantos robih, maka sababaraha acara tiasa kajantenan anu kedah direspon ku Patroni. Tapi dina hal ieu, kami henteu kunanaon. Kami milarian tempat dimana kasalahan dimimitian.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng ngagulung ka titik dimana kasalahan mimiti muncul, urang ningali yén urang ngagaduhan fileover otomatis. Sarta saprak kasalahan urang anu patali jeung interaksi jeung DCS jeung bisi urang dipaké Konsul, urang ogé kasampak dina log Konsul, naon anu lumangsung di dinya.

Sacara kasar ngabandingkeun waktos filer sareng waktos dina log Konsul, urang ningali yén tatangga urang di kluster Konsul mimiti ragu kana ayana anggota kluster Konsul anu sanés.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng upami anjeun ogé ningali log agén Konsul anu sanés, anjeun ogé tiasa ningali yén sababaraha jinis runtuh jaringan lumangsung di dinya. Sareng sadaya anggota kluster Konsul ngaragukeun ayana masing-masing. Sareng ieu mangrupikeun dorongan pikeun filer.

Lamun nempo naon anu lumangsung saméméh kasalahan ieu, anjeun bisa nempo yén aya sagala sorts kasalahan, contona, deadline, RPC ragrag, nyaeta, aya jelas sababaraha jenis masalah dina interaksi anggota kluster Konsul saling. .

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Jawaban pangbasajanna nyaéta ngalereskeun jaringan. Tapi keur kuring, nangtung dina podium, éta gampang ngomong ieu. Tapi kaayaanana sapertos anu henteu salawasna nasabah tiasa mampuh ngalereskeun jaringan. Anjeunna bisa hirup di DC sarta bisa jadi teu bisa ngalereskeun jaringan, mangaruhan alat. Jeung saterusna sababaraha pilihan séjén diperlukeun.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Aya pilihan:

  • Pilihan pangbasajanna, anu ditulis, dina pamanggih kuring, sanajan dina dokuméntasi, nyaéta nganonaktipkeun cék Konsul, nyaéta, ngan saukur lulus hiji Asép Sunandar Sunarya kosong. Sarta kami ngabejaan agén Konsul teu make cék nanaon. Kalayan cék ieu, urang tiasa malire badai jaringan ieu sareng henteu ngamimitian filer.
  • pilihan séjén nyaéta ganda dipariksa raft_multiplier. Ieu parameter tina server Konsul sorangan. Sacara standar, disetel ka 5. Nilai ieu disarankeun ku dokuméntasi pikeun lingkungan pementasan. Kanyataanna, ieu mangaruhan frékuénsi olahtalatah antara anggota jaringan Konsul. Kanyataanna, parameter ieu mangaruhan laju komunikasi layanan antara anggota klaster Konsul. Sareng pikeun produksi, éta parantos disarankeun pikeun ngirangan éta supados titik-titik tukeur pesen langkung sering.
  • Pilihan anu sanés anu kami laksanakeun nyaéta ningkatkeun prioritas prosés Konsul diantara prosés anu sanés pikeun penjadwal prosés sistem operasi. Aya parameter "saé" sapertos kitu, éta ngan ukur nangtukeun prioritas prosés anu dipertimbangkeun ku penjadwal OS nalika ngajadwalkeun. Urang ogé geus ngurangan nilai nice pikeun agén Konsul, i.e. ngaronjat prioritas ambéh sistem operasi méré prosés Konsul leuwih waktos pikeun digawé tur ngaéksekusi kode maranéhna. Dina kasus urang, ieu direngsekeun masalah urang.
  • Pilihan séjén nyaéta henteu nganggo Konsul. Kuring boga babaturan anu supporter badag Etcd. Sareng urang sering ngabantah sareng anjeunna mana anu langkung saé Etcd atanapi Konsul. Tapi dina hal anu langkung saé, urang biasana satuju sareng anjeunna yén Konsul gaduh agén anu kedah dijalankeun dina unggal titik kalayan pangkalan data. Nyaéta, interaksi Patroni sareng kluster Konsul ngalangkungan agén ieu. Sareng agén ieu janten bottleneck. Upami aya kajadian ka agén, maka Patroni henteu tiasa dianggo deui sareng kluster Konsul. Sareng ieu mangrupikeun masalahna. Henteu aya agén dina rencana Etcd. Patroni tiasa damel langsung sareng daptar server Etcd sareng parantos komunikasi sareng aranjeunna. Dina hal ieu, upami anjeun nganggo Etcd di perusahaan anjeun, maka Etcd sigana bakal janten pilihan anu langkung saé tibatan Konsul. Tapi kami di konsumén urang sok dibatesan ku naon anu dipilih sareng dianggo ku klien. Sarta kami boga Konsul keur bagian paling pikeun sakabéh klien.
  • Jeung titik panungtungan nyaéta pikeun ngarévisi nilai parameter. Urang tiasa ngangkat parameter ieu dina harepan yén masalah jaringan jangka pondok urang bakal pondok sareng henteu turun di luar jangkauan parameter ieu. Ku cara kieu urang bisa ngurangan aggressiveness of Patroni mun autofile lamun sababaraha masalah jaringan lumangsung.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Jigana loba anu ngagunakeun Patroni akrab jeung paréntah ieu.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Paréntah ieu nunjukkeun kaayaan klaster ayeuna. Sarta dina glance kahiji, gambar ieu sigana normal. Kami gaduh master, kami gaduh réplika, teu aya lag réplikasi. Tapi gambar ieu normal persis dugi kami terang yén klaster ieu kudu tilu titik, teu dua.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sasuai, aya autofile. Sareng saatos autofile ieu, réplika kami ngaleungit. Urang kedah terang naha anjeunna ngiles sareng nyandak deui, mulangkeun anjeunna. Sareng urang deui kana log sareng ningali naha urang ngagaduhan fileover otomatis.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Dina hal ieu, replika kadua janten master. Geus aya di dieu.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng urang kedah ningali réplika anu murag sareng anu henteu aya dina kluster. Kami muka log Patroni sareng ningali yén urang ngagaduhan masalah nalika prosés nyambungkeun kluster dina tahap pg_rewind. Pikeun nyambung ka kluster, anjeun kedah mundur log urus, nyuhunkeun log urus anu diperyogikeun ti master, sareng dianggo pikeun nyekel master.

Dina hal ieu, urang teu boga log urus jeung replica teu bisa ngamimitian. Sasuai, urang ngeureunkeun Postgres kalayan kasalahan. Sarta ku kituna teu aya dina klaster.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Urang kedah ngartos naha éta henteu aya dina kluster sareng naha henteu aya log. Kami angkat ka master énggal sareng ningali naon anu aya dina log. Tétéla yén nalika pg_rewind parantos dilakukeun, aya titik pamariksaan. Jeung sababaraha log urus heubeul ngan diganti ngaranna. Nalika master lami nyobian nyambung ka master énggal sareng naroskeun log ieu, aranjeunna parantos diganti namina, aranjeunna henteu aya.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kuring ngabandingkeun timestaps nalika kajadian ieu lumangsung. Sareng aya bédana sacara harfiah 150 milliseconds, nyaéta, pamariksaan réngsé dina 369 milliseconds, bagéan WAL diganti namina. Sareng sacara harfiah dina 517, saatos 150 milliseconds, mundur dimimitian dina réplika anu lami. Hartina, sacara harfiah 150 milliseconds éta cukup pikeun urang ku kituna replica nu teu bisa nyambung jeung earn.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Naon pilihan na?

Urang mimitina dipaké slot réplikasi. Urang pikir éta alus. Sanajan dina tahap mimiti operasi urang mareuman slot. Ieu seemed kami yén lamun slot ngumpulkeun loba bagéan WAL, urang bisa leupaskeun master. Anjeunna bakal ragrag. Urang ngalaman pikeun sawatara waktu tanpa slot . Sarta kami sadar yen urang kudu slot , urang balik slot .

Tapi aya masalah di dieu, éta nalika master mana anu ka replica nu, ngahapus slot jeung mupus bagéan WAL sapanjang kalawan slot. Sarta pikeun ngaleungitkeun masalah ieu, urang mutuskeun pikeun ngangkat parameter wal_keep_segments. Éta standar ka 8 bagéan. Urang ngangkat ka 1 sarta nempo sabaraha spasi bébas kami. Sarta kami nyumbang 000 gigabyte pikeun wal_keep_segments. Nyaéta, nalika gentos, urang sok gaduh cadangan 16 gigabyte log transaksi dina sadaya titik.

Sareng tambah - éta masih relevan pikeun tugas pangropéa jangka panjang. Hayu urang nyebutkeun urang kudu ngamutahirkeun salah sahiji réplika. Sareng urang hoyong mareuman. Urang kudu ngamutahirkeun software, meureun sistem operasi, hal sejenna. Sareng nalika urang mareuman réplika, slot pikeun réplika éta ogé dipiceun. Sareng upami urang nganggo wal_keep_segments leutik, teras kalayan henteuna réplika anu panjang, log transaksi bakal leungit. Urang bakal ngangkat replica a, eta bakal menta eta log urus dimana dieureunkeun, tapi maranéhna bisa jadi teu on master. Sareng réplika ogé moal tiasa nyambung. Ku alatan éta, urang nyimpen hiji stock badag majalah.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Simkuring boga basis produksi. Geus aya proyék-proyék dina prosés.

Aya filer. Urang asup jeung kasampak - sagalana aya dina urutan, réplika aya di tempat, euweuh réplikasi lag. Henteu aya kasalahan dina log ogé, sadayana aya dina urutan.

Tim produk nyebutkeun yen kudu aya sababaraha data, tapi urang tingali ti hiji sumber, tapi urang teu ningali dina database. Sareng urang kedah ngartos naon anu kajantenan ka aranjeunna.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Ieu jelas yén pg_rewind lasut aranjeunna. Urang langsung ngartos ieu, tapi indit pikeun nempo naon anu lumangsung.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Dina log, urang salawasna bisa manggihan lamun filer kajantenan, anu jadi master, sarta kami bisa nangtukeun saha éta master heubeul jeung iraha manéhna hayang jadi replica a, ie urang peryogi log ieu pikeun manggihan jumlah log transaksi anu. ieu leungit.

master heubeul urang geus rebooted. Sareng Patroni kadaptar dina autorun. Dibuka Patroni. Anjeunna teras ngamimitian Postgres. Langkung tepatna, sateuacan ngamimitian Postgres sareng sateuacan janten réplika, Patroni ngaluncurkeun prosés pg_rewind. Sasuai, anjeunna erased bagian tina log urus, diundeur anyar jeung disambungkeun. Di dieu Patroni digawé pinter, nyaeta, saperti nu diharapkeun. Kluster parantos dibalikeun. Kami ngagaduhan 3 titik, saatos filer 3 titik - sadayana keren.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Urang geus leungit sababaraha data. Sareng urang kedah ngartos sabaraha urang kaleungitan. Urang pilari ngan momen nalika urang boga mundur. Urang tiasa mendakan éta dina éntri jurnal sapertos kitu. Rewind dimimitian, ngalakukeun hiji hal di dinya jeung réngsé.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Urang kudu neangan posisi dina log urus dimana master heubeul antepkeun. Dina hal ieu, ieu tanda. Sareng urang peryogi tanda kadua, nyaéta, jarak dimana master lami béda sareng anu énggal.

Kami nyandak pg_wal_lsn_diff biasa sareng ngabandingkeun dua tanda ieu. Sareng dina hal ieu, urang nampi 17 megabyte. Seueur atanapi sakedik, sadayana mutuskeun pikeun dirina. Kusabab pikeun batur 17 megabytes teu pira, keur batur éta pisan jeung unacceptable. Di dieu, unggal individu nangtukeun sorangan luyu jeung kaperluan bisnis.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Tapi naon anu urang mendakan pikeun diri urang sorangan?

Mimiti, urang kedah mutuskeun pikeun diri urang sorangan - naha urang peryogi Patroni pikeun ngamimitian otomatis saatos reboot sistem? Ieu sering kajadian nu urang kudu indit ka master heubeul, tingali sabaraha jauh anjeunna geus Isro. Panginten mariksa bagéan tina log transaksi, tingali naon anu aya. Sareng ngartos naha urang tiasa leungit data ieu atanapi naha urang kedah ngajalankeun master lami dina modeu mandiri pikeun narik data ieu.

Sareng saatos éta urang kedah mutuskeun naha urang tiasa miceun data ieu atanapi urang tiasa mulangkeunana, sambungkeun titik ieu salaku réplika kana kluster urang.

Sajaba ti éta, aya parameter "maximum_lag_on_failover". Sacara standar, lamun memori abdi ngawula kuring, parameter ieu disetel ka 1 megabyte.

Kumaha anjeunna dianggo? Upami réplika kami mundur ku 1 megabyte data dina lag réplikasi, maka réplika ieu henteu ngiringan pamilihan. Sareng upami ujug-ujug aya fileover, Patroni ningali réplika anu katinggaleun. Mun aranjeunna balik ku angka nu gede ngarupakeun log urus, aranjeunna moal bisa jadi master a. Ieu mangrupikeun fitur kaamanan anu saé anu nyegah anjeun kaleungitan seueur data.

Tapi aya masalah dina éta réplikasi lag dina klaster Patroni na DCS diropéa dina interval nu tangtu. Jigana 30 detik teh nilai ttl standar.

Sasuai, meureun aya kaayaan dimana aya hiji réplikasi lag pikeun réplika di DCS, tapi dina kanyataanana meureun aya lag lengkep beda atawa meureun aya euweuh lag pisan, ie hal ieu teu realtime. Jeung teu salawasna ngagambarkeun gambar nyata. Sareng éta henteu pantes ngalakukeun logika anu saé dina éta.

Sareng résiko kaleungitan salawasna tetep. Sareng dina kasus anu paling parah, hiji rumus, sareng dina kasus rata-rata, rumus anu sanés. Hartina, nalika urang ngarencanakeun palaksanaan Patroni jeung evaluate sabaraha data urang bisa leungit, urang kudu ngandelkeun rumus ieu jeung kira-kira ngabayangkeun sabaraha data urang bisa leungit.

Jeung aya warta alus. Nalika master lami parantos maju, anjeunna tiasa maju kusabab sababaraha prosés latar tukang. Hartina, aya sababaraha jenis autovacuum, manéhna nulis data, disimpen dina log urus. Sarta kami bisa kalayan gampang malire tur leungit data ieu. Teu aya masalah dina ieu.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Na ieu téh kumaha log kasampak lamun maximum_lag_on_failover diatur sarta filer a geus lumangsung, jeung anjeun kudu milih master anyar. Réplika éta nganggap dirina henteu mampuh ngiringan pamilihan. Jeung manehna refuses pikeun ilubiung dina lomba pikeun pamingpin. Sareng anjeunna ngantosan master énggal dipilih, supados teras tiasa nyambung ka éta. Ieu ukuran tambahan ngalawan leungitna data.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Di dieu urang gaduh tim produk anu nyerat yén produkna ngagaduhan masalah sareng Postgres. Dina waktos anu sami, master nyalira henteu tiasa diaksés, sabab henteu sayogi ngalangkungan SSH. Sareng autofile ogé henteu kajantenan.

Host ieu kapaksa reboot. Kusabab reboot, file otomatis kajantenan, sanaos tiasa ngalakukeun file otomatis manual, sakumaha anu ayeuna kuring ngartos. Sareng saatos reboot, urang parantos ningali naon anu urang gaduh sareng master ayeuna.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Dina waktos anu sami, urang terang sateuacanna yén urang ngagaduhan masalah sareng disk, nyaéta, urang parantos terang tina ngawaskeun dimana ngagali sareng naon anu kedah dipilarian.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kami asup kana log postgres, mimiti ningali naon anu lumangsung di dinya. Kami ningali komitmen anu aya salami hiji, dua, tilu detik, anu henteu normal. Urang nempo yén autovacuum urang dimimitian nepi lambat pisan jeung ahéngna. Sareng urang ningali file samentawis dina disk. Hartina, ieu sadayana indikator masalah sareng disk.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Urang nempo kana sistem dmesg (kernel log). Sareng urang ningali yén urang ngagaduhan masalah sareng salah sahiji disk. Subsistem disk éta software Raid. Urang nempo / proc / mdstat sarta nempo yén kami leungit hiji drive. Nyaéta, aya razia 8 disk, urang leungit hiji. Lamun taliti kasampak di slide, lajeng dina kaluaran anjeun bisa nempo yén urang teu boga sde dinya. Di urang, kondisional diomongkeun, disk geus turun kaluar. Ieu nyababkeun masalah disk, sareng aplikasi ogé ngalaman masalah nalika damel sareng klaster Postgres.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng dina hal ieu, Patroni moal ngabantosan urang ku cara naon waé, sabab Patroni henteu ngagaduhan tugas pikeun ngawaskeun kaayaan server, kaayaan disk. Sareng urang kedah ngawas kaayaan sapertos ku ngawaskeun éksternal. Urang gancang ditambahkeun ngawas disk ka ngawaskeun éksternal.

Sareng aya pamikiran sapertos kitu - tiasa anggar atanapi software watchdog ngabantosan urang? Urang ngira yén anjeunna boro bakal mantuan kami dina hal ieu, sabab salila masalah Patroni terus berinteraksi sareng klaster DCS sarta teu ningali masalah nanaon. Hartina, tina sudut pandang DCS sareng Patroni, sadayana saé kalayan kluster, sanaos kanyataanna aya masalah sareng disk, aya masalah sareng kasadiaan pangkalan data.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Dina pamadegan mah, ieu téh salah sahiji masalah strangest nu Kuring geus researched lila pisan, Kuring geus maca loba log, ulang nyokot jeung disebut simulator klaster.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Masalahna éta master heubeul teu bisa jadi replica normal, i.e. Patroni ngamimitian eta, Patroni némbongkeun yén titik ieu hadir salaku replica a, tapi dina waktos anu sareng éta lain replica normal. Ayeuna anjeun bakal nempo naha. Ieu naon Kuring geus diteundeun ti analisis masalah éta.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Na kumaha eta sadayana dimimitian? Ieu dimimitian, sakumaha dina masalah saméméhna, kalawan rem disc. Kami ngagaduhan komitmen sadetik, dua.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Aya putus dina sambungan, i.e., klien anu torn.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Aya blockages of varying severity.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng, sasuai, subsistem disk henteu responsif pisan.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng anu paling misterius pikeun kuring nyaéta pamundut pareum langsung anu sumping. Postgres gaduh tilu mode shutdown:

  • Éta anggun nalika urang ngadagoan sadaya klien pikeun megatkeun sambungan sorangan.
  • Aya gancang nalika urang maksa klien pikeun megatkeun sambungan sabab urang bade shutdown.
  • Jeung saharita. Dina hal ieu, langsung henteu nyarioskeun ka klien pikeun mareuman, éta ngan saukur mareuman tanpa peringatan. Sareng ka sadaya klien, sistem operasi parantos ngirimkeun pesen RST (pesen TCP yén sambunganna diganggu sareng klienna teu aya deui anu kedah ditewak).

Saha anu ngirim sinyal ieu? Prosés latar tukang Postgres henteu ngirimkeun sinyal sapertos kitu, nyaéta ieu kill-9. Aranjeunna henteu ngirimkeun hal-hal sapertos kitu, aranjeunna ngan ukur ngaréspon kana hal-hal sapertos kitu, nyaéta ieu mangrupikeun restart darurat tina Postgres. Saha anu ngirimna, kuring henteu terang.

Kuring nempo paréntah "panungtungan" jeung kuring nempo hiji jalma anu ogé asup server ieu kalawan kami, tapi teuing isin nanya. Sugan ieu maéhan -9. Abdi ningali maéhan -9 dina log, sabab Postgres nyebutkeun eta nyandak maéhan -9, tapi kuring teu ningali eta dina log.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Ningali langkung jauh, kuring ningali yén Patroni henteu nyerat log pikeun waktos anu lami - 54 detik. Sareng upami urang ngabandingkeun dua cap waktos, teu aya pesen kirang langkung 54 detik.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng salami ieu aya autofile. Patroni damel deui damel di dieu deui. master heubeul urang teu sadia, aya kajadian ka anjeunna. Jeung pamilihan master anyar dimimitian. Sagalana digawé kaluar ogé di dieu. pgsql01 kami parantos janten pamimpin énggal.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kami gaduh réplika anu parantos janten master. Sareng aya réspon kadua. Sareng aya masalah sareng réplika kadua. Manehna nyoba reconfigure. Salaku I ngartos eta, manehna nyoba ngarobah recovery.conf, balikan deui Postgres tur sambungkeun ka master anyar. Anjeunna nyerat pesen unggal 10 detik yén anjeunna nyobian, tapi anjeunna henteu hasil.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng salami usaha ieu, sinyal pareum langsung dugi ka master lami. Master di-restart. Sarta ogé recovery eureun sabab master heubeul mana kana reboot. Hartina, réplika teu bisa nyambung ka dinya, sabab dina mode shutdown.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Di sawatara titik, éta digawé, tapi réplikasi teu dimimitian.

Hiji-hijina dugaan kuring nyaéta yén aya alamat master anu lami di recovery.conf. Sareng nalika master énggal muncul, réplika kadua masih nyobian nyambung ka master lami.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Nalika Patroni ngamimitian dina réplika kadua, simpulna ngamimitian tapi henteu tiasa ngayakeun réplikasi. Sareng kabentuk lag réplikasi, anu katingali sapertos kieu. Hartina, sakabéh tilu titik éta dina tempatna, tapi titik kadua lagged balik.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Dina waktos anu sami, upami anjeun ningali log anu ditulis, anjeun tiasa ningali yén réplikasi henteu tiasa ngamimitian sabab log transaksi béda. Jeung eta log transaksi nu master nawarkeun, nu dieusian dina recovery.conf, ngan teu cocog titik urang ayeuna.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng di dieu kuring ngalakukeun kasalahan. Kuring kedah sumping sareng ningali naon anu aya dina recovery.conf pikeun nguji hipotésis kuring yén kami nyambung ka master anu salah. Tapi harita kuring ngan ukur nganyahokeun ieu sareng éta henteu kajantenan, atanapi kuring ningali yén réplika éta katinggaleun sareng kedah dieusi deui, nyaéta, kumaha waé kuring damel sacara teu ati-ati. Ieu gabungan kuring.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Saatos 30 menit, admin parantos sumping, nyaéta kuring ngamimitian deui Patroni dina réplika. Abdi parantos ngeureunkeunana, panginten éta kedah dieusi deui. Sareng panginten - kuring bakal ngamimitian deui Patroni, panginten anu saé bakal katingali. Pamulihan dimimitian. Sareng dasarna malah dibuka, éta siap nampi sambungan.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Réplikasi geus dimimitian. Tapi menit ti harita anjeunna murag sareng kasalahan yén log transaksi henteu cocog pikeun anjeunna.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Panginten kuring badé ngamimitian deui. Kuring restarted Patroni deui, sarta kuring teu balikan deui Postgres, tapi restarted Patroni dina harepan nu magically bakal ngamimitian database.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Réplikasi dimimitian deui, tapi tanda dina log urus éta béda, aranjeunna henteu sarua jeung usaha mimiti saméméhna. Réplikasi dieureunkeun deui. Sareng pesenna parantos rada béda. Tur éta teu pisan informatif pikeun kuring.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Lajeng lumangsung ka kuring - kumaha lamun kuring balikan deui Postgres, dina waktos ayeuna kuring nyieun hiji papariksaan dina master ayeuna pikeun mindahkeun titik dina urus log saeutik maju ka recovery dimimitian ti moment sejen? Tambih Deui, urang masih gaduh saham WAL.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kuring ngamimitian deui Patroni, ngalakukeun sababaraha pamariksaan dina master, sababaraha titik balikan deui dina réplika nalika dibuka. Sarta eta mantuan. Kuring mikir pikeun lila naha éta mantuan jeung kumaha gawéna. Jeung replika dimimitian. Sareng réplikasi henteu deui torn.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Masalah sapertos kitu pikeun kuring mangrupikeun salah sahiji anu langkung misterius, dimana kuring masih ngahudangkeun naon anu kajantenan di dinya.

Naon implikasi di dieu? Patroni tiasa dianggo sakumaha anu dimaksud sareng tanpa kasalahan. Tapi dina waktos anu sami, ieu sanés jaminan 100% yén sadayana henteu kunanaon sareng kami. replica nu bisa ngamimitian, tapi bisa jadi dina kaayaan semi-kerja, sarta aplikasi nu teu tiasa dianggo kalayan replica sapertos, sabab bakal aya data heubeul.

Sarta sanggeus filer nu, anjeun salawasna kudu pariksa yen sagalana aya dina urutan kalawan klaster, nyaeta, aya jumlah diperlukeun réplika, euweuh réplikasi lag.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Sareng nalika urang ngaliwat masalah ieu, kuring bakal masihan saran. Kuring diusahakeun ngagabungkeun aranjeunna kana dua slides. Panginten, sadaya carita tiasa digabungkeun janten dua slide sareng ngan ukur dicaritakeun.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Nalika anjeun nganggo Patroni, anjeun kedah ngawaskeun. Anjeun kudu salawasna nyaho lamun hiji autofileover lumangsung, sabab lamun teu nyaho anjeun kungsi autofileover, anjeun teu boga kontrol ngaliwatan klaster. Tur éta goréng.

Saatos unggal filer, urang salawasna kudu pariksa sacara manual kluster. Urang kudu mastikeun yén urang salawasna boga angka up-to-date of réplika, euweuh réplikasi lag, euweuh kasalahan dina log patali réplikasi streaming, kalawan Patroni, kalawan sistem DCS.

Automation tiasa suksés dianggo, Patroni mangrupikeun alat anu saé. Bisa jalan, tapi ieu moal mawa klaster ka kaayaan dipikahoyong. Sareng upami urang henteu terang perkawis éta, urang bakal kasulitan.

Sareng Patroni sanés pélor pérak. Urang masih kedah ngartos kumaha Postgres jalan, kumaha réplikasi jalan na kumaha Patroni jalan kalawan Postgres, sarta kumaha komunikasi antara titik disadiakeun. Ieu diperlukeun guna bisa ngalereskeun masalah jeung leungeun Anjeun.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kumaha kuring ngadeukeutan masalah diagnosis? Éta kajadian yén urang damel sareng klien anu béda sareng teu aya anu gaduh tumpukan ELK, sareng urang kedah nyortir log kalayan muka 6 konsol sareng 2 tab. Dina hiji tab, ieu mangrupikeun log Patroni pikeun tiap titik, dina tab anu sanés, ieu mangrupikeun log Konsul, atanapi Postgres upami diperyogikeun. Hésé pisan pikeun ngadiagnosa ieu.

Pendekatan naon anu kuring lakukeun? Kahiji, kuring sok kasampak lamun filer geus anjog. Sareng pikeun kuring ieu mangrupikeun DAS. Kuring nempo naon anu lumangsung saméméh filer nu, salila filer jeung sanggeus filer nu. Fileover ngagaduhan dua tanda: ieu mangrupikeun waktos ngamimitian sareng akhir.

Salajengna, kuring ningali dina log pikeun acara sateuacan filer, anu sateuacanna filer, nyaéta kuring milarian alesan kunaon filer kajantenan.

Sareng ieu masihan gambaran ngeunaan ngartos naon anu kajantenan sareng naon anu tiasa dilakukeun di hareup supados kaayaan sapertos kitu henteu kajantenan (sareng hasilna, teu aya filer).

Jeung dimana urang biasana kasampak? Abdi ningali:

  • Kahiji, ka log Patroni.
  • Salajengna, kuring ningali log Postgres, atanapi log DCS, gumantung kana naon anu dipendakan dina log Patroni.
  • Sareng sistem log ogé kadang masihan pamahaman naon anu nyababkeun filer.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

Kumaha perasaan kuring ngeunaan Patroni? Abdi gaduh hubungan anu saé pisan sareng Patroni. Dina pamanggih kuring, ieu téh pangalusna aya kiwari. Kuring terang seueur produk anu sanés. Ieu Stolon, Repmgr, Pg_auto_failover, PAF. 4 parabot. Kuring diusahakeun aranjeunna sadayana. Patroni nyaéta karesep kuring.

Mun aranjeunna nanya ka kuring: "Naha kuring nyarankeun Patroni?". Kuring bakal nyebutkeun enya, sabab kuring resep Patroni. Sareng kuring pikir kuring diajar kumaha masak éta.

Upami anjeun resep ningali naon masalah anu sanés aya sareng Patroni salian ti masalah anu ku kuring parantos disebatkeun, anjeun tiasa teras-terasan pariksa halaman éta isu dina GitHub. Aya seueur carita anu béda sareng seueur masalah anu pikaresepeun anu dibahas di dinya. Hasilna, sababaraha bug diwanohkeun sareng direngsekeun, nyaéta, ieu mangrupikeun bacaan anu pikaresepeun.

Aya sababaraha carita metot ngeunaan jalma shooting sorangan dina suku. Pisan informatif. Anjeun maca sareng ngartos yén éta henteu kedah dilakukeun. Kuring tikét sorangan.

Sareng kuring badé ngucapkeun hatur nuhun ka Zalando pikeun ngembangkeun proyék ieu, nyaéta Alexander Kukushkin sareng Alexey Klyukin. Aleksey Klyukin mangrupikeun salah sahiji panulis kolega, anjeunna henteu deui damel di Zalando, tapi ieu dua jalma anu ngamimitian damel sareng produk ieu.

Sareng kuring nyangka yén Patroni mangrupikeun hal anu saé. Abdi bagja yén anjeunna aya, éta pikaresepeun sareng anjeunna. Sareng hatur nuhun pisan ka sadaya kontributor anu nyerat patch ka Patroni. Abdi ngarepkeun Patroni janten langkung dewasa, cool sareng efisien kalayan umur. Éta parantos fungsional, tapi kuring ngarepkeun éta bakal langkung saé. Kukituna, upami anjeun badé nganggo Patroni, maka ulah sieun. Ieu mangrupikeun solusi anu saé, éta tiasa dilaksanakeun sareng dianggo.

Éta hungkul. Upami anjeun gaduh patarosan, taroskeun.

Carita Gagal Patroni atanapi Kumaha ngadat klaster PostgreSQL anjeun. Alexey Lesovsky

patarosan

Hatur nuhun laporan! Upami saatos filer anjeun masih kedah milarian sacara saksama, naha urang peryogi filer otomatis?

Kusabab éta barang anyar. Kami ngan ukur sareng anjeunna salami sataun. Langkung saé janten aman. Kami badé lebet sareng ningali yén sadayana leres-leres jalanna. Ieu mangrupikeun tingkat teu percantenan sawawa - langkung saé pikeun pariksa dua kali sareng ningali.

Contona, urang indit isuk-isuk jeung kasampak, katuhu?

Henteu isuk-isuk, urang biasana diajar ngeunaan autofile ampir langsung. Kami nampi béwara, kami ningali yén file otomatis parantos kajantenan. Urang ampir langsung indit jeung kasampak. Tapi sadayana cék ieu kedah dibawa ka tingkat ngawaskeun. Upami anjeun ngaksés Patroni via REST API, aya sajarahna. Ku sajarah anjeun tiasa ningali timestamps nalika filer lumangsung. Dumasar ieu, monitoring tiasa dilakukeun. Anjeun tiasa ningali sajarah, sabaraha kajadian éta aya. Upami urang gaduh langkung seueur acara, maka file otomatis parantos kajantenan. Anjeun tiasa balik tur tingal. Atanapi otomatis ngawaskeun kami pariksa yén urang gaduh sadayana réplika di tempatna, teu aya lag sareng sadayana henteu kunanaon.

Hatur nuhun!

Hatur nuhun pisan pikeun carita hébat! Upami urang ngalihkeun kluster DCS ka tempat anu jauh tina kluster Postgres, kluster ieu ogé kedah dilayanan sacara périodik? Naon prakték pangalusna anu sababaraha potongan kluster DCS kudu dipareuman, hal anu dipigawé kalayan aranjeunna, jsb? Kumaha sakabeh struktur ieu salamet? Sareng kumaha anjeun ngalakukeun hal-hal ieu?

Pikeun hiji pausahaan, perlu nyieun hiji matrix masalah, naon anu lumangsung lamun salah sahiji komponén atawa sababaraha komponén gagal. Numutkeun matriks ieu, urang sacara berurutan ngaliwat sadaya komponén sareng ngawangun skénario upami gagalna komponén ieu. Sasuai, pikeun unggal skenario gagal, anjeun tiasa gaduh rencana aksi pikeun pamulihan. Sareng dina kasus DCS, éta asalna salaku bagian tina infrastruktur standar. Jeung admin administers eta, sarta kami geus ngandelkeun admins anu administer eta sarta pangabisa maranéhna pikeun ngalereskeun eta bisi kacilakaan. Upami teu aya DCS pisan, kami nyebarkeun éta, tapi dina waktos anu sami kami henteu ngawaskeunana, sabab kami henteu tanggung jawab kana infrastruktur, tapi kami masihan saran ngeunaan kumaha sareng naon anu kedah diawaskeun.

Nyaéta, naha kuring ngartos leres yén kuring kedah nganonaktipkeun Patroni, nganonaktipkeun filer, nganonaktipkeun sadayana sateuacan ngalakukeun nanaon sareng host?

Eta gumantung kana sabaraha titik urang boga dina klaster DCS. Upami aya seueur titik sareng upami urang nganonaktipkeun ngan ukur salah sahiji titik (replika), maka kluster ngajaga kuorum. Sareng Patroni tetep operasional. Jeung euweuh anu dipicu. Upami urang gaduh sababaraha operasi rumit anu mangaruhan langkung seueur titik, henteuna anu tiasa ngarusak kuorum, maka - leres, éta panginten tiasa ngareureuhkeun Patroni. Mibanda paréntah saluyu - patronictl pause, patronictl resume. Kami ngan ngareureuhkeun sareng autofiler henteu tiasa dianggo dina waktos éta. Urang ngalakukeun pangropéa dina klaster DCS, lajeng urang nyandak kaluar reureuhan jeung neruskeun hirup.

Hatur nuhun pisan!

Hatur nuhun pisan pikeun laporan anjeun! Kumaha parasaan tim produk ngeunaan data leungit?

Tim produk henteu paduli, sareng pimpinan tim hariwang.

Naon jaminan anu aya?

Ngajamin hésé pisan. Alexander Kukushkin boga laporan "Kumaha ngitung RPO na RTO", i.e. waktu recovery na sabaraha data urang bisa leungit. Jigana urang kudu manggihan slides ieu sarta diajar aranjeunna. Sajauh anu kuring émut, aya léngkah-léngkah khusus pikeun ngitung hal-hal ieu. Sabaraha transaksi urang bisa leungit, sabaraha data urang bisa leungit. Salaku pilihan, urang tiasa nganggo réplikasi sinkron dina tingkat Patroni, tapi ieu pedang dua-edged: urang boh boga reliabiliti data, atawa urang leungit speed. Aya réplikasi sinkron, tapi ogé teu ngajamin 100% panyalindungan ngalawan leungitna data.

Alexey, hatur nuhun pikeun laporan hébat! Aya pangalaman nganggo Patroni pikeun panyalindungan tingkat enol? Nyaeta, ditéang jeung sayaga sinkron? Ieu patarosan kahiji. Jeung patarosan kadua. Anjeun parantos nganggo solusi anu béda. Kami nganggo Repmgr, tapi tanpa autofiler, sareng ayeuna urang ngarencanakeun kalebet autofiler. Sareng kami nganggap Patroni salaku solusi alternatif. Naon anu anjeun tiasa nyarios salaku kaunggulan dibandingkeun Repmgr?

Patarosan kahiji ngeunaan réplika sinkron. Teu aya anu nganggo réplikasi sinkron di dieu, sabab sadayana sieun (Sababaraha klien parantos nganggo éta, prinsipna, aranjeunna henteu perhatikeun masalah kinerja - Catetan panyatur). Tapi kami parantos ngembangkeun aturan pikeun diri urang sorangan yén sahenteuna kedah aya tilu titik dina klaster réplikasi sinkron, sabab upami urang gaduh dua titik sareng upami master atanapi réplika gagal, maka Patroni ngalihkeun titik ieu kana mode Mandiri supados aplikasina terus. gawe. Dina hal ieu, aya résiko leungitna data.

Ngeunaan patarosan kadua, kami parantos nganggo Repmgr sareng masih ngalakukeun sareng sababaraha klien kusabab alesan sajarah. Naon anu bisa disebutkeun? Patroni hadir kalawan autofiler out of the box, Repmgr hadir kalawan autofiler salaku fitur tambahan anu kudu diaktipkeun. Urang kedah ngajalankeun daemon Repmgr dina unggal titik teras urang tiasa ngonpigurasikeun autofiler.

Repmgr pariksa upami titik Postgres hirup. Proses Repmgr mariksa ayana silih, ieu sanés pendekatan anu épisién pisan. tiasa aya kasus kompleks isolasi jaringan dimana klaster Repmgr ageung tiasa dirobih janten sababaraha anu langkung alit sareng teras damel. Geus lila kuring teu nuturkeun Repmgr, meureun geus dibereskeun ... atawa meureun henteu. Tapi ngaleupaskeun informasi ngeunaan kaayaan klaster di DCS, sakumaha Stolon, Patroni, mangrupa pilihan paling giat.

Alexey, abdi gaduh patarosan, meureun hiji lamer. Dina salah sahiji conto munggaran, Anjeun dipindahkeun DCS tina mesin lokal ka host jauh. Urang ngarti yén jaringan mangrupa hal anu boga ciri sorangan, hirup sorangan. Sareng naon anu kajantenan upami kusabab sababaraha alesan klaster DCS henteu sayogi? Kuring moal nyebutkeun alesan, aya bisa jadi loba di antarana: ti leungeun bengkok tina networkers kana masalah nyata.

Kuring teu ngomong kaluar nyaring, tapi kluster DCS ogé kudu failover, nyaeta jumlah ganjil titik, dina urutan pikeun quorum a patepung. Naon anu lumangsung lamun klaster DCS jadi sadia, atawa quorum a teu bisa patepung, nyaéta sababaraha jenis pamisah jaringan atawa gagal titik? Dina hal ieu, klaster Patroni asup kana mode baca wungkul. klaster Patroni teu bisa nangtukeun kaayaan klaster jeung naon anu kudu dipigawé. Eta teu bisa ngahubungan DCS tur nyimpen kaayaan klaster anyar aya, jadi sakabéh klaster mana kana dibaca wungkul. Sarta ngantosan boh pikeun campur manual ti operator atawa pikeun DCS cageur.

Sacara kasar, DCS janten jasa pikeun urang anu penting sapertos dasarna?

Enya enya. Dina seueur perusahaan modern, Service Discovery mangrupikeun bagian integral tina infrastruktur. Éta dilaksanakeun bahkan sateuacan aya pangkalan data dina infrastruktur. Relatif diomongkeun, infrastruktur ieu dibuka, deployed di DC, sarta kami geuwat boga Service Papanggihan. Upami éta Konsul, teras DNS tiasa diwangun dina éta. Upami ieu Etcd, teras meureun aya bagian tina klaster Kubernetes, dimana sadayana anu sanésna bakal disebarkeun. Sigana mah Service Discovery parantos janten bagian integral tina infrastruktur modern. Jeung maranéhna mikir ngeunaan eta loba saméméhna ti ngeunaan database.

Hatur nuhun!

sumber: www.habr.com

Tambahkeun komentar