MySQL レプリケーション アーキテクチャをマスターする方法
1 つのマスターと複数のスレーブのレプリケーション アーキテクチャ
実際のアプリケーションでは、ほとんどの MySQL レプリケーション アーキテクチャ パターンは 1 つのマスターを 1 つ以上のスレーブにレプリケートします。
メイン ライブラリの読み取り要求の負荷が非常に高いシナリオでは、ワンマスター マルチスレーブ レプリケーション アーキテクチャを構成して読み取りと書き込みの分離を実現し、多数のリアルタイム要件が特に高くないデータ読み取りリクエストはロード バランシングを通じて複数のスレーブ ライブラリに分散され (リアルタイム要件の高い読み取りリクエストはマスター ライブラリから読み取ることができます)、マスター ライブラリへの読み取りプレッシャーが軽減されます。以下の図に示すように。
欠点:
-
マスターはシャットダウンできず、シャットダウンすると書き込みリクエストを受信できません
スレーブが多すぎると遅延が発生します
定期メンテナンスのためにマスターをシャットダウンする必要があるため、スレーブをマスターに変換する必要があります。どれを選ぶかが悩みどころ?
スレーブがマスターになると、現在のマスターと以前のマスターのデータの間に不一致が発生し、以前のマスターは現在のマスター ノードの binlog ファイルと pos の場所を保存しませんでした。
マルチマスター レプリケーション アーキテクチャ
マルチマスター レプリケーション アーキテクチャは、シングルマスター マルチスレーブ レプリケーション アーキテクチャにおけるマスターの単一障害点の問題を解決します。
keepalived などのサードパーティ ツールを使用すると、メンテナンスのためのマスターのダウンタイムが書き込み操作に影響しないように、IP ドリフトを簡単に実現できます。
カスケード レプリケーション アーキテクチャ
1 つのマスターと多数のスレーブスレーブが多すぎると、スレーブ ライブラリの増加に応じてマスター ライブラリの I/O プレッシャーとネットワーク プレッシャーが増加します。各スレーブ ライブラリには、イベントを送信するためのマスター ライブラリ上に独立した BINLOG ダンプ スレッドがあり、カスケード レプリケーション アーキテクチャは、1 つのマスターと複数の奴隷。
以下に示すように。
1 マスターおよび複数スレーブのアーキテクチャと比較すると、カスケード レプリケーションはマスター データベースから少数のスレーブ データベースにのみコピーし、他のスレーブ データベースはそこからコピーします。これらのいくつかのスレーブ データベース。データをコピーすることで、メイン データベース マスターへの負担が軽減されます。
もちろん、欠点もあります: MySQL の従来のレプリケーションは非同期です。カスケード レプリケーション シナリオでは、マスター データベース内のデータは、他のスレーブ データベースに到達する前に 2 回のレプリケーションを受ける必要があります。この期間の遅延を比較します。 1 つのマスターと複数のスレーブのレプリケーション シナリオでは、次回にコピーが 1 つしか経由しない場合は大問題です。
セカンダリ スレーブ データベースで BLACKHOLE テーブル エンジンを選択すると、カスケード レプリケーションの遅延を短縮できます。名前が示すように、BLACKHOLE エンジンは「ブラック ホール」エンジンです。BLACKHOLE テーブルに書き込まれたデータはディスクには書き込まれません。BLACKHOLE テーブルは常に空のテーブルです。INSERT、UPDATE、および DELETE 操作はイベントを記録するだけですビンログで。
以下は BLACKHOLE エンジンを示しています:
mysql> CREATE TABLE `user` ( -> `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, -> `name` varchar(255) NOT NULL DEFAULT '', -> `age` tinyint unsigned NOT NULL DEFAULT 0 -> )ENGINE=BLACKHOLE charset=utf8mb4;Query OK, 0 rows affected (0.00 sec)mysql> INSERT INTO `user` (`name`,`age`) values("itbsl", "26");Query OK, 1 row affected (0.00 sec)mysql> select * from user;Empty set (0.00 sec)
ご覧のとおり、ストレージ エンジンが BLACKHOLE であるユーザー テーブルにはデータがありません。
マルチマスターとカスケード レプリケーションの組み合わせアーキテクチャ
マルチマスターとカスケード レプリケーション アーキテクチャを組み合わせることで、シングルポイント マスターの問題とスレーブ カスケード遅延の問題が解決されます。
- master1: docker、ポート 3314
- master2: docker、ポート 3315
$ cat /home/mysql/docker-data/3315/conf/my.cnf [mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' symbolic-links=0 lower_case_table_names=1 server-id=1403314 log-bin=mysql-bin binlog-format=ROW auto_increment_increment=2 # 几个主库,这里就配几 auto_increment_offset=1 # 每个主库的偏移量需要不一致 gtid_mode=ON enforce-gtid-consistency=true binlog-do-db=order # 要同步的数据库
$ docker run --name mysql3314 -p 3314:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=order -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3314/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3314/data/:/var/lib/mysql -v /home/mysql/docker-data/3314/logs/:/var/log/mysql -d mysql:5.7
mysql> GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec)
mysql> change master to master_host='172.23.252.98',master_port=3315,master_user='repluser',master_password='123456',master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.03 sec) mysql> start slave; Query OK, 0 rows affected (0.00 sec)
マスター 2 の構成はマスター 1 と似ています。 主な違いは、my.cnf に一貫性を保つ必要がある属性があることです:
auto_increment_offset=2 # 每个主库的偏移量需要不一致
mysql> create table t_order(id int primary key auto_increment, name varchar(20)); Query OK, 0 rows affected (0.01 sec) mysql> insert into t_order(name) values("A"); Query OK, 1 row affected (0.01 sec) mysql> insert into t_order(name) values("B"); Query OK, 1 row affected (0.00 sec) mysql> select * from t_order; +----+------+ | id | name | +----+------+ | 2 | A | | 4 | B | +----+------+ 2 rows in set (0.00 sec)
mysql> select * from t_order; +----+------+ | id | name | +----+------+ | 2 | A | | 4 | B | +----+------+ 2 rows in set (0.00 sec) mysql> insert into t_order(name) values("E"); Query OK, 1 row affected (0.00 sec) mysql> select * from t_order; +----+------+ | id | name | +----+------+ | 2 | A | | 4 | B | | 5 | E | +----+------+ 3 rows in set (0.00 sec)
$ sudo apt-get install -y keepalived
$ cat /etc/keepalived/keepalived3314.conf! Configuration File for keepalived#简单的头部,这里主要可以做邮件通知报警等的设置,此处就暂不配置了;global_defs { #notificationd LVS_DEVEL}#预先定义一个脚本,方便后面调用,也可以定义多个,方便选择;vrrp_script chk_haproxy { script "/etc/keepalived/chkmysql.sh" #具体脚本路径 interval 2 #脚本循环运行间隔}#VRRP虚拟路由冗余协议配置vrrp_instance VI_1 { #VI_1 是自定义的名称; state BACKUP #MASTER表示是一台主设备,BACKUP表示为备用设备【我们这里因为设置为开启不抢占,所以都设置为备用】 nopreempt #开启不抢占 interface eth0 #指定VIP需要绑定的物理网卡 virtual_router_id 11 #VRID虚拟路由标识,也叫做分组名称,该组内的设备需要相同 priority 130 #定义这台设备的优先级 1-254;开启了不抢占,所以此处优先级必须高于另一台 advert_int 1 #生存检测时的组播信息发送间隔,组内一致 authentication { #设置验证信息,组内一致 auth_type PASS #有PASS 和 AH 两种,常用 PASS auth_pass asd #密码 } virtual_ipaddress { 172.23.252.200 #指定VIP地址,组内一致,可以设置多个IP } track_script { #使用在这个域中使用预先定义的脚本,上面定义的 chk_haproxy } #notify_backup "/etc/init.d/haproxy restart" #表示当切换到backup状态时,要执行的脚本 #notify_fault "/etc/init.d/haproxy stop" #故障时执行的脚本}
$ cat /etc/keepalived/chkmysql.s.sh#!/bin/bashmysql -uroot -proot -P 3314 -e "show status;" > /dev/null 2>&1if [ $? == 0 ];then echo "$host mysql login successfully" exit 0else echo "$host login failed" killall keepalived exit 2fi
以上がMySQL レプリケーション アーキテクチャをマスターする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQLはオープンソースのリレーショナルデータベース管理システムであり、主にデータを迅速かつ確実に保存および取得するために使用されます。その実用的な原則には、クライアントリクエスト、クエリ解像度、クエリの実行、返品結果が含まれます。使用法の例には、テーブルの作成、データの挿入とクエリ、および参加操作などの高度な機能が含まれます。一般的なエラーには、SQL構文、データ型、およびアクセス許可、および最適化の提案には、インデックスの使用、最適化されたクエリ、およびテーブルの分割が含まれます。

MySQLは、そのパフォーマンス、信頼性、使いやすさ、コミュニティサポートに選択されています。 1.MYSQLは、複数のデータ型と高度なクエリ操作をサポートし、効率的なデータストレージおよび検索機能を提供します。 2.クライアントサーバーアーキテクチャと複数のストレージエンジンを採用して、トランザクションとクエリの最適化をサポートします。 3.使いやすく、さまざまなオペレーティングシステムとプログラミング言語をサポートしています。 4.強力なコミュニティサポートを提供し、豊富なリソースとソリューションを提供します。

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

データベースとプログラミングにおけるMySQLの位置は非常に重要です。これは、さまざまなアプリケーションシナリオで広く使用されているオープンソースのリレーショナルデータベース管理システムです。 1)MySQLは、効率的なデータストレージ、組織、および検索機能を提供し、Web、モバイル、およびエンタープライズレベルのシステムをサポートします。 2)クライアントサーバーアーキテクチャを使用し、複数のストレージエンジンとインデックスの最適化をサポートします。 3)基本的な使用には、テーブルの作成とデータの挿入が含まれ、高度な使用法にはマルチテーブル結合と複雑なクエリが含まれます。 4)SQL構文エラーやパフォーマンスの問題などのよくある質問は、説明コマンドとスロークエリログを介してデバッグできます。 5)パフォーマンス最適化方法には、インデックスの合理的な使用、最適化されたクエリ、およびキャッシュの使用が含まれます。ベストプラクティスには、トランザクションと準備された星の使用が含まれます

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

SQLデータベースの構築には、DBMSの選択が必要です。 DBMSのインストール。データベースの作成。テーブルの作成;データの挿入;データの取得。データの更新。データの削除。ユーザーの管理。データベースのバックアップ。
