Maison  >  Article  >  base de données  >  MySQL5.7.17 Explication détaillée initiale de la réplication de groupe

MySQL5.7.17 Explication détaillée initiale de la réplication de groupe

黄舟
黄舟original
2017-03-22 13:51:511574parcourir

1, À propos de Réplication de groupe

La réplication basée sur le groupe est une méthode utilisée dans la technologie des systèmes tolérants aux pannes. Le groupe de réplication est composé de plusieurs serveurs (nœuds) pouvant communiquer entre eux.

Dans la couche de communication, la réplication de groupe implémente une série de mécanismes : tels que la livraison atomique des messages et l'ordre total des messages.

Ces mécanismes atomiques et abstraits fournissent un support solide pour la mise en œuvre de solutions de réplication de bases de données plus avancées.

MySQL Sur la base de ces technologies et concepts, Group Replication implémente un protocole de réplication multi-maître entièrement mis à jour.

En bref, un groupe de réplication est un groupe de nœuds. Chaque nœud peut exécuter des transactions indépendamment, et les transactions de lecture et d'écriture seront coordonnées avec les autres nœuds du groupe avant d'être validées.

Par conséquent, lorsqu'une transaction est prête à être soumise, elle sera automatiquement diffusée de manière atomique au sein du groupe pour informer les autres nœuds du contenu qui a été modifié/des transactions qui ont été effectuées.

Cette méthode de diffusion atomique maintient cette transaction dans le même ordre sur chaque nœud.

Cela signifie que chaque nœud reçoit le même journal de transactions dans le même ordre, donc chaque nœud relit ces journaux de transactions dans le même ordre, et finalement l'ensemble du groupe maintient un état complètement cohérent.

Cependant, il peut y avoir un conflit de ressources entre les transactions exécutées sur différents nœuds. Ce phénomène se produit facilement dans deux transactions simultanées différentes.

Supposons qu'il y ait deux transactions simultanées sur des nœuds différents qui mettent à jour la même ligne de données, un conflit de ressources se produira.

Face à cette situation, la réplication de groupe détermine que la transaction soumise en premier est une transaction valide et sera répétée dans l'ensemble du groupe. La transaction soumise plus tard sera directement interrompue, ou annulée, et finalement rejetée.

Par conséquent, il s'agit également d'un schéma de réplication sans partage, et chaque nœud enregistre une copie complète des données. Voir l'image suivante 01.png, qui décrit le flux de travail spécifique et peut être comparé de manière concise à d'autres solutions. Ce schéma de réplication est, dans une certaine mesure, similaire à la méthode de réplication de la machine à états de base de données (DBSM).

2, installez mysql5.7.17

Téléchargez MYSQL5.7.17 depuis le site officiel

Définissez le mappage /etc/hosts sur les trois serveurs de base de données, comme suit :

192.168.136.130    db1                                                                                         

192.168.136.133    db2

192.168.136.134    db3

192.168.130 db1                                                                                                                                             >


Serveur de base de données installé :

数据库服务器地址

端口

数据目录

Server-id

192.168.136.130(db1)

3317

/data/mysql/data

120136130

192.168.136.133(db2)

3317

/data/mysql/data

120136133

192.168.136.134(db3)

3317

/data/mysql/data

120136134

Adresse du serveur de base de données

Port
Répertoire de données td> ID du serveur 192.168.136.130 (db1) 3317

/data/mysql/data

[mysqld]
gtid_mode=ON
log-slave-updates=ON
enforce-gtid-consistency=ON
120136130


192.168.136.133 (db2)
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>
3317


/data/mysql/data
mysql> change  master to master_user='repl', 
master_password='rlpbright_1927@ys',  
master_host='db1',master_port=3317, master_auto_position=1;
Query OK, 0 rows affected, 2 warnings  (0.02 sec)
 
mysql>  start slave;
Query OK, 0 rows affected (0.04 sec)
 
mysql>
mysql> show  slave status\G
*************************** 1. row  ***************************
               Slave_IO_State: Waiting for  master to send event
                  Master_Host: db1
                  Master_User: repl
                  Master_Port: 3317
                Connect_Retry: 60
              Master_Log_File:  mysql-bin.000002
           Read_Master_Log_Pos: 445
               Relay_Log_File:  mysql-relay-bin.000002
                Relay_Log_Pos: 414
         Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
………………………………..
120136133 192.168.136.134 (db3) 3317 /data/mysql/data 120136134 3, build gtid Copie : Configurer gtid sur 3 my.cnfs : sur 3 instances MySQL, db1, db2, db3 alloue un compte : Construire le service gtid sur db2 et db3 :


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;


 

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn