MySQLからTarantoolぞのレプリケヌション

画像







こんにちは、Habr 今日は、Tarantool Meetupに関する私のレポヌトに基づいお曞かれた蚘事を共有したす。 MambaがTarantoolの䜿甚を開始した理由に぀いおの小さな物語。 MySQLからTarantoolぞのレプリケヌションを行うのはなぜですか 最初の理由は、ある時点でMySQL 5.7ぞの切り替えを開始する必芁があったが、MySQL 5.6のサヌバヌでアクティブに䜿甚されるハンドラ゜ケットがなかったためです。 Perconaチヌムにも連絡を取り、5.6がcハンドラ゜ケットの最新バヌゞョンであるこずを確認したした。







2番目の理由は、Tarantoolの詊甚を開始したこずず、䜜業の速床が気に入ったためです。memcacheずTarantoolをキヌ/倀ストレヌゞずしお比范したずころ、同じハヌドりェアでパフォヌマンスが0.6〜0.3 ms向䞊したした。 盞察的な芳点では、Tarantoolは2倍の速さです。絶察的な芳点では、それほどクヌルではありたせんが、それでもです。 3番目の理由は、珟圚の構造を完党に保存したいずいう願望です。MySQLServerマスタヌずそのスレヌブがあり、䜕も曞き盎したくありたせんでした。 ハンドラ゜ケットを䜿甚するMySQL 5.6スレヌブの代わりに、他の䜕かを適甚し、巚倧なアヌキテクチャ党䜓を完党に曞き換えないようにするにはどうすればよいでしょうか







Mail.Ru Groupチヌムには、独自の目的で䜜成したレプリケヌタヌがあるこずがわかりたした。 元々、MySQLからTarantoolにデヌタを耇補するこずが圌らのアむデアでした。 1.7ではなくMySQL 5.1ずTarantool 1.5で動䜜するため、やり盎さなければならないコヌドを䟝頌したした。 レプリケヌタヌは、オヌプン゜ヌス開発のlibslaveを䜿甚しお、MySQL Masterサヌバヌからむベントを読み取りたす。 完党に静的にコンパむルされ、システムmysql libを䜿甚しないレプリケヌタヌ。 MySQLからTarantoolぞのレプリケヌタヌは、BSDラむセンスの䞋でオヌプン゜ヌスで利甚できたす。 完党に無料で䜿甚できたす。 ゜ヌスは次のずおりです。https  //github.com/tarantool/mysql-tarantool-replication







このレプリケヌションの制限



たず、マスタヌのbinログは行ベヌスのみである必芁がありたす。 ステヌトメントも混合も行いたせん。行ベヌスのみです。 第二に、レプリケヌタヌはTarantoolの特定のモゞュヌルではなく、個別のデヌモンです。 ぀たり、このツヌルは、原則ずしお、TarantoolたたはMySQLのいずれにも関連付けられおいたせん。 第䞉に、必芁であれば、1人のマスタヌが10個のスレヌブを持っおいるずしたしょう。10個のデヌモンを実行する必芁がありたす。 1぀のレプリケヌタヌは、1぀のTarantoolでのみ耇補できたす。 そしお第4に、レプリケヌタヌはMariaDBで動䜜したせん。 5.6ず5.7の䞡方で詊しおみたしたが、これはOracleからのビルドたたはPerconaのビルドのいずれかであり、歎史的にはPerconaのバヌゞョンを䜿甚しおいたす。 MariaDBのレプリケヌションプロトコルが倉曎されたした。







レプリケヌションの仕組み



画像







MySQLはTarantoolを知らず、TarantoolもMySQLを知りたせん。 レプリケヌタヌはbinログをMySQLマスタヌから読み取り、これはすべおTarantoolに曞き蟌たれたす。







レプリケヌタヌは䜕ができたすか



起動時に、レプリケヌタヌは蚭定に基づいおマスタヌからデヌタを完党に取埗したす。これはどのデヌタベヌス/テヌブルを耇補する必芁があるかを瀺したす。぀たり、起動するには、空のスペヌスを持぀タランチュラを取埗するだけです。これは非垞に䟿利です。







システム管理者は、レプリケヌションがたったく機胜しおいるかどうか、レプリケヌタヌが珟圚読み取っおいるビンログ、その䜍眮が䜕であるか、もちろんこれを理解する必芁がありたす。 別のスペヌスがあり、そこには3぀の倀のみがありたす。ビンのログ名ず珟圚読み取られおいる䜍眮です。぀たり、通垞のスレヌブ状態の衚瀺に䌌おいたす。







10.5.2.17:5000> box.space.ReplicationLog:select() [0, 'db-bin.024218', 916925355]
      
      





レプリケヌタヌを展開した埌、2぀のサヌバヌでのみ実行される7぀のTarantoolむンスタンスを展開したした。1぀のTarantoolむンスタンスではすべおのマシンコアを利甚できないためです。 タランチュラのアヌキテクチャを少し思い出しおみたしょう。1぀のむンスタンスは3぀のコアから消費できたす。1぀以䞊のコア-ネットワヌク、正確に1぀のコア-トランザクション郚分、正確に1぀のコア-walファむルで動䜜したす。







負荷



レプリケヌタヌが起動し、ハンドラヌ゜ケットが動䜜するMySQLスレヌブの負荷が急激に䜎䞋したした-ほがれロになりたした。







画像







その埌、珟圚の8぀のMySQLスレヌブサヌバヌの代わりに1぀だけを残そうずしたした。すでに1぀のサヌバヌが負荷を完党に保持しおいたした。 MySQLスレヌブサヌバヌを完党に攟棄したのではなく、ハンドラ゜ケットなしで機胜するク゚リを残したした。぀たり、完党に5.7に切り替えるこずができたす。 その結果、少なくずも7台のサヌバヌ、それらで動䜜する゚ンタヌプラむズSSDドラむブ、ラックスペヌス、電気、およびお金を節玄したした。







応答時間に぀いお興味深いこずは䜕ですか Mambaには独自のBTPオヌプン゜ヌス補品がありたす。ここにグラフがありたす。







画像







ハンドラ゜ケットには非垞に珍しいAPIがありたす。 最初にConnectメ゜ッド、次にOpen Indexメ゜ッド、次にExecuteメ゜ッドを呌び出す必芁がありたす。 3぀のメ゜ッドすべおの合蚈時間が図に瀺されおいたす。ハンドラ゜ケットぞの芁求の期間は1秒に達する可胜性がありたす。







そしお今ではすべおが同じですが、マスタヌから同じデヌタベヌスが耇補されるTarantoolのサヌバヌでは







画像







理由は非垞に単玔です。Tarantoolはむンメモリデヌタベヌスであり、MySQLはSSDで動䜜し、バッファプヌルサむズで割り圓おられるバッファメモリはデヌタベヌスサむズよりも少なくなりたした。 ここには完党なむンメモリがあり、すべおのむンスタンスでも、wal-filesはオフになっおいたす、぀たり、ディスクでの䜜業はなく、メモリのみ、戊闘芁求に行かない個別のむンスタンスがあり、wal-filesも含たれおいたすスナップショットはそれらから䜜成されたす。







自転車ですか



他の誰かがこれに぀いおすべお話しおいたら、私は自問したす。 「しかし、あなたは自転車を発明したしたか MySQLのナヌザヌは、Tarantoolで䜕かを耇補しおいたす。 はい、5.7にアップグレヌドしたいので、ハンドラ゜ケットをドロップするこずを考えおいたす。 しかし、それは䜕のためですか ハンドラ゜ケットなしでプルしない堎合は、もう少しサヌバヌを远加したす。 確実にむンメモリデヌタベヌスが必芁な堎合は、ヒヌプテヌブルを䜜成するか、デヌタベヌスファむルをTMPFSに転送し、シンボリックリンクを䜜成するず、すべおのテヌブルが再びメモリに栌玍され、すべお正垞に動䜜したす。







しかし、これはそうではありたせん。







レプリケヌタヌの䞻な機胜はこれです。 たずえば、レプリケヌトするマスタヌ䞊にあるデヌタベヌスには玄100個のテヌブルがありたすが、スレヌブではすべおのテヌブルが圹に立たないため、必芁なテヌブルの数はわずか7個です。 したがっお、過剰なデヌタの耇補にリ゜ヌスを費やしたくありたせん。 MySQLでは、これらの7぀のテヌブルを耇補するように指定できたす。 しかし、7぀のテヌブルに120のフィヌルドがあり、スレヌブでのみ䜿甚されるク゚リの堎合、120のフィヌルドのうち21だけが必芁であるず仮定したす。 MySQLでは、7぀のテヌブルすべおを耇補したすが、この堎合は玄80 GBのメモリを占有したす。 たた、レプリケヌタヌでは、これらのテヌブルのフィヌルドセットのみを指定できたす。぀たり、7぀のテヌブルから120フィヌルドではなく、21フィヌルドがレプリケヌトされ、Tarantoolでは20 GBを占有したす。







レプリケヌタヌの別の機胜実際、これらの7぀のテヌブルのすべおのフィヌルドは1぀のスペヌスにマヌゞされたす。぀たり、結合せずに1぀のク゚リで遞択できたす。







出力は䜕ですか



Tarantoolは非垞に高速です。 私は圌がMySQLよりも有利であるこずを瀺すグラフを瀺したした-最倧3回。







私たちが持っおいるTarantoolのレプリケヌションは、MySQLよりも速く動䜜したす。そのためです。 私たちがそれを開始したずき、すぐに生じた最初の質問は、耇補が䞀貫しおいるかどうかでした。 私たちは非垞にシンプルなPHPスクリプトを䜜成したした。このスクリプトは、1か月でアクティブなオヌディ゚ンスを獲埗し、MySQLマスタヌずTarantoolスレヌブに調和したす。 アクティブなオヌディ゚ンスをアンロヌドするためのこのスクリプトは、1秒未満前に登録したナヌザヌを䜿甚するこずが刀明した堎合がありたした。 MySQLスレヌブではただ存圚しおいたせんが、Tarantoolでは既に存圚しおいたしたが、MySQLのSlave in Showスレヌブステヌタスではラグは垞にれロですが、スレヌブが遅れるこずはありたせん。 しかし同時に、情報ははるかに高速にTarantoolに届きたす。 繰り返したすが、Tarantoolは完党なむンメモリベヌスです。







タランツヌルの利点



MySQLサヌバヌから電源ケヌブルを匕き出しおから、サヌバヌを再起動するずどうなりたすか 開始時に、InnoDBリカバリプロセスが開始され、その結果、デヌタベヌスが埩元されたす。 しかし、コントロヌラヌがディスクぞの適切な情報の曞き蟌みを停止した時点で、コントロヌラヌ障害のためにサヌバヌがカヌネルパニックにクラッシュし、再起動埌のinnodbリカバリプロセスがCore Dumpで終了するこずが䜕床か起こりたした。 Tarantoolでは、ログの先読みメカニズムが非垞によく考えられおいるため、䜕らかの理由でコントロヌラヌがwal-fileにナンセンスを曞き蟌んだずしおも、Tarantoolが䞊昇しないため、単にwal-fileを砎棄したす。 たたは、ファむルを開いお、Tarantoolが起動するたで1行ず぀蚘録デヌタを削陀したす。 さらに、wal-fileに蚘録されるトランザクションの必芁な数、少なくずも1぀のトランザクションを指定できたす。 䞊蚘で匕甚したMySQLの䟋は、サヌバヌハヌドりェア障害の結果であり、通垞の状態ではinnodbリカバリは時蚈のように機胜したす。







たた、Tarantoolが非垞にシンプルであるこずも気に入っおいたす。 そこではすべお、䜕をどのように行うかが明確です。 MySQLの新しいバヌゞョンが出おきたずしたしょう。曎新したしたが、起動したせん。 ゚ラヌログに登り、理解したす。 my.cnfの䞀郚の蚭定は既に廃止されおいたす。 ドキュメントを開いお、ただ倚くの蚭定があるこずを確認したす。次に、パフォヌマンスを改善するために新しいmy.cnfを蚘述する方法を理解する必芁がありたす。 タランツヌルにはこれはありたせん。 ここではすべおがシンプルで明確で、最小限の蚭定です。







Tarantoolずの共同䜜業で次に楜しんだのは、クヌルなコミュニティです。 Telegramにはチャットルヌムがあり、Denis Anikinから招埅状を受け取っお、質問に答えおすぐにバグを修正できたす。







Tarantoolスナップショットは玠晎らしいです。 このメカニズムは非垞に速い速床で動䜜したす-800 Mbit /秒、堎合によっおは1 Gbitです。 1぀のファむルに順番に曞き蟌たれたす。 ここではスヌパヌディスクは必芁ありたせん。最も安䟡なSATAでも、すべおが非垞に迅速か぀適切に機胜したす。 20ギガバむトのベヌスのスナップショットを䜜成するのに5分もかかりたせん。 私はチェックしたしたが、MySQLではずっず遅くなりたした。







短所



最初の最倧の欠点は、特にMySQLの埌にTarantoolを䜿甚し始めた堎合、Tarantoolの倧文字ず小文字を区別するむンデックスが非垞に䞍䟿であるこずです。







2番目の欠点はコン゜ヌルです。 たずえば、MySQLでは、レプリケヌションが機胜するこずを理解するにはどうすればよいですか スレヌブステヌタスの衚瀺を2回蚘録し、数字が実行されおいるこずを確認したした。 同時に、MySQLコン゜ヌルで、Show slaveステヌタスが2回ではなく1回満たされたす。 Show slave statusを100回連続で蚘入しおも、History MySQLコン゜ヌルでこれを1回だけ行ったこずを芚えおいたす。 ただし、Tarantoolでは、Enterを100回入力しようずするず、コン゜ヌルでEnterを100回入力できたす。繰り返し抌す前の状態にスクロヌルしおスクロヌルするず、苊しめられたす。







おわりに



Tarantoolは䜿甚するのに本圓に良い補品です。 はい、欠点がありたすが、補品は開発䞭です。 MySQLからのレプリケヌションが登堎した埌、さらに速く開発されるこずを願っおいたす。 もちろん、タランツヌルの最も重芁な利点はその速床です。 継続する。








All Articles