MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ

MySQL 4 の一般的なマスタースレーブレプリケーションアーキテクチャ

1つのマスターと複数のスレーブのレプリケーションアーキテクチャ

マスター データベースへの読み取り要求の負荷が非常に高いシナリオでは、1 つのマスターと複数のスレーブのレプリケーション アーキテクチャを構成することで、読み取りと書き込みの分離を実現できます。次の図に示すように、高いリアルタイム パフォーマンスを必要としない大量の読み取り要求は、ロード バランシングによって複数のスレーブ データベースに分散され (高いリアルタイム パフォーマンスが要求される読み取り要求はマスター データベースから読み取ることができます)、マスター データベースへの読み取り負荷が軽減されます。

メイン データベースの異常なダウンタイムが発生した場合、スレーブ データベースをメイン データベースに切り替えて、サービスの提供を継続できます。

マスタースレーブレプリケーションのシナリオでは、マスタースレーブ遅延が発生します。これを解決する方法を考えてみましょう。

マルチレベルレプリケーションアーキテクチャ

1 つのマスターと複数のスレーブのアーキテクチャは、特に高い読み取り要求圧力を伴うほとんどのシナリオのニーズを解決できます。MySQL レプリケーションでは、マスター データベースが BINLOG ログをスレーブ データベースの I/O スレッドに送信する必要があることを考慮すると、スレーブ データベースの増加に伴って、マスター データベースの I/O 圧力とネットワーク圧力が増加します (各スレーブ データベースには、イベントを送信するためのマスター データベース上に独立した BINLOG ダンプ スレッドがあります)。マルチレベル レプリケーション アーキテクチャは、1 つのマスターと複数のスレーブのシナリオにおけるマスター データベースの追加 I/O 圧力とネットワーク圧力を解決します。 MySQL のマルチレベルレプリケーションアーキテクチャを下図に示します。

1 つのマスターと複数のスレーブのアーキテクチャと比較すると、マルチレベル レプリケーションでは、マスター データベース Master1 をスレーブ データベース Slave1、Slave2、および Slave3 にレプリケーションする途中で、セカンダリ マスター データベース Master2 を追加するだけです。このように、マスター データベース Master1 は、1 つのスレーブ データベース Master2 に BINLOG ログを送信するだけで済むため、マスター データベース Master1 への負荷が軽減されます。次に、セカンダリ マスター ライブラリ Master2 は、BINLOG ログをすべてのスレーブ ライブラリ Slave1、Slave2、および Slave3 の I/O スレッドに送信します。

マルチレベル レプリケーションは、1 つのマスターと複数のスレーブのシナリオで、マスター データベースの I/O 負荷とネットワーク プレッシャーを解決します。もちろん、欠点もあります。MySQL の従来のレプリケーションは非同期です。マルチレベル レプリケーションのシナリオでは、マスター データベースのデータは、スレーブ データベース Slave1、Slave2、および Slave3 に到達する前に 2 回複製されます。この期間中の遅延は、1 つのマスターと複数のスレーブのシナリオで 1 回のみのレプリケーションの場合よりも大きくなります。

セカンダリ マスター データベース Master2 のテーブル エンジンとして BLACKHOLE を選択すると、マルチレベル レプリケーションの待機時間を短縮できます。名前が示すように、BLACKHOLE エンジンは「ブラック ホール」エンジンです。BLACKHOLE テーブルに書き込まれたデータはディスクに書き込まれません。BLACKHOLE テーブルは常に空のテーブルです。INSERT、UPDATE、および DELETE 操作は、BINLOG にイベントを記録するだけです。

テーブル `user` を作成します (
	`id` int NOT NULL AUTO_INCREMENT 主キー、
	`name` varchar(255) NOT NULL デフォルト ''
	`age` tinyint unsigned NOT NULL DEFAULT 0
)ENGINE=BLACKHOLE 文字セット=utf8mb4;
`user` (`name`,`age`) に値 ("itbsl", "26") を挿入します。
`user` から * を選択します。

ご覧のとおり、ストレージ エンジンが BLACKHOLE であるユーザー テーブルにはデータがありません。

BLACKHOLE エンジンは、セカンダリ マスター ライブラリ Masger2 のシナリオに非常に適しています。Master2 は読み取りおよび書き込み要求を処理しませんが、BINLOG ログをできるだけ早くスレーブ ライブラリに送信する役割のみを果たします。

デュアルマスターレプリケーションアーキテクチャ

デュアル マスター レプリケーション アーキテクチャは、DBA がメンテナンスのためにマスター データベースとスレーブ データベースを切り替える必要があるシナリオに適しています。デュアル マスター レプリケーション アーキテクチャにより、スレーブ データベースを繰り返し構築する手間が省けます。デュアル マスター レプリケーション アーキテクチャを次の図に示します。

マスター データベース Master1 と Master は相互にマスター スレーブであり、すべての Web クライアント書き込み要求はマスター データベース Master1 または Master2 にアクセスします。さらに、DBA は日常的なメンテナンス操作を実行する必要があり、サービスに影響を与えないようにするために、次の操作を実行する必要があります。

  • まず、Master1 データベースのスレーブ スレッドを停止 (STOP SLAVE) して、Master2 データベースでのその後のメンテナンス操作が Master1 データベースにリアルタイムでコピーされ、サービスに影響を与えないようにします。
  • 次に、Master2 データベースのスレーブ スレッドを停止 (STOP SLAVE) し、varchar フィールドの長さを 10 から 200 に変更するなどの定期的なメンテナンス操作を開始します。
  • 次に、Master2 ライブラリのメンテナンス操作が完了したら、Master2 ライブラリでスレーブ スレッド (STRART SLAVE) を開き、Master2 のデータを Master1 ライブラリと同期します。同期が完了したら、アプリケーションの書き込み操作を Master2 ライブラリに切り替えます。
  • 最後に、Master1 ライブラリにアクセスしているアプリケーションがないことを確認した後、Master1 の Slave スレッドを開きます (START SLAVE)。

デュアルマスター レプリケーション アーキテクチャにより、1 つのマスターと複数のスレーブのアーキテクチャでマスター ライブラリを維持するために必要なスレーブ ライブラリのセットアップの追加作業が大幅に削減されます。

もちろん、デュアルマスターアーキテクチャは、マスタースレーブレプリケーションと組み合わせて使用​​することもできます。マスター2ライブラリの下にスレーブライブラリSlave1、Slave2などを設定します。これにより、スレーブライブラリSlave1などを介して読み取り負荷を共有し、DBAがメンテナンスを行う間にスレーブライブラリを再構築するという余分な作業を回避できます。ただし、スレーブライブラリのレプリケーション遅延には注意する必要があります。 MySQL デュアルマスター マルチレベル レプリケーション アーキテクチャを以下に示します。

マルチソースレプリケーションアーキテクチャ

マルチソース レプリケーション アーキテクチャは複雑なビジネス ニーズに適しており、OLTP (オンライン トランザクション処理) と OLAP (オンライン分析処理) の両方をサポートできます。 MySQL のマルチソースレプリケーションアーキテクチャについては当分描かないことにします。時間があるときに描いて追加します(描くのも体力仕事です)。ご興味があれば、「MySQL データベースの開発、最適化、管理、メンテナンスを簡単に解説」という本をお読みください。

マスタースレーブ遅延問題を最適化するにはどうすればよいでしょうか?

  • ネットワーク環境の最適化
  • MySQL 5.5~MySQL 5.6では、準同期レプリケーションを使用する
  • MySQL 5.7 では、拡張された半同期レプリケーション (ロスレス レプリケーションとも呼ばれます) が利用できます。

MySQL マスター/スレーブ遅延の詳細については、MySQL マスター/スレーブ レプリケーションのいくつかのレプリケーション方法に関する他の記事を参照してください。

出典:

「MySQL データベースの開発、最適化、管理、メンテナンスを簡単に解説」という本。

上記は、MySQL でよく使用される 4 つのマスター スレーブ レプリケーション アーキテクチャの詳細です。MySQL のマスター スレーブ レプリケーション アーキテクチャの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • MySQLデュアルマスター(マスターマスター)アーキテクチャ構成ソリューション
  • MySQLの論理アーキテクチャに関する深い理解
  • MySQL の全体的なアーキテクチャの紹介
  • MySQL 20 の高性能アーキテクチャ設計原則 (収集する価値あり)
  • MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解
  • MySQL アーキテクチャのナレッジポイントの概要
  • Mysql論理アーキテクチャの詳細な説明
  • MySQL データベース アーキテクチャの詳細

<<:  5 分で vue-cli3 を使用してプロジェクトを作成する方法を説明します (初心者向けガイド)

>>:  Dockerコンテナの構築と実行のプロセスの詳細な説明

推薦する

jQueryはショッピングカート機能を実装します

この記事の例では、ショッピングカート機能を実装するためのjQueryの具体的なコードを参考までに共有...

JavaScript で配列の最大値と最小値を実装する 6 つの方法

配列[1,8,5,4,3,9,2]が与えられた場合、配列の最大値9と最小値1を取得するアルゴリズムを...

el-table ヘッダーでテキストを折り返す 3 つの方法の詳細な説明

目次問題の説明レンダリング3種類のコード要約する問題の説明通常、表のヘッダーは折り返されませんが、ビ...

MySQL における TIMESTAMPDIFF ケースの詳細な説明

1.構文TIMESTAMPDIFF(unit,begin,end); 単位に従って時間差を返します。...

LinuxカーネルマクロContainer_Ofの詳細な説明

目次1. 構造体はメモリにどのように保存されますか? 2. container_ofマクロ3. 型4...

Linux システムのユーザー管理コマンドの概要

ユーザーとグループの管理1. ユーザーとグループの基本概念ユーザーとグループ:システム上のすべてのプ...

TomcatはLog4jを使用してcatalina.outログを出力します。

Tomcat のデフォルトのログは java.util.logging を使用しますが、これにはい...

ランダム点呼 Web ページを実装するための JavaScript

JavaScriptは、参考のためにランダムな点呼Webページを作成します。具体的な内容は次のとお...

光るテキストとちょっとしたJS特殊効果を実現するCSS

実装のアイデア: CSSでtext-shadowを使用してテキストの光る効果を実現します効果画像: ...

JavaScript の知識: コンストラクタも関数である

目次1. コンストラクタの定義と呼び出し2. 新しいキーワードの目的3. コンストラクタの問題: メ...

きちんとしたHTMLマークアップを使用してページを構築します

インターネットは絶えず進化する有機体です。長期にわたってインターネットの発展に適応できるページを構築...

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

VMware 仮想マシンのネットワークの問題の解決方法

目次1. 問題の説明2. 問題解決1. 仮想マシンシステムのインストール時にネットワークがない場合2...

JSONP クロスドメインシミュレーション Baidu 検索

目次1. JSONPとは何か2. JSONPクロスドメインリクエスト3. Baidu検索をシミュレー...

シンプルなプログレスバーを作成するための HTML+CSS

1. HTMLコードコードをコピーコードは次のとおりです。経験値: <span class=...