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).
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 :
|
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 |
/data/mysql/data
[mysqld] gtid_mode=ON log-slave-updates=ON enforce-gtid-consistency=ON Copier après la connexion |
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> Copier après la connexion |
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 ……………………………….. Copier après la connexion |
有了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) Copier après la connexion |
配置参数,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' Copier après la connexion |
配置参数,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' Copier après la connexion |
配置参数,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' Copier après la connexion |
BTY:如果之前没有配置transaction_write_set_extraction=XXHASH64,这里修改之后之前创建的数据库是没有办法执行插入操作的。所有如果想在线完成Group Replication的改造需要保证之前已经设置了transaction_write_set_extraction=XXHASH64。
开始构建集群,在db1(master)上执行:
# 构建集群 Copier après la connexion CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='rlpbright_1927@ys'FORCHANNEL'group_replication_recovery'; Copier après la connexion #开启group_replication Copier après la connexion SETGLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SETGLOBAL group_replication_bootstrap_group=OFF; Copier après la connexion |
db2、db3上加入
stop slave; START GROUP_REPLICATION; Copier après la connexion |
在db1上查看集群信息:
mysql> SELECT * FROM performance_schema.replication_group_members; Copier après la connexion |
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!