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は携帯電話のカメラとアルバムを呼び出す機能を実装します

推薦する

MySQL の WriteSet 並列レプリケーションの簡単な分析

【歴史的背景】私は 3 年間 MySQL-DBA として働いてきましたが、MySQL が「基本的に利...

MySQL のデバッグと最適化に関する 101 のヒントを共有する

MySQL は強力なオープンソース データベースです。データベース駆動型アプリケーションの数が増える...

jQueryはマウスドラッグ画像機能を実装します

この例では、jQuery を使用してマウス ドラッグ イメージ機能を実装します。まず、ラッパーを設定...

CSS で QR コードスキャンボックスを実装するためのサンプルコード

カメラを開くと通常はスキャンボックスが表示されますが、静的なQRコードではフォーカスを合わせたりスキ...

表には表示したい境界コードが表示されます

テーブルの共通プロパティ基本的な属性は、width (幅)、height (高さ)、border (...

Vue3 スロットの使用状況の概要

目次1. Vスロットの紹介2. 匿名スロット3. 名前付きスロット4. スコープ付きスロット5. 動...

モバイルプラットフォーム開発におけるメタタグの適用の詳細な説明

デスクトップ プラットフォームの Web レイアウトのメタ タグは誰もがよく知っています。これは常に...

docker で PostgreSQL データベースをインストールして永続化する方法

Dockerのインストール手順をスキップする1. postgresqlイメージを取得する docke...

Linux inotifyリアルタイムバックアップの実装方法の詳細説明

リアルタイム レプリケーションは、企業データをバックアップする最も重要な方法です。主に、ユーザーが送...

ドロップダウンメニューとスライドメニューのデザイン例

ドロップダウン メニューやスライド メニューを使用している Web サイトをたくさん見つけたので、私...

Docker で Zookeeper をインストールする (スタンドアロンおよびクラスター)

Docker を起動したら、利用できるオプションを見てみましょう。 公式のものがある場合は、もちろ...

Dockerプライベート倉庫の構築と利用の詳細説明

イメージは hub.docker.com に保存できますが、ネットワーク速度が比較的遅いです。内部環...

mysqlは指定された期間内の統計データを取得します

mysqlは指定された期間内の統計データを取得します年別統計 選択 カウント(*)、 DATE_FO...

Nginx 急ぎ購入 電流制限構成 実装分析

ビジネス上のニーズにより、急ぎの購入が発生することが多いため、ロード バランシング フロント エンド...

MySQL 数値型オーバーフローの処理方法

さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...