ホームページ  >  記事  >  データベース  >  MySQL5.7.17 グループレプリケーション初期詳細説明

MySQL5.7.17 グループレプリケーション初期詳細説明

黄舟
黄舟オリジナル
2017-03-22 13:51:511577ブラウズ

1グループレプリケーションについて

グループベースのレプリケーションは、フォールトトレラントシステムで使用されるテクノロジーです。レプリケーション グループは、相互に通信できる複数のサーバー (ノード) で構成されます。

通信層では、グループ レプリケーションは、アトミックなメッセージ配信やメッセージの全体的な順序付けなどの一連のメカニズムを実装します。

これらのアトミックかつ抽象的なメカニズムは、より高度なデータベース レプリケーション ソリューションの実装を強力にサポートします。

MySQL グループ レプリケーションは、これらのテクノロジーと概念に基づいており、完全に更新されたマルチマスター レプリケーション プロトコルを実装しています。

つまり、レプリケーション グループはノードのグループであり、各ノードはトランザクションを独立して実行でき、読み取りおよび書き込みトランザクションはコミットする前にグループ内の他のノードと調整されます。

したがって、トランザクションを送信する準備ができると、そのトランザクションはグループ内で自動的にアトミックにブロードキャストされ、どのコンテンツが変更されたか、どのトランザクションが実行されたかを他のノードに通知します。

このアトミック ブロードキャスト メソッドは、このトランザクションをすべてのノードで同じ順序に保ちます。

これは、各ノードが同じトランザクション ログを同じ順序で受信することを意味します。そのため、各ノードはこれらのトランザクション ログを同じ順序で再生し、最終的にグループ全体が完全に一貫した状態を維持します。

ただし、異なるノードで実行されるトランザクション間でリソースの競合が発生する可能性があります。この現象は、2 つの異なるトランザクションを同時に実行する場合に発生しやすくなります。

同じデータ行を更新する 2 つの同時トランザクションが異なるノード上にあると仮定すると、リソースの競合が発生します。

この状況に直面すると、グループ レプリケーションは、最初に送信されたトランザクションが有効なトランザクションであると判断し、後で送信されたトランザクションは直接中断またはロールバックされ、最終的に破棄されます。

したがって、これもシェアードナッシングレプリケーションスキームであり、各ノードはデータの完全なコピーを保存します。次の図 01.png を参照してください。この図では、特定のワークフローが説明されており、他のソリューションと簡潔に比較できます。このレプリケーション スキームは、データベース ステート マシン (DBSM) のレプリケーション方法にある程度似ています。

2mysql5.7.17 をインストールします

公式 Web サイトから MYSQL5.7.17 をダウンロードします

次のように 3 つの DB サーバーに /etc/hosts マッピングを設定します。

192.168 .136.130 db1 192.16 8.136.134 db3

データベースサーバーアドレス Directory
Server -id


192.168.136.130 (db1)3317/データ/mysql/data120136130192.168.136.133 (db2) 3317/data/mysql/data 120136133192.168.136.134 (db3)3317 /data/mysql/data120136134、ビルドコピー:
[mysqld]
gtid_mode=ON
log-slave-updates=ON
enforce-gtid-consistency=ON

3

gtid

3 で gtid を構成しますmy.cnf:

3 つの mysql インスタンス上の
db1、db2、db3 割り当てられたアカウント:
mysql> GRANT  REPLICATION SLAVE ON *.* TO 'repl'@'192.168.%' IDENTIFIED BY  'rlpbright_1927@ys';
Query OK, 0 rows affected, 1 warning  (0.00 sec)
 
mysql>

db2、db3 上に gtid サービスを構築します: りー



4
,开启Group Replication

有了gtid之后,开启group replication就方便多了。首先需要安装group replication插件

mysql> INSTALL PLUGIN group_replication  SONAME 'group_replication.so';
Query OK, 0 rows affected (0.03 sec)
 
 
mysql> show  plugins;
+----------------------------+----------+--------------------+----------------------+---------+
| Name        | Status   | Type        | Library          | License |
+----------------------------+----------+--------------------+----------------------+---------+
| binlog                 | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
…………
|  group_replication          |  ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
+----------------------------+----------+--------------------+----------------------+---------+
45 rows in set  (0.00 sec)


配置参数,db1(master)上:

mysql> set @@global.transaction_write_set_extraction =  XXHASH64
mysql> set @@global.group_replication_start_on_boot = OFF
mysql> set @@global.group_replication_bootstrap_group = OFF
mysql> set @@global.group_replication_group_name = 0c6d3e5f-90e2-11e6-802e-842b2b5909d6
mysql> set @@global.group_replication_local_address = 'db1:6606'
mysql> set @@global.group_replication_group_seeds = 'db2:6607,db3:6608'


配置参数,db2(slave1)上:

mysql> set @@global.transaction_write_set_extraction =  XXHASH64
mysql> set @@global.group_replication_start_on_boot = OFF
mysql> set @@global.group_replication_bootstrap_group = OFF
mysql> set @@global.group_replication_group_name = 0c6d3e5f-90e2-11e6-802e-842b2b5909d6
mysql> set @@global.group_replication_local_address = 'db2:6607'
mysql> set @@global.group_replication_group_seeds = 'db111:6606,127.0.0.1:db3'


 

配置参数,db3(slave2)上:

mysql> set @@global.transaction_write_set_extraction =  XXHASH64
mysql> set @@global.group_replication_start_on_boot = OFF
mysql> set @@global.group_replication_bootstrap_group = OFF
mysql> set @@global.group_replication_group_name = 0c6d3e5f-90e2-11e6-802e-842b2b5909d6
mysql> set @@global.group_replication_local_address = 'db3:6608'
mysql> set @@global.group_replication_group_seeds = 'db1:6607,db2:6606'


BTY
:如果之前没有配置transaction_write_set_extraction=XXHASH64,这里修改之后之前创建的数据库是没有办法执行插入操作的。所有如果想在线完成Group Replication的改造需要保证之前已经设置了transaction_write_set_extraction=XXHASH64。

开始构建集群,在db1(master)上执行:

# 构建集群
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='rlpbright_1927@ys'FORCHANNEL'group_replication_recovery';
#开启group_replication
 
SETGLOBAL  group_replication_bootstrap_group=ON;
START  GROUP_REPLICATION;
SETGLOBAL  group_replication_bootstrap_group=OFF;


 

 

db2、db3上加入

stop slave;
START GROUP_REPLICATION;

 

 

在db1上查看集群信息:

mysql>  SELECT * FROM performance_schema.replication_group_members;


 

以上がMySQL5.7.17 グループレプリケーション初期詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。