Mysqlは主従の強い一貫性と高可用性を実現

1883 ワード

データに強い一貫性が要求されるアプリケーションでは、データベースがダウンタイムしてデータが失われることは避けなければならないことです.データの一貫性を保証することは私たちにとって非常に重要です.
  • 主従の強い一致性を達成するにはどうすればいいのでしょうか.
  • スタンドアロン・データベースでは、トランザクションの更新操作が失われないようにWALログ優先(Write-Ahead-Logging)テクノロジーが使用されます.
  • WALの実装は非常に簡単です.つまり、トランザクションがコミットされたときに、トランザクションによって生成されたログをディスクに先にブラシすることを保証します.トランザクションが新たに失敗した場合、ログによって
  • をロールバックできます.
  • は主従の過程において、私たちはWALの思想に基づいて主従の強い一致性を保証し、すなわちライブラリのrelay log中継ログから落盤を更新することを優先的に保証し、主ライブラリからアプリケーショントランザクションに戻るよりも早く、操作は以下のステップに分けることができる.
  • プライマリ・ライブラリ・トランザクションのコミット時に、ログをローカル・ディスクに書き込む操作と、ログをスレーブ・ライブラリに同期してドロップダウン
  • を確保する2つの操作を同時に開始します.
  • プライマリ・ライブラリは、2つの操作がすべて正常に戻るのを待ってからアプリケーションに戻り、トランザクションのコミットは
  • に成功しました.
  • 複数のスレーブがある場合、パフォーマンスを向上させるために、1つのスレーブからのログのドロップダウンに成功すれば、プライマリ・ライブラリのログがドロップダウンした場合、アプリケーションのコミットに成功した
  • に戻ることができます.
  • mysqlの具体的な実装Loss-Loss半同期レプリケーション
  • 主従の可用性をどのように保証しますか?
  • まず考えられるのは、システムがダウンすると、メンテナンス担当者に手動でサービスを回復させることですが、コストが高く、人のコストは機械よりはるかに高いです.二来人の操作速度は限られていて,機械が速くない.三来は非人道的で、機械はいつダウンするか分からないので、私たちはずっと人を派遣して守ってはいけないでしょう.
  • この時、HA(High Availability)検出ツールが誕生した:HAツールは一般的に3台目のサーバーに配置され、同時に主従者に接続し、主従者が生存しているかどうかを検出し、主従者がダウンタイムした場合、直ちに倉庫を主庫にアップグレードし、元の主庫を従庫にダウングレードする.具体的な操作は以下の
  • である.
  • メイン・ライブラリがダウンタイムした後、HAは、スタンバイをメイン・ライブラリに昇格させる操作(スタンバイのVIP 1またはDNSを変更し、スタンバイをアクティブ化するなどの一連の操作が必要である可能性がある)を開始し、新しいメイン・ライブラリが対外サービスを提供することを検出した.このとき、マスタのデータは日志強による同期であるため、データロスはない、データ整合性が保障されている
  • .
  • HAソフトウェア自体の可用性をどのように保障しますか?
  • HAサービスを追加し、1台のHAホストから複数のHAホストに変更します.
  • HAサービス、それ自体は無状態で、複数台のHAホストは、Paxos/Raftによって自動選主
  • を行うことができる.

  • mysqlの高可用性に興味があれば、mysql MHAにも注目してみてください.意外にもこれからのブログではMHAの知識を紹介します.私のブログに引き続き注目してもいいことを知りたいなら.
  • この記事で参考にしたブログ資料
  • データ整合性-パーティション可用性-パフォーマンス-マルチコピー強同期データベースシステム実装の私見

  • 仮想IP技術、略記VIP、Virtual IP↩︎