ホームページ >システムチュートリアル >Linux >mysqlのマスタースレーブ遅延を解決する方法

mysqlのマスタースレーブ遅延を解決する方法

PHPz
PHPz転載
2024-03-19 09:28:241111ブラウズ

mysqlのマスタースレーブ遅延を解決する方法

MySQL の組み込みレプリケーション機能は、大規模で高性能なアプリケーションを構築するための基盤です。 MySQL データを複数のシステムに分散するこの分散メカニズムは、特定の MySQL ホストのデータを他のホスト スレーブにコピーし、再実行することで実現されます。
レプリケーション中、1 つのサーバーがマスターとして機能し、1 つ以上の他のサーバーがスレーブとして機能します。マスターはバイナリ ログ ファイルに更新を書き込み、ログ ローテーションを追跡するためにファイルのインデックスを維持します。これらのログは、スレーブ サーバーに送信された更新を記録します。スレーブはマスターに接続すると、スレーブがログから読み取った最後に成功した更新の場所をマスターに通知します。スレーブ サーバーは、それ以降に発生した更新を受信し、ブロックしてマスター サーバーから更新が通知されるのを待ちます。
Mysql マスター/スレーブ レプリケーションの問題:

  • メインデータベースがダウンすると、データが失われる可能性があります
  • スレーブ ライブラリには SQL スレッドが 1 つしかなく、メイン ライブラリには大きな書き込みプレッシャーがかかっているため、レプリケーションが遅れる可能性があります。
以下は、mysql のマスター/スレーブ遅延を 4 つの側面から解決する方法についての説明です。
1. MySQL データベースのマスター/スレーブ同期の遅延原理。
回答: MySQL データベースのマスター/スレーブ同期遅延の原理について話すときは、mysql データベースのマスター/スレーブ レプリケーションの原理から始める必要があります。mysql のマスター/スレーブ レプリケーションはシングルスレッド操作です。メイン データベースは、すべての DDL と DML の binlog と binlog を生成します。これはシーケンシャルに書き込まれるため、効率が非常に高くなります。スレーブの Slave_IO_Running スレッドはログを取得するためにメイン ライブラリに移動し、効率は比較的高くなります。スレーブの Slave_SQL_Runningスレッドは、メイン ライブラリのすべての DDL および DML 操作をスレーブ上に実装します。 DML と DDL の IO 操作はランダムであり、シーケンシャルではないため、コストが非常に高くなります。スレーブ上の他のクエリもロック競合を引き起こす可能性があります。Slave_SQL_Running もシングルスレッドであるため、DDL カード マスターは 10 回実行する必要があります。分が経過すると、後続のすべての DDL は、この DDL の実行が完了するまで待機してから続行するため、遅延が発生します。 「メイン ライブラリの同じ DDL も 10 分間実行する必要があります。なぜスレーブが遅れるのですか?」と尋ねる友人もいます。その答えは、マスターは同時に実行できますが、Slave_SQL_Running スレッドは実行できないからです。

2. MySQL データベースにおけるマスターとスレーブの同期の遅延はどのようにして発生しますか?
回答: メイン ライブラリの TPS 同時実行性が高い場合、生成される DDL 数がスレーブの 1 つの SQL スレッドが耐えられる範囲を超えて遅延が発生します。スレーブの大きなクエリ ステートメントです。お待​​ちください。

3.MySQL データベースのマスター/スレーブ同期遅延ソリューション

回答: スレーブ同期遅延を軽減する最も簡単な解決策は、アーキテクチャを最適化し、メイン ライブラリの DDL を高速に実行するように努めることです。メイン ライブラリが sync_binlog=1、innodb_flush_log_at_trx_commit = 1 などの高いデータ セキュリティを備えて記述されているという事実もありますが、スレーブにはそのような高いデータ セキュリティは必要ありません。sync_binlog を 0 またはSQL の実行効率を向上させるために、innodb_flushlog を 0 に設定することもできます。もう 1 つは、メイン ライブラリよりも優れたハードウェア デバイスをスレーブとして使用することです。

4. MySQL データベースのマスター/スレーブ同期の遅延要因。

1.ネットワーク遅延
2.マスターロード
3. スレーブロード
一般的なアプローチは、複数のスレーブを使用して読み取りリクエストを分散し、これらのスレーブの専用サーバーをバックアップのみに使用し、他の操作は行わないことで、「リアルタイム」要件を最大限に達成できます。

さらに、遅延を軽減できるパラメータをさらに 2 つ導入します


–slave-net-timeout=秒 パラメータの意味: スレーブがメイン データベースからのログ データの読み取りに失敗した場合、接続を再確立してデータを取得するまでの待ち時間
smile_net_timeout の単位は秒で、デフォルト設定は 3600 秒です。
| スレーブネットタイムアウト | 3600
–マスター接続再試行=秒
パラメータの意味: マスターとスレーブの接続を再確立するときに、接続の確立に失敗した場合、再試行にかかる時間。 master-connect-retry の単位は秒で、デフォルト設定は 60 秒です。 通常、上記の 2 つのパラメータを設定すると、ネットワークの問題によるマスターとスレーブのデータ同期の遅延を軽減できます

以上がmysqlのマスタースレーブ遅延を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlinuxprobe.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。