MySQL 8.0.15 で MGR シングル マスターと複数スレーブを構成する方法

MySQL 8.0.15 で MGR シングル マスターと複数スレーブを構成する方法

1. はじめに

MySQL グループ レプリケーション (略して MGR) は文字通り MySQL グループ レプリケーションを意味しますが、実際には現在 MySQL 5.7 および MySQL 8.0 バージョンのみをサポートする高可用性クラスタ アーキテクチャです。

これは、2016 年 12 月に MySQL によって正式にリリースされた新しい高可用性および高スケーラビリティ ソリューションであり、高可用性、高スケーラビリティ、高信頼性の MySQL クラスタ サービスを提供します。

これは、グループ レプリケーションの概念に基づいた新しい高可用性クラスター アーキテクチャでもあり、MariaDB Galera Cluster と Percona XtraDB Cluster によって完全に参照されています。

MySQL グループ レプリケーションは、Paxos をベースとする XCom 上に構築されています。XCom インフラストラクチャのおかげで、ノード間のデータベース ステート マシンのトランザクションの一貫性が理論上も実践上も保証されます。

一般的なマスター スレーブ レプリケーションの概念を拡張して、複数のノードが一緒にデータベース クラスターを形成します。トランザクションの送信には、半数以上のノードの同意が必要です。ノード間のトランザクションの一貫性を確保するために、クラスター内の各ノードでデータベース ステート マシンが維持されます。

アドバンテージ:

ネイティブ レプリケーションと Paxos プロトコルに基づく、一貫性の高いグループ レプリケーション テクノロジー。

高い耐障害性、自動検出メカニズムを備えています。ダウンタイムが発生すると、問題のあるノードが自動的に削除され、他のノードは正常に使用できます (zk クラスターと同様)。異なるノード間でリソース競合が発生した場合は、先着順で処理され、自動ブレインスプリット保護メカニズムが組み込まれています。

高いスケーラビリティを備え、ノードはいつでもオンラインで追加および削除でき、新しいノードが他のノードと一致するまですべてのノードのステータスが自動的に同期され、新しいグループ情報が自動的に維持されます。

高い柔軟性、直接プラグインのインストール (5.7.17 以降には .so プラグインが付属)、シングルマスター モード、マルチマスター モード。シングルマスター モードでは、マスター データベースのみが読み取りと書き込みが可能で、その他のスレーブ データベースは super_read_only ステータスで追加され、読み取りのみ可能で書き込みはできません。障害が発生した場合、マスターが自動的に選択されます。

欠点:

まだ新しすぎて、あまり安定していません。パフォーマンスは PXC よりわずかに劣ります。少なくとも同じコンピュータ ルーム内では、非常に高いネットワーク安定性が必要です。

2. 環境の紹介

MySQL バージョン: 8.0.15

データベースポート: 3306

クラスターレプリケーションポート: 33006

MGR プラグイン: group_replication.so

10.115.88.18: シングルマスター

10.115.88.19: から

10.115.88.20: から

3. MySQL 8.0.15をインストールする

3.1.1 ダウンロードアドレス:

https://cdn.mysql.com//ダウンロード/MySQL-8.0/mysql-8.0.15-linux-glibc2.12-x86_64.tar

3.1.2: データベースをインストールする

解凍

tar -xf mysql-8.0.15-linux-glibc2.12-x86_64.tar -C /home/work

解凍されたディレクトリに入る

cd /home/work

tar xf mysql-8.0.15-linux-glibc2.12-x86_64.tar.gz

mv mysql-8.0.15-linux-glibc2.12-x86_64 mysql

rm -rf *.xz

権限を付与してデータディレクトリを作成する

cd /home/work

tar xf mysql-8.0.15-linux-glibc2.12-x86_64.tar.gz

mv mysql-8.0.15-linux-glibc2.12-x86_64 mysql

rm -rf *.xz
  chown -R 作業:作業 mysql
  mkdirデータ
  chown work:作業データ
  cd /home/work/mysql

   cd /home/work mkdir /home/work/relaylog chown -R work:work relaylog
  cd /home/work/mysql mkdir run chown -R work:work run

my.cnfファイルを追加する

[クライアント]
デフォルトの文字セット=utf8
ソケット=/home/work/mysql/run/mysql.sock

[mysqld]
ユーザー = 仕事 
ポート = 3306
ベースディレクトリ=/home/work/mysql
データディレクトリ=/home/work/data
ソケット=/home/work/mysql/run/mysql.sock
pid ファイル = /home/work/mysql/run/mysqld.pid
# さまざまなセキュリティリスクを防ぐために、シンボリックリンクを無効にすることをお勧めします
シンボリックリンク=0
小文字のテーブル名 = 1


サーバーID = 183306 
ログ bin = mysql bin
ログ bin インデックス = binlogs.index
binlog_format = 行
binlog_rows_query_log_events = オン
binlog_checksum = なし

スレーブパラレルタイプ = LOGICAL_CLOCK
スレーブ並列ワーカー = 4
スレーブ_preserve_commit_order = 1

#GITD
gtid_mode = オン
強制GTID一貫性 = 1
ログスレーブ更新 = 1
binlog_gtid_simple_recovery = 1

リレーログ = /home/work/リレーログ/リレー.log
リレーログインデックス = /home/work/relaylog/relay.index
master_info_repository = テーブル
リレーログ情報リポジトリ = テーブル

plugin_load="group_replication=group_replication.so"

#MGR
: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :
名前解決をスキップ
外部ロックをスキップ
文字セットサーバー=utf8
小文字テーブル名=1
イベントスケジューラ=オン
log_bin_trust_function_creators=オン

最大接続数 = 3000 
外部ロック = FALSE 
最大許容パケット = 32M 
ソートバッファサイズ = 8M 
結合バッファサイズ = 2M 
スレッドキャッシュサイズ = 300 
#クエリキャッシュサイズ = 64M 
#クエリキャッシュ制限 = 4M 
読み取りバッファサイズ = 8M

innodb_buffer_pool_size = 8096M
innodb_log_file_size = 128M
innodb_log_files_in_group = 2
innodb_log_buffer_size = 2M
innodb_flush_log_at_trx_commit = 1
同期バイナリログ = 1



[mysqld_safe]
ログエラー=/home/work/data/err.log

データベースを初期化する

bin/mysqld --initialize --basedir=/home/work/mysql --lower-case-table-names=1 --datadir=/home/work/data/ --user=work

起動ファイルをコピーする

cp サポートファイル/mysql.server /etc/init.d/mysqld

環境変数を追加する

echo 'export PATH=/home/work/mysql/bin:$PATH' >>/etc/profile
ソース /etc/profile

データベースの起動

/etc/init.d/mysqld を起動します

データベースのパスワードを変更する

'dashuaige' によって識別されるユーザー 'root'@'localhost' を変更します。 

権限をフラッシュします。

4. MGRマスターを構成する

4.1.1 my.cnfファイルの設定

binlog を次のように変更します。

サーバーID = 103306
ログ bin = mysql bin
ログ bin インデックス = binlogs.index
binlog_format = 行
binlog_rows_query_log_events = オン
binlog_checksum = なし

スレーブパラレルタイプ = LOGICAL_CLOCK
スレーブ並列ワーカー = 4
スレーブ_preserve_commit_order = 1

GTID を次のように変更します。

gtid_mode = オン
強制GTID一貫性 = 1
ログスレーブ更新 = 1
binlog_gtid_simple_recovery = 1

リレーログ = /home/work/リレーログ/リレー.log
リレーログインデックス = /home/work/relaylog/relay.index
master_info_repository = テーブル
リレーログ情報リポジトリ = テーブル

MGRプラグインを追加

plugin_load="group_replication=group_replication.so"

MGRパラメータを変更する

: : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : :

データベースを起動する

/etc/init.d/mysqld を再起動

4.1.2 各ホストのホスト解像度を設定する

[root@bj1-10-115-88-18 mysql]# cat /etc/hosts
127.0.0.1 ローカルホスト ローカルホスト.ローカルドメイン ローカルホスト4 ローカルホスト4.ローカルドメイン4
::1 ローカルホスト ローカルホスト.ローカルドメイン ローカルホスト6 ローカルホスト6.ローカルドメイン6
10.115.88.18 bj1-10-115-88-18
10.115.88.19 bj1-10-115-88-19
10.115.88.20 bj1-10-115-88-20

4.1.3 mgrの最初のマスターノードを構成する

10.115.88.18 ホスト上の mysql で次の手順が実行されます。

ステップ1: レプリケーション用のユーザーを作成する

sql_log_bin=0 を設定します。
'repuser123' によって識別されるユーザー repuser@'%' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを repuser@'%' に付与します。

'repuser123' によって識別されるユーザー repuser@'127.0.0.1' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを repuser@'127.0.0.1' に付与します。

'repuser123' で識別されるユーザー repuser@'localhost' を作成します。

repuser@'localhost' に *.* 上のレプリケーション スレーブ、レプリケーション クライアントを付与します。

sql_log_bin=1 を設定します。

ステップ2: レプリケーションに使用するユーザーを構成する

チャネル 'group_replication_recovery' のマスターを master_user='repuser'、master_password='repuser123' に変更します。

ステップ3: mysqlグループレプリケーションプラグインをインストールする

注意: my.cnf に plugin_load="group_replication=group_replication.so" と記述した場合、plugin group_replication soname 'group_replication.so' をインストールする必要はありません。


プラグインを表示してインストールが成功したかどうかを確認します。

ステップ4: グループを作成する(正式には、レプリケーショングループを初期化することです)

グローバル group_replication_bootstrap_group を on に設定します。
グループレプリケーションを開始します。
グローバル group_replication_bootstrap_group を off に設定します。

performance_schema.replication_group_members から * を選択します。

5. 残りの2つのノードを設定します。

すべてのスレーブ ホスト上の mysql で次の手順が実行されます。

ステップ1: レプリケーション用のユーザーを作成する

sql_log_bin=0 を設定します。
'repuser123' によって識別されるユーザー repuser@'%' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを repuser@'%' に付与します。

'repuser123' によって識別されるユーザー repuser@'127.0.0.1' を作成します。

*.* 上のレプリケーション スレーブ、レプリケーション クライアントを repuser@'127.0.0.1' に付与します。

'repuser123' で識別されるユーザー repuser@'localhost' を作成します。

repuser@'localhost' に *.* 上のレプリケーション スレーブ、レプリケーション クライアントを付与します。

sql_log_bin=1 を設定します。

ステップ2: レプリケーションに使用するユーザーを構成する

チャネル 'group_replication_recovery' のマスターを master_user='repuser'、master_password='repuser123' に変更します。

ステップ3: mysqlグループレプリケーションプラグインをインストールする

注意: my.cnf に plugin_load="group_replication=group_replication.so" と記述した場合、plugin group_replication soname 'group_replication.so' をインストールする必要はありません。


プラグインを表示してインストールが成功したかどうかを確認します。

ステップ4: 先ほど作成したレプリケーショングループに参加する

グループレプリケーションを開始します。
performance_schema.replication_group_members から * を選択します。

次のエラーが発生します

これはbinlogによって発生したエラーです。以下を実行してください

マスターをリセットします。
グループレプリケーションを開始します。
performance_schema.replication_group_members から * を選択します。

MGR ステータスを確認します。

MGRマスターの読み取りおよび書き込みステータスを表示します

MGRの2つのスレーブの読み取りおよび書き込みステータスを確認します

これで、MySQL 8.0.15 で MGR シングル マスターと複数のスレーブを構成する方法についての記事は終了です。MySQL MGR シングル マスターと複数のスレーブに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL MGR の利点は何ですか?
  • mysql MGR シングルマスターとマルチマスターモードの切り替えの知識ポイントの詳細な説明
  • mysql 8.0.18 mgr のインストールと切り替え機能
  • MySQL 8.0.18 はクローンプラグインを使用して MGR 実装を再構築します
  • MySQL 5.7 MGR シングルマスター決定マスターノード方式の詳細説明
  • MySQL MGR 構築時の一般的な問題と解決策

<<:  docker compose の使い方の詳しい説明

>>:  Vueは携帯電話のカメラとアルバムを呼び出す機能を実装します

推薦する

HTML でのテキストエリアの使用と一般的な問題およびケース分析

textarea タグはよく使われる HTML タグです。主に長いテキストを入力するときに改行するた...

Webpack で環境変数を使用するためのさまざまな正しい姿勢

目次前に書いてビジネスコードは環境変数を使用するwebpack.DefinePlugin プラグイン...

HTML テーブル マークアップ チュートリアル (15): テーブル タイトル

<br />このタグを使用すると、表のタイトルを直接追加し、タイトル テキストの配置プロ...

CSS3 Flex エラスティックレイアウトのサンプルコードの詳細な説明

1. 基本概念 //任意のコンテナを Flex レイアウトとして指定できます。 。箱{ ディスプレイ...

MySQL XA で分散トランザクションを実装する方法

目次序文XA プロトコルMySQL XA で分散トランザクションを実装する方法序文MySQL が単一...

CentOS7でMySQL 5.7をアンインストールする方法

MySQLに何がインストールされているか確認する rpm -qa | grep -i mysql n...

CSS3マスクレイヤーのくり抜き効果を実現するさまざまな方法

この記事では、マスク レイヤーの中空化を実現する 4 つの方法を紹介します。みんなと共有し、自分用の...

高同時実行シナリオにおける nginx 最適化の詳細な説明

日常の運用・保守作業では、nginx サービスが頻繁に使用され、nginx の高同時実行性によって生...

Nginx URL 書き換えメカニズムの原理と使用例

URL 書き換えは、Web サイトの優先ドメインを決定するのに役立ちます。同じリソース ページの複数...

React NativeプロジェクトでLottieアニメーションを使用する方法

Lottie は、Airbnb が開発した iOS、Android、React Native 向けの...

vite+vue3+element-plus プロジェクトをビルドする手順

viteを使用してvue3プロジェクトを構築するターミナルで次のコマンドを実行すると、Vite を使...

IEの送信フォームの記録履歴クリックリターン情報を実現するためのCSSスタイルコントロールはまだ残っています

これは主に CSS スタイルのコントロールと META タグです。コードをコピーコードは次のとおりで...

MySQL インデックスの原理と最適化の詳細な説明

序文この記事は Meituan の大物によって書かれました。とても素晴らしいので、皆さんと共有したい...

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

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

MySql インデックス使用戦略の分析

MySql インデックスインデックスの利点1. 一意のインデックスまたは主キー インデックスを作成す...