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 は日常的なメンテナンス操作を実行する必要があり、サービスに影響を与えないようにするために、次の操作を実行する必要があります。
デュアルマスター レプリケーション アーキテクチャにより、1 つのマスターと複数のスレーブのアーキテクチャでマスター ライブラリを維持するために必要なスレーブ ライブラリのセットアップの追加作業が大幅に削減されます。 もちろん、デュアルマスターアーキテクチャは、マスタースレーブレプリケーションと組み合わせて使用することもできます。マスター2ライブラリの下にスレーブライブラリSlave1、Slave2などを設定します。これにより、スレーブライブラリSlave1などを介して読み取り負荷を共有し、DBAがメンテナンスを行う間にスレーブライブラリを再構築するという余分な作業を回避できます。ただし、スレーブライブラリのレプリケーション遅延には注意する必要があります。 MySQL デュアルマスター マルチレベル レプリケーション アーキテクチャを以下に示します。 マルチソースレプリケーションアーキテクチャマルチソース レプリケーション アーキテクチャは複雑なビジネス ニーズに適しており、OLTP (オンライン トランザクション処理) と OLAP (オンライン分析処理) の両方をサポートできます。 MySQL のマルチソースレプリケーションアーキテクチャについては当分描かないことにします。時間があるときに描いて追加します(描くのも体力仕事です)。ご興味があれば、「MySQL データベースの開発、最適化、管理、メンテナンスを簡単に解説」という本をお読みください。 マスタースレーブ遅延問題を最適化するにはどうすればよいでしょうか?
MySQL マスター/スレーブ遅延の詳細については、MySQL マスター/スレーブ レプリケーションのいくつかのレプリケーション方法に関する他の記事を参照してください。 出典: 「MySQL データベースの開発、最適化、管理、メンテナンスを簡単に解説」という本。 上記は、MySQL でよく使用される 4 つのマスター スレーブ レプリケーション アーキテクチャの詳細です。MySQL のマスター スレーブ レプリケーション アーキテクチャの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: 5 分で vue-cli3 を使用してプロジェクトを作成する方法を説明します (初心者向けガイド)
>>: Dockerコンテナの構築と実行のプロセスの詳細な説明
Ubuntuでsshを開くのに1時間以上かかりました。主な原因は、最初に読んだチュートリアルの手順...
エラーメッセージ:エラー 2002 (HY000): ソケット '/tmp/mysql.so...
この記事では、:placeholder-shown 疑似クラスを使用して、純粋な CSS で浮動疑問...
前回の記事【dockerコンテナのためのdockerfileを詳しく解説】では、dockerfile...
長い間ブログを書いていませんでした。先週、プロジェクトをテストしたところ、いくつかのバグが見つかりま...
目次Docker の基本概念Docker インストール プロセス (Centos6.9)カーネルのア...
解決すべき問題主にコンポーネント間のクロスレベル通信用なぜディスパッチとブロードキャストを自分で実装...
Dockerはmysqlをインストールします docker search mysql 検索 dock...
HTML と CSS で、ボタンの色を設定したいとします。 目的の効果は得られますが、プロセスはかな...
FFmpeg flacをインストールする eric@ray:~$ sudo apt install ...
1. jsonオブジェクトをjson文字列に変換し、文字列が「{}」であるかどうかを判断します。 v...
この記事では主に、SQL 削除ステートメント DROP、TRUNCATE、および DELETE の違...
コードをコピーコードは次のとおりです。 <html> <ヘッド> <t...
MySQL はインストール時に自動的に mysql という名前のデータベースを作成します。mysql...
デフォルトのブリッジ ネットワークのため、コンテナーを再起動すると IP アドレスが変更されます。シ...