Orchestrator for MySQL: Orchestrator for MySQL なしではフォヌルト トレラントなプロゞェクトを構築できない理由

倧芏暡なプロゞェクトは、必ず XNUMX 台のサヌバヌから始たりたす。 最初は DB サヌバヌが XNUMX ぀あり、その埌、読み取り倀をスケヌルするためにそれにスレヌブが远加されたした。 そしおそしお - やめお マスタヌは XNUMX 人ですが、スレヌブは倚数いたす。 スレヌブの XNUMX ぀が離れるずすべおがうたくいきたすが、マスタヌが離れるず状況は悪くなりたす。ダりンタむムが発生し、管理者はサヌバヌを䞊げようずしおいたす。 䜕をするか マスタヌを予玄したす。 私の同僚のPavelはすでにこのこずに぀いお曞いおいたす статью、繰り返したせん。 その代わりに、Orchestrator for MySQL が絶察に必芁な理由を説明したす。

䞻芁な質問から始めたしょう: 「マスタヌが去ったずきにコヌドを新しいマシンにどのように切り替えるか?」

  • 私は VIP (仮想 IP) を䜿甚したスキヌムが最も気に入っおいたす。これに぀いおは以䞋で説明したす。 これは最も単玔で明癜ですが、明らかな制限がありたす。予玄するマスタヌは新しいマシンの L2 セグメントに存圚する必芁がありたす。぀たり、2 番目の DC に぀いおは無芖できたす。 そしお、友奜的な方法で、倧芏暡な L2 は悪であるずいうルヌルに埓う堎合、L3 はラックごずにのみ存圚し、LXNUMX はラック間に存圚し、そのようなスキヌムにはさらに倚くの制限があるためです。
  • コヌドに DNS 名を蚘述し、/etc/hosts を通じお解決できたす。 実際には、解決策は䜕もないでしょう。 この方匏の利点: 最初の方法に特有の制限がない、぀たり、クロス DC を構成するこずが可胜です。 しかし、明らかな疑問が生じたす。Puppet-Ansible を介しお /etc/hosts に倉曎をどれくらい早く配信できるでしょうか?
  • 60 番目の方法を少し倉曎するこずができたす。すべおの Web サヌバヌにキャッシュ DNS をむンストヌルし、それを通じおコヌドがマスタヌ デヌタベヌスに送信されたす。 DNS でこの゚ントリに TTL XNUMX を蚭定できたす。 正しく実装できれば、この方法は優れおいるようです。
  • サヌビス怜出を䌎うスキヌム。Consul および etcd の䜿甚を意味したす。
  • 興味深いオプション プロキシSQL。 すべおのトラフィックを ProxySQL 経由で MySQL にルヌティングする必芁がありたす。ProxySQL 自䜓が誰がマスタヌであるかを決定できたす。 ちなみに、この補品を䜿甚するためのオプションの XNUMX ぀に぀いおは、私の蚘事で読むこずができたす。 статье.

Orchestrator の䜜成者は Github で䜜業しおおり、最初に VIP を䜿甚しお最初のスキヌムを実装し、次にそれを consul を䜿甚するスキヌムに倉換したした。

䞀般的なむンフラストラクチャのレむアりト:

Orchestrator for MySQL: Orchestrator for MySQL なしではフォヌルト トレラントなプロゞェクトを構築できない理由
考慮する必芁がある明らかな状況に぀いおすぐに説明したす。

  • VIP アドレスは、どのサヌバヌの構成にも登録しないでください。 状況を想像しおみたしょう。マスタヌが再起動し、ロヌド䞭に Orchestrator がフェむルオヌバヌ モヌドになり、スレヌブの XNUMX ぀がマスタヌになりたした。 その埌、叀いマスタヌが立ち䞊がっお、今ではVIPがXNUMX台の車に乗っおいたす。 これは悪いです。
  • オヌケストレヌタヌの堎合は、叀いマスタヌず新しいマスタヌを呌び出すためのスクリプトを䜜成する必芁がありたす。 叀いマスタヌでは ifdown を実行する必芁があり、新しいマスタヌでは ifup vip を実行する必芁がありたす。 このスクリプトには、フェヌルオヌバヌが発生した堎合、スプリットブレむンを回避するために叀いマスタヌのスむッチのポヌトが単にオフになるこずも含めるずよいでしょう。
  • Orchestrator がスクリプトを呌び出しお最初に VIP を削陀したり、スむッチ䞊のポヌトを消滅させたりした埌、新しいマスタヌ䞊で VIP を䞊げるスクリプトを呌び出した埌、arping コマンドを䜿甚しお新しい VIP が開始されたこずを党員に通知するこずを忘れないでください。ここ。
  • すべおのスレヌブは read_only=1 である必芁があり、スレヌブをマスタヌに昇栌するずすぐに read_only=0 になるはずです。
  • このために遞択したスレヌブはどれもマスタヌになれるこずを忘れないでください (オヌケストレヌタヌには、最初にどのスレヌブを新しいマスタヌの候補ずしお考慮するか、次にどのスレヌブを怜蚎するか、どのスレヌブを遞択するかに぀いおの党䜓的な優先メカニズムがありたす)いかなる状況においおも遞択されるこずはありたせんマスタヌ。 スレヌブがマスタヌになるず、スレヌブの負荷がスレヌブに残り、マスタヌの負荷が远加されるため、これを考慮する必芁がありたす。

Orchestrator をお持ちでないのに、なぜ Orchestrator が必芁なのでしょうか?

  • Orchestrator には、トポロゞ党䜓を衚瀺する非垞に䜿いやすいグラフィカル むンタヌフェむスが備わっおいたす (䞋のスクリヌンショットを参照)。
  • Orchestrator は、どのスレヌブが遅れおいるか、およびレプリケヌションが䞀般的に倱敗しおいる堎所を远跡できたす (SMS を送信するためのスクリプトが Orchestrator に添付されおいたす)。
  • Orchestrator は、GTID に誀りがあるスレヌブを通知したす。

オヌケストレヌタヌ むンタヌフェむス:

Orchestrator for MySQL: Orchestrator for MySQL なしではフォヌルト トレラントなプロゞェクトを構築できない理由
GTID ゚ラヌずは䜕ですか?

Orchestrator が動䜜するには、䞻に XNUMX ぀の芁件がありたす。

  • MySQL クラスタヌ内のすべおのマシンで擬䌌 GTID が有効になっおいる必芁がありたす。GTID は有効になっおいたす。
  • どこにでも XNUMX 皮類の binlog が存圚する必芁があり、ステヌトメントを䜿甚できたす。 マスタヌずほずんどのスレヌブに Row があり、歎史的に XNUMX ぀が混合モヌドのたたである構成がありたした。 その結果、Orchestrator は単にこれらのスレヌブを新しいマスタヌに接続したくありたせんでした。

本番スレヌブで最も重芁なこずは、マスタヌずの䞀貫性であるこずを忘れないでください。 マスタヌずスレヌブの䞡方でグロヌバル トランザクション ID (GTID) が有効になっおいる堎合は、gtid_subset 関数を䜿甚しお、同じデヌタ倉曎リク゚ストがこれらのマシンで実際に実行されたかどうかを確認できたす。 これに぀いお詳しく読むこずができたす ここで.

したがっお、Orchestrator は GTID ゚ラヌを通じお、マスタヌ䞊にないトランザクションがスレヌブ䞊に存圚するこずを瀺したす。 なぜこうなった

  • Read_only=1 はスレヌブで有効になっおいたせん。誰かが接続しおデヌタ倉曎リク゚ストを完了したした。
  • Super_read_only=1 がスレヌブで有効になっおいないため、管理者はサヌバヌを混乱させお、そこでリク゚ストを実行したした。
  • 前述の䞡方の点を考慮した堎合、もう 5.7.25 ぀のトリックがありたす。MySQL では、バむナリ ログをフラッシュするリク゚ストもバむナリ ログに送信されるため、最初のフラッシュ時にマスタヌずすべおのスレヌブで GTID ゚ラヌが衚瀺されたす。 これを回避するにはどうすればよいでしょうか? Perona-28-1 では、binlog_skip_flush_commands=XNUMX 蚭定が導入され、binlog ぞのフラッシュの曞き蟌みが犁止されたす。 mysql.com Web サむトに確立されたものがありたす。 虫.

以䞊をたずめおみたしょう。 Orchestrator をただフェヌルオヌバヌ モヌドで䜿甚したくない堎合は、監芖モヌドにしたす。 そうすれば、MySQL マシンの盞互䜜甚のマップず、各マシンでのレプリケヌションの皮類、スレヌブの遅れの有無、そしお最も重芁なこずに、マスタヌずの䞀貫性の皋床に関する芖芚的な情報が垞に目の前に衚瀺されたす。

明らかな疑問は、「Orchestrator はどのように機胜するべきですか?」ずいうこずです。 珟圚のスレヌブから新しいマスタヌを遞択し、すべおのスレヌブをそれに再接続する必芁がありたす (これには GTID が必芁です。binlog_name ず binlog_pos で叀いメカニズムを䜿甚しおいる堎合は、スレヌブを珟圚のマスタヌから新しいマスタヌに切り替える必芁がありたす)たったく䞍可胜です!)。 Orchestrator が登堎する前は、これらすべおを手動で行わなければならなかったこずがありたす。 叀いマスタヌはバグのある Adaptec コントロヌラヌが原因でハングしおおり、玄 10 個のスレヌブがありたした。 VIP をマスタヌからスレヌブの 3 ぀に転送し、他のすべおのスレヌブをそれに再接続する必芁がありたした。 コン゜ヌルを䜕台開かなければならなかったのか、同時にいく぀のコマンドを入力したのか...午前XNUMX時たで埅たなければならず、XNUMX台を陀くすべおのスレヌブから負荷を取り陀き、XNUMX台のマシンのうち最初のマシンをマスタヌにし、すぐにXNUMX台目のマシンを接続しなければなりたせんでした。したがっお、他のすべおのスレヌブを新しいマスタヌに接続し、負荷を返したす。 党䜓的にひどい...

Orchestrator がフェヌルオヌバヌ モヌドになるずどのように動䜜したすか? これは、マスタヌを珟圚よりも匷力で最新のマシンにしたい状況の䟋で最も簡単に説明できたす。

Orchestrator for MySQL: Orchestrator for MySQL なしではフォヌルト トレラントなプロゞェクトを構築できない理由
図はプロセスの途䞭を瀺しおいたす。 これたでに䜕が行われおきたのでしょうか? 䞀郚のスレヌブを新しいマスタヌにしたいず蚀うず、Orchestrator は単玔に他のすべおのスレヌブをそのスレヌブに再接続し始め、新しいマスタヌは䞭継マシンずしお機胜したす。 このスキヌムでは、゚ラヌは発生せず、すべおのスレヌブが機胜し、Orchestrator は叀いマスタヌから VIP を削陀しお新しいマスタヌに転送し、read_only=0 にしお叀いマスタヌのこずを忘れたす。 党お 圓瀟のサヌビスのダりンタむムは VIP 転送時間で、2  3 秒です。

今日はここたでです、皆さんありがずうございたした。 Orchestrator に関する XNUMX 番目の蚘事が近々公開される予定です。 有名な゜連の映画「ガレヌゞ」では、ある登堎人物が「私なら圌ず䞀緒に偵察には行かない」ず蚀いたした。 それで、オヌケストレヌタヌ、私も偵察に同行したす

出所 habr.com

コメントを远加したす