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

推薦する

Linux スワップメモリ​​を拡張する方法

スワップ メモリとは、主に物理メモリが不足している場合に、システムがハード ディスク領域の一部をサー...

Centos7.4 環境に lamp-php7.0 をインストールするチュートリアル

この記事では、Centos7.4 環境に lamp-php7.0 をインストールする方法について説明...

熟練デザイナーの7つの原則(1):フォントデザイン

まあ、あなたはデザインの達人かもしれませんし、あるいはそれは大げさすぎるかもしれませんが、少なくとも...

Winにmysqlをインストールする詳細な手順

この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...

JavaScriptはキャンバスを使用して座標と線を描画します

この記事では、JavaScriptでキャンバスを使用して座標と線を描く具体的なコードを参考までに紹介...

JavaScript コンソールのその他の機能

目次概要コンソールログコンソール.infoコンソール.警告コンソールエラーコンソールテーブルコンソー...

Vue2で配列の変更を検出できない理由と解決策

目次回避策Vue2.0 で 2 つの配列の変更を監視できないのはなぜですか?ソースコード分析ヴュー3...

Typescriptを使用してWeChatミニプログラムを開発するための詳細な手順

Typescript の利点については詳しく説明する必要はありません。ご興味があれば、(https:...

SSL で Nginx リバース プロキシを構成する簡単な手順

序文リバース プロキシは、Web 経由で行われたリクエスト (http と https の両方) を...

上下に空白行があるフォームを挿入する解決策

ウェブページを作成するときに、フォームを挿入した後、フォームの上下に空白行が表示されることがよくあり...

nginx を使用してカナリアリリースをシミュレートする方法

この記事では、ブルーグリーン デプロイメントと、nginx を使用してカナリア リリースを最も簡単な...

Linuxの一般的なコマンドでLinuxのmoreコマンドを使用する方法

more は、最もよく使用されるツールの 1 つです。最も一般的な使用方法は、出力コンテンツを表示し...

純粋な CSS で DIV サスペンションを実装するサンプル コード (固定位置)

DIV フローティング効果 (固定位置) は CSS のみで実装されており、IE8、360、Fir...

バインドを使用してDNSサーバーを設定する方法

DNS(ドメインネームサーバー)は、ドメイン名とそれに対応する IP アドレスを変換するサーバーです...

Macにmysql5.7.18をインストールする詳細な手順

1. ツール今必要なツールは2つあります: MySQLサーバー (mysql-5.7.18)、MyS...