グループベースのレプリケーションは、フォールトトレラントシステムで使用されるテクノロジーです。レプリケーション グループは、相互に通信できる複数のサーバー (ノード) で構成されます。
通信層では、グループ レプリケーションは、アトミックなメッセージ配信やメッセージの全体的な順序付けなどの一連のメカニズムを実装します。
これらのアトミックかつ抽象的なメカニズムは、より高度なデータベース レプリケーション ソリューションの実装を強力にサポートします。
MySQL グループ レプリケーションは、これらのテクノロジーと概念に基づいており、完全に更新されたマルチマスター レプリケーション プロトコルを実装しています。
つまり、レプリケーション グループはノードのグループであり、各ノードはトランザクションを独立して実行でき、読み取りおよび書き込みトランザクションはコミットする前にグループ内の他のノードと調整されます。
したがって、トランザクションを送信する準備ができると、そのトランザクションはグループ内で自動的にアトミックにブロードキャストされ、どのコンテンツが変更されたか、どのトランザクションが実行されたかを他のノードに通知します。
このアトミック ブロードキャスト メソッドは、このトランザクションをすべてのノードで同じ順序に保ちます。
これは、各ノードが同じトランザクション ログを同じ順序で受信することを意味します。そのため、各ノードはこれらのトランザクション ログを同じ順序で再生し、最終的にグループ全体が完全に一貫した状態を維持します。
ただし、異なるノードで実行されるトランザクション間でリソースの競合が発生する可能性があります。この現象は、2 つの異なるトランザクションを同時に実行する場合に発生しやすくなります。
同じデータ行を更新する 2 つの同時トランザクションが異なるノード上にあると仮定すると、リソースの競合が発生します。
この状況に直面すると、グループ レプリケーションは、最初に送信されたトランザクションが有効なトランザクションであると判断し、後で送信されたトランザクションは直接中断またはロールバックされ、最終的に破棄されます。
したがって、これもシェアードナッシングレプリケーションスキームであり、各ノードはデータの完全なコピーを保存します。次の図 01.png を参照してください。この図では、特定のワークフローが説明されており、他のソリューションと簡潔に比較できます。このレプリケーション スキームは、データベース ステート マシン (DBSM) のレプリケーション方法にある程度似ています。
公式 Web サイトから MYSQL5.7.17 をダウンロードします
次のように 3 つの DB サーバーに /etc/hosts マッピングを設定します。
データベースサーバーアドレス Directory |
3317 | /データ/mysql/data | 120136130 | |
3317 | /data/mysql/data | 120136133 | |
3317 | /data/mysql/data | 120136134 |
|
3 | 、ビルドgtid | コピー: 3 で gtid を構成しますmy.cnf: |
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>
有了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 サイトの他の関連記事を参照してください。