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コンテナの構築と実行のプロセスの詳細な説明

推薦する

JavaScriptは組み込みオブジェクトのプロトタイプメソッド実装を追加します

オブジェクトがメソッドを呼び出す順序:インスタンス内にメソッドが存在しない場合は、インスタンス オブ...

Docker イメージのデフォルトの保存場所を変更する方法 (ソリューション)

システムの初期のパーティション分割により、オペレーティング システム内の対応する / パーティション...

静的ウェブサイトをRSSに変換するツール

<br /> この記事は allwebdesignresources.com から Ra...

純粋な HTML タグにどれくらい精通していますか?

以下の HTML タグには、基本的に既存のタグがすべて含まれています。数分かけて 1 つずつ参照する...

CSS calc() の数式に関する詳細な理解

数式 calc() は CSS の関数であり、主に数学演算に使用されます。 calc() を使用する...

ノードの対応するバージョンに関する簡単な説明 node-sass sass-loader

目次ノードのバージョンが一致しない、ノードをアップグレードまたはダウングレードするnvm を使用して...

JSはタイムラインの自動再生を実現する

最近、次のような効果を実装しました。再生ボタンをクリックするとタイムラインの再生が開始され、一時停止...

Vue3は画像拡大鏡効果を実現します

この記事の例では、画像拡大鏡効果を実現するためのVue3の具体的なコードを参考までに共有しています。...

解析を実装するためにPostgreSQLデータベースを書き込むSQLスクリプト関数

この記事は主に、PostgreSQL データベースを記述して解析を実装する SQL スクリプト関数を...

JavaScript イベントバブリング、イベントキャプチャ、イベント委任の詳細な説明

1. イベントバブリング: JavaScript イベント伝播のプロセスでは、要素でイベントがトリガ...

Docker クロスホストネットワーク (オーバーレイ) の実装

1. Dockerのホスト間通信Docker クロスホスト ネットワーク ソリューションには以下が含...

Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策

docker リモート API を学習した学生であれば、ポート 2375 についてよくご存知だと思い...

Oracle を MySQL に置き換える際の問題と解決策

目次移行ツールアプリケーション変換mysql8.0 ドライバ パッケージを追加データソース構成の変更...

jQueryのチェーンプログラミングスタイルの詳細な例

チェーンプログラミングの実装原理jQuery を使用すると、開発者は常にドット構文を使用して独自のメ...

PHP-HTMLhtml 重要な知識ポイントメモ(必読)

1. フレームセット、フレーム、iframeを使用して複数のウィンドウを実現する2. 画像上のマッ...