Orchestrator pikeun MySQL: naha anjeun teu tiasa ngawangun proyék toleran lepat tanpa éta

Sakur proyék ageung dimimitian ku sababaraha server. Awalna aya hiji server DB, lajeng budak ditambahkeun kana éta skala bacaan. Lajeng - eureun! Aya hiji tuan, tapi aya loba budak; lamun salah sahiji budak ninggalkeun, teras sagalana bakal rupa, tapi lamun master ninggalkeun, éta bakal goréng: downtime, admins nyobian pikeun ngaronjatkeun server. Naon anu kedah dilakukeun? Reserve master a. Babaturan kuring Pavel parantos nyerat perkawis ieu tulisan, Abdi moal ngulang deui. Sabalikna, kuring bakal nyarioskeun ka anjeun naha anjeun pasti peryogi Orchestrator pikeun MySQL!

Hayu urang mimitian ku patarosan utama: "Kumaha urang ngalih kode ka mesin anyar nalika master ninggalkeun?"

  • Kuring resep skéma jeung VIP (Virtual IP) paling, urang bakal ngobrol ngeunaan eta di handap. Éta anu pangbasajanna sareng paling atra, sanaos aya watesan anu jelas: master anu bakal kami cagar kedah aya dina bagean L2 sareng mesin énggal, nyaéta, urang tiasa hilap ngeunaan DC kadua. Sareng, dina cara anu ramah, upami anjeun nuturkeun aturan yén L2 ageung jahat, sabab L2 ngan ukur per rak, sareng L3 antara rak, sareng skéma sapertos kitu ngagaduhan langkung larangan.
  • Anjeun tiasa nyerat nami DNS dina kode sareng ngabéréskeunana ngalangkungan /etc/hosts. Kanyataanna, moal aya resolusi. Kauntungannana skéma: euweuh ciri watesan tina metoda kahiji, nyaeta, kasebut nyaéta dimungkinkeun pikeun ngatur cross-DC. Tapi teras patarosan atra timbul: kumaha gancangna urang tiasa nganteurkeun parobihan kana /etc/hosts via Puppet-Ansible?
  • Anjeun tiasa ngarobih sakedik metodeu kadua: pasang cache DNS dina sadaya pangladén wéb, dimana kodeu bakal lebet kana database master. Anjeun tiasa nyetél TTL 60 pikeun éntri ieu dina DNS. Sigana mah lamun dilaksanakeun leres, métode téh alus.
  • A skéma jeung kapanggihna jasa, implying pamakéan Konsul jeung jsb.
  • Hiji pilihan metot kalawan ProxySQL. Anjeun kedah ngalihkeun sadaya lalu lintas ka MySQL ngalangkungan ProxySQL; ProxySQL nyalira tiasa nangtukeun saha anu master. Ngomong-ngomong, anjeun tiasa maca ngeunaan salah sahiji pilihan pikeun ngagunakeun produk ieu dina kuring artikel.

Panulis Orchestrator, damel di Github, mimiti ngalaksanakeun skéma munggaran kalayan VIP, teras dirobih janten skéma sareng konsul.

Tata letak infrastruktur umum:

Orchestrator pikeun MySQL: naha anjeun teu tiasa ngawangun proyék toleran lepat tanpa éta
Kuring bakal langsung ngajelaskeun kaayaan anu jelas anu kedah diperhatoskeun:

  • Alamat VIP teu kedah didaptarkeun dina config on salah sahiji server. Hayu urang ngabayangkeun kaayaan: master rebooted, sarta bari eta loading, Orchestrator indit kana mode failover sarta ngajadikeun salah sahiji budak master a; lajeng master heubeul naros, tur ayeuna VIP on dua mobil. Ieu goréng.
  • Pikeun orkestra, anjeun kedah nyerat naskah pikeun nelepon master lami sareng master énggal. Dina master heubeul anjeun kudu ngajalankeun ifdown, sarta dina master anyar - ifup vip. Eta bakal hade ka ogé kaasup dina naskah ieu yén dina acara failover a, port on switch master heubeul ngan dipareuman pikeun nyegah splitbrain nanaon.
  • Saatos Orchestrator parantos nyauran naskah anjeun pikeun ngahapus heula VIP sareng / atanapi mareuman port dina saklar, teras disebat skrip VIP raising dina master énggal, ulah hilap nganggo paréntah arping pikeun nyarios ka sadayana yén VIP énggal ayeuna. Ieuh.
  • Sadaya budak kedah gaduh read_only = 1, sareng pas anjeun ngamajukeun budak ka master, éta kedah read_only = 0.
  • Entong hilap yén budak anu mana waé anu ku urang dipilih pikeun ieu tiasa janten master (Orchestrator gaduh mékanisme anu langkung sering dipilih pikeun budak anu kedah dipertimbangkeun salaku calon master énggal, anu di tempat kadua, sareng budak mana anu kedah. henteu dipilih pisan dina kaayaan naon waé master). Upami budak janten master, maka beban budak bakal tetep dina éta sareng beban master bakal ditambah, ieu kedah dipertimbangkeun.

Naha anjeun peryogi Orchestrator upami anjeun henteu gaduh?

  • Orchestrator gaduh antarbeungeut grafis anu ramah-pamaké anu nampilkeun sadayana topologi (tingali screenshot di handap).
  • Orchestrator tiasa ngalacak budak mana anu katinggaleun, sareng dimana réplikasi umumna dirobih (urang gaduh naskah anu dipasang dina Orchestrator pikeun ngirim SMS).
  • Orchestrator nyarioskeun ka anjeun budak mana anu ngagaduhan kasalahan GTID.

Antarmuka Orkestra:

Orchestrator pikeun MySQL: naha anjeun teu tiasa ngawangun proyék toleran lepat tanpa éta
Naon kasalahan GTID?

Aya dua syarat utama pikeun Orchestrator tiasa dianggo:

  • Perlu yén pseudo GTID diaktipkeun dina sadaya mesin dina klaster MySQL; kami parantos ngaktipkeun GTID.
  • Perlu aya hiji tipe binlogs madhab, anjeun tiasa nganggo pernyataan. Kami ngagaduhan konfigurasi dimana master sareng seueur budak gaduh Baris, sareng dua sajarahna tetep dina mode Campuran. Hasilna, Orchestrator ngan saukur teu hayang nyambungkeun budak ieu ka master anyar.

Émut yén hal anu paling penting dina budak produksi nyaéta konsistensi sareng master! Upami anjeun gaduh ID Transaksi Global (GTID) diaktipkeun dina master sareng budak anjeun, anjeun tiasa nganggo fungsi gtid_subset pikeun milarian naha pamundut anu sami pikeun parobahan data parantos dilaksanakeun dina mesin ieu. Anjeun tiasa maca langkung seueur ngeunaan ieu di dieu.

Ku kituna, Orchestrator nembongkeun anjeun ngaliwatan GTID errant yén aya transaksi dina budak nu teu on master. Naha ieu kajadian?

  • Read_only=1 teu diaktipkeun dina budak, batur disambungkeun tur réngsé hiji pamundut pikeun ngarobah data.
  • Super_read_only = 1 teu diaktipkeun dina budak, lajeng admin, sanggeus lieur server, asup jeung dieksekusi pamundut dinya.
  • Upami anjeun tumut kana akun dua titik sateuacana, maka aya hiji deui trik: dina MySQL, pamenta siram binlog ogé angkat ka binlog, janten dina siram munggaran, kasalahan GTID bakal muncul dina master sareng sadaya budak. Kumaha carana nyingkahan ieu? Perona-5.7.25-28 diwanohkeun binlog_skip_flush_commands = 1 setelan, nu prohibits nulis siram mun binlogs. Aya hiji ngadegkeun dina ramatloka mysql.com bug.

Hayu atuh nyimpulkeun sakabéh di luhur. Upami anjeun henteu hoyong nganggo Orchestrator dina modeu failover acan, teras pasang dina modeu observasi. Satuluyna anjeun bakal salawasna mibanda saméméh panon anjeun peta interaksi mesin MySQL sarta informasi visual ngeunaan naon jenis réplikasi dina unggal mesin, naha budak anu katinggaleun balik, sarta paling importantly, kumaha konsisten aranjeunna kalayan master!

Patarosan atra nyaéta: "Kumaha kedah dianggo Orchestrator?" Anjeunna kedah milih master anyar tina budak ayeuna, teras sambungkeun deui sadayana budak ka éta (éta anu diperyogikeun GTID; upami anjeun nganggo mékanisme lami sareng binlog_name sareng binlog_pos, teras gentos budak tina master ayeuna ka anu énggal. ngan saukur teu mungkin!). Sateuacan urang ngagaduhan Orchestrator, kuring kantos kedah ngalakukeun ieu sacara manual. Juragan heubeul ieu gantung alatan hiji buggy Adaptec controller; éta miboga ngeunaan 10 budak. Abdi peryogi mindahkeun VIP ti master ka salah sahiji budak sareng sambungkeun deui sadaya budak anu sanés. Sabaraha konsol kuring kudu muka, sabaraha simultaneous paréntah kuring asupkeun ... Kuring kungsi antosan nepi ka 3 am, miceun beban ti sakabeh budak iwal dua, nyieun mesin kahiji kaluar dua master, geuwat masang mesin kadua ka dinya, jadi ngagantelkeun sakabeh budak sejenna ka master anyar jeung balik beban. Gemblengna, dahsyat ...

Kumaha Orchestrator tiasa dianggo nalika kana modeu failover? Ieu paling gampang digambarkeun ku conto kaayaan dimana urang hoyong ngadamel master anu langkung kuat, mesin anu langkung modern tibatan anu ayeuna.

Orchestrator pikeun MySQL: naha anjeun teu tiasa ngawangun proyék toleran lepat tanpa éta
Gambar nunjukkeun tengah prosés. Naon anu geus dipigawé nepi ka titik ieu? Urang ngomong yén urang hayang nyieun sababaraha budak master anyar, Orchestrator mimiti saukur nyambungkeun deui sakabeh budak sejen, jeung master anyar akting salaku mesin transit. Kalayan skéma ieu, teu aya kasalahan, sadaya budak damel, Orchestrator ngaluarkeun VIP ti master lami, mindahkeun ka anu énggal, ngajantenkeun read_only = 0 sareng hilap ngeunaan master lami. Sadayana! Waktu downtime tina jasa kami nyaéta waktos transfer VIP, nyaéta 2-3 detik.

Sakitu wae kanggo dinten ieu, hatur nuhun sadayana. Bakal aya tulisan kadua ngeunaan Orchestrator pas. Dina pilem Soviét kawentar "Garage", salah sahiji karakter ngomong, "Kuring moal balik on pangintipan jeung manehna!" Janten, Orchestrator, abdi badé ngiringan anjeun dina pangintipan!

sumber: www.habr.com

Tambahkeun komentar