今日は、マスタースレーブ遅延が発生する理由とその対処方法について説明します。 しっかり座って出発の準備をしてください! マスタースレーブ共通アーキテクチャアクセス数の増加に伴い、単一のデータベースの応答容量が不十分になってきました。そこで、マスターデータベースがデータを書き込み、スレーブデータベースがデータを読み取る、読み取りと書き込みを分離するマスタースレーブアーキテクチャが導き出されました。 実稼働環境では、一般的なマスター スレーブ アーキテクチャが多数存在します。ここでは、一般的なアーキテクチャ パターンをいくつか紹介します。 マスタースレーブ複製原理マスタースレーブの基本的なアーキテクチャと関連する構成を理解した後、本題に入りましょう。 マスターとスレーブの関係では、通常の操作では、マスター データベースを使用してデータを書き込み、スレーブ データベースを使用してデータを読み取ります。これの利点は、読み取りと書き込みの負荷が分散され、すべてのリクエストがメイン データベースに配置されることが回避されることです。同時に、データベースからの水平拡張により、システムの拡張性と負荷容量が大幅に向上しました。 しかし、問題が発生します。スレーブ データベースのデータをマスター データベースと一貫性のある状態に保つには、マスター データベースのデータが書き込まれた後にスレーブ データベースに同期される必要があります。マスター データベースとスレーブ データベース間のデータの一貫性を維持する方法と、マスター データベースがスレーブ データベースにデータをリアルタイムで同期する方法を教えてください。 根拠MySQL マスター スレーブ レプリケーションには、非常に重要なログ ファイルが 2 つあります。
マスターとスレーブの同期プロセス中、マスター データベースはすべての操作イベントを binlog に記録します。スレーブ データベースは、I/O スレッドを開いてマスター データベースとの通信を維持し、一定の時間間隔で binlog ログ ファイルが変更されたかどうかを検出します。バイナリログが変更されると、マスター ライブラリはバイナリログ ダンプ スレッドを生成し、バイナリログをスレーブ ライブラリ I/O スレッドに送信します。スレーブ上の I/O スレッドは、バイナリログを独自のリレー ログにコピーします。最終的に、スレーブ データベースの SQL スレッドはリレー ログ内のイベントを読み取り、スレーブ データベースに再生します。 マスタースレーブ遅延の原因上記のプロセスでマスタースレーブレプリケーションの関連プロセスはすでにわかっていますが、マスターデータベースが更新されると、スレーブデータベースが同期されます。では、なぜマスタースレーブ遅延が発生するのでしょうか? ランダムリプレイMySQL メイン データベースへの binlog の書き込み操作は、順次書き込まれます。前述したように、ディスクの順次読み取りおよび書き込み速度は非常に高速です。同様に、ライブラリ内の I/O スレッドからのログ操作の速度と効率も非常に高いです。ただし、データを再生するための SQL スレッドもあり、再生プロセスはディスクへのランダム書き込みであることを忘れないでください。ここまでで、ある時点でリレー ログ内のデータをスレーブ データベースに再生できなくなり、マスター スレーブ間の遅延が発生することを理解できたはずです。 メインデータベースの高同時実行性スレーブ データベースの SQL スレッドの再生ステータスがわかれば、マスター データベースの高い同時実行性がマスター スレーブ間の遅延を引き起こす理由を理解するのは難しくありません。ある瞬間に、マスター データベースに大量の書き込み要求が送信され、binlog を継続的に書き込む必要があることを意味します。このとき、スレーブ データベースの SQL スレッドが圧倒され、マスター スレーブ間の遅延が自然に発生します。 ロック待機シングルスレッドの SQL ステートメントの場合、ブロックが発生すると、ステートメントは実行が成功するまで待機してから続行されます。ある瞬間に、スレーブ データベースがクエリによるロック待機状態になった場合、次の操作は現在の操作が完了した後にのみ実行されます。同様に、マスター スレーブ間の遅延が発生します。 マスタースレーブ遅延処理マスタースレーブ遅延の原因がわかったので、対処方法を見てみましょう。 並列レプリケーションSQL シングルスレッド再生の速度には制限があるため、マルチスレッド再生を使用できますか? MySQL バージョン 5.6 以降では、SQL スレッドを複数のワーカー スレッドに変換して再生する並列レプリケーション メソッドが提供されており、マスター スレーブの遅延問題が解決されます。 メインデータベースの同時実行性を減らす現在、古いバージョンのデータベースを使用しており、バージョンをアップグレードできないのですが、どうすればよいでしょうか?マスター データベースの同時実行性が高い状況では、この方法で同時実行性を制御することによってのみ遅延を解決できます。Redis をより頻繁に使用してください。 メインライブラリを読むあなたもこのような状況によく慣れているはずです。リアルタイム性が求められるデータの場合、データベースから読み取るだけでは不十分です。半日遅れると、年末ボーナスに影響が出てしまいます。 要約するマスタースレーブ複製原理マスター スレーブ レプリケーションには、binlog とリレー ログという 2 つの非常に重要なログ ファイルがあり、それぞれマスター ライブラリとスレーブ ライブラリに配置されています。 Binlog はマスター スレーブ レプリケーションの基礎です。操作イベントは Binlog に書き込まれ、同期のために I/O スレッドを介してスレーブ データベースに送信されます。 マスタースレーブ遅延の原因
マスタースレーブ遅延処理MySQL バージョン 5.6 以降では、並列レプリケーションを使用して、SQL シングル スレッドによって発生するマスター スレーブ遅延問題を解決します。下位バージョンの場合、この問題はメイン ライブラリの同時実行性を減らすことで解決できます。データのリアルタイム要件が厳しい場合は、メイン データベースを読み取ることでこの目標を達成できます。 上記は、MySQL マスタースレーブ遅延問題を解決する詳細な内容です。MySQL マスタースレーブ遅延の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: Docker-compose は Docker プライベート ウェアハウスのステップを迅速に構築します
>>: XHTML 入門チュートリアル: XHTML Web ページ画像アプリケーション
1. 現在インストールされているPHPパッケージを確認するyum list installed |...
目次使用インストールルーティングでどのように使用しますか?読み込み速度の比較最近、中間およびバックエ...
本日、会社の内部サーバーにログインしたところ、リモートアクセスができませんでした。エラー メッセージ...
LinuxにMySQL 8.0.25をインストールするための最新のチュートリアルを参考にしてください...
1. sql_modeを確認する @@sql_mode を選択照会された値は次のとおりです。 ON...
この記事では、簡単なポップアップウィンドウ効果を実現するためのjQueryの具体的なコードを参考まで...
SPA を構築する場合、多くの場合、特定のルートを保護する必要があります。たとえば、認証されたユーザ...
vue-element-admin インポートコンポーネントのカプセル化テンプレートとスタイルまず、...
はじめに: Lynis は、徹底的なセキュリティ スキャンを実行できる Unix システム用のセキュ...
1. 何ですかreactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえ...
pssh は、多数のマシンでのバッチ ssh 操作に使用される、Python で実装されたオープン ...
参考までに、JavaScriptを使用してドロップダウンメニューを実装します。具体的な内容は次のとお...
Anaconda は、conda、Python、およびそれらの依存関係など、180 を超える科学パッ...
目次序文解決具体的な実装満たすべき前提条件質問序文テーブルをよく使用します。データ量が多い場合は直接...
目次1. イベント処理モデル1. イベントバブリング(1)3つのdiv要素にイベントをバインドする(...