Réplication maître-esclave MySQL (4) - La construction de l'architecture de réplication en cascade

Réplication maître-esclave MySQL (4) - La construction de l'architecture de réplication en cascade

Les capacités de réplication de MySQL sont à la base de la création de grandes applications hautes performances. Distribuez les données MySQL sur plusieurs systèmes. Ce mécanisme de distribution est réalisé en copiant les données d'un certain maître MySQL (maître) vers d'autres maîtres (esclaves) et en l'exécutant à nouveau. Pendant le processus de réplication, un serveur agit en tant que serveur maître et un ou plusieurs autres serveurs agissent en tant que serveurs esclaves.

Premièrement, l'architecture de réplication maître-esclave couramment utilisée par MySQL

L'architecture de réplication doit suivre les principes de base suivants:
(1) Chaque esclave ne peut avoir qu'un seul maître;
(2) Chaque esclave a un ID serveur unique (server-id);
(3) Chaque maître peut en avoir un ou De nombreux esclaves;
(4) En définissant log_slave_updates, un esclave peut devenir le maître d'autres esclaves.

L'architecture de réplication maître-esclave couramment utilisée de MySQL est la suivante:

1. Un maître et un esclave ou un maître et plusieurs esclaves

Une architecture de réplication maître-esclave est un système de réplication composé d'un maître et d'un esclave. L'architecture de réplication mono-maître-multi-esclave est composée d'un maître et de plusieurs esclaves.Les esclaves ne communiquent pas entre eux, mais ne peuvent communiquer qu'avec le maître. Dans les scénarios d'application réels, plus de 90% de la réplication MySQL est un modèle d'architecture dans lequel un maître réplique vers un ou plusieurs esclaves, ce qui est principalement utilisé pour les applications avec une pression de lecture élevée. L'architecture de réplication multi-esclave à un seul maître est illustrée dans la figure suivante:
Insérez la description de l'image ici

Cette structure convient à moins d'opérations d'écriture et à de nombreuses opérations de lecture. L'opération de lecture peut être distribuée à d'autres esclaves, réduisant ainsi la pression sur le maître. Cependant, lorsque l'esclave augmente jusqu'à un certain nombre, la charge de l'esclave sur le maître et la bande passante du réseau deviendront le goulot d'étranglement.
Les avantages de cette structure sont: simple, flexible et capable de répondre aux besoins de la plupart des applications.

2. Réplication maître maître (maître-maître)

Les deux serveurs de l'architecture de réplication maître-maître sont à la fois le maître et l'esclave de l'autre serveur. De cette manière, les modifications apportées par l'une ou l'autre des parties seront répliquées dans la base de données de l'autre partie. L'architecture de réplication maître-maître est illustrée dans la figure suivante:
Insérez la description de l'image ici
Le plus gros problème avec l'architecture de réplication maître-maître est les conflits de mise à jour. En supposant qu'une table n'a qu'une seule ligne et une seule colonne de données, sa valeur est 1. Si deux serveurs exécutent les instructions suivantes
en même temps: exécutez sur le premier serveur:
mysql> UPDATE tbl SET col = col + 1;
exécutez sur le deuxième serveur :
Mysql> UPDATE tbl SET col = col * 2;
Alors quel est le résultat? Un serveur est 4 et l'autre serveur est 3. Cependant, cela ne produit pas d'erreur.

3. Architecture de réplication en cascade (maître-esclaves-esclaves)

Dans certains scénarios d'application, la pression de lecture et d'écriture peut être très différente et la pression de lecture est particulièrement élevée Un maître peut avoir besoin de 10 esclaves ou plus pour supporter la pression de lecture. À ce stade, le maître sera plus fatigant, car il y a plus de threads d'E / S esclaves connectés uniquement, donc lorsque la pression d'écriture est légèrement supérieure, le maître consommera plus de ressources en raison de la réplication, ce qui peut facilement entraîner des retards de réplication. Temps.

Dans ce cas, nous pouvons utiliser MySQL pour enregistrer les informations du journal binaire des modifications générées par la réplication côté esclave, c'est-à-dire activer l'option log-slave-update. Ensuite, la réplication secondaire est utilisée pour réduire la pression du côté maître due à la réplication. L'architecture de réplication en cascade est illustrée dans la figure suivante:
Insérez la description de l'image ici

4. Master-Master avec esclaves avec serveur esclave

L'architecture de réplication maître-maître avec des serveurs esclaves est illustrée dans la figure ci-dessous:
Insérez la description de l'image ici

Deuxièmement, la construction d'une architecture de réplication en cascade

1. Environnement système

Version de MySQL: MySQL5.7

Version Linux: CentOS7.0

Adresse principale: 192.168.1.11

L'adresse de la base de données esclave (esclave, qui sert de maître de 13): 192.168.1.12

Adresse esclave: 192.168.1.13

2. La construction maître-esclave entre 192.168.1.11 et 192.168.1.12

Voir l'article précédent: Réplication maître-esclave MySQL (2) - la construction d'une architecture maître-esclave (https://blog.csdn.net/weixin_44377973/article/details/107136733).

3. Construction maître-esclave entre 192.168.1.12 et 192.168.1.13

1. Configurez le serveur 192.168.1.12

(1) Ajoutez le contenu suivant dans le fichier de configuration

[mysqld]
log-bin=mysql-bin
logbin_format=mixed
####  把relay log中的记录写入binlog日志
log_slave_updates=1

(2) Créer un utilisateur de copie

mysql> grant replication slave on *.* to 'repl'@'192.168.1.%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,authentication_string from mysql.user;
+-------------+---------------+-------------------------------------------+
| host        | user          | authentication_string                     |
+-------------+---------------+-------------------------------------------+
| localhost   | root          | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost   | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost   | mysql.sys     | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| %           | wgx           | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 192.168.1.% | repl          | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------+---------------+-------------------------------------------+
5 rows in set (0.02 sec)

(3) Exportez les données dans la base de données et enregistrez le fichier journal et l'emplacement

Étape 1. Avant d'exporter la base de données, verrouillez la base de données pour empêcher toute opération d'écriture dans la base de données.

mysql> flush tables with read lock;
Query OK, 0 rows affected (0.01 sec)

mysql> use hist;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> drop table t1;
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lock

étape2, exportez toutes les données de la base de données dans la bibliothèque principale

[root@Mysql11 ~]# mysqldump -uroot -p123456 --all-databases --master-data=2 --events > /tmp/all_bak.sql

Étape 3, copiez les données de sauvegarde de la base de données maître dans la base de données esclave

[root@Mysql11 ~]# scp /tmp/all_bak.sql 192.168.1.13:/tmp/
[email protected]'s password: 
all_bak.sql                                          100%  834KB 833.7KB/s   00:00    
[root@Mysql11 ~]# 

step4, déverrouiller, afficher les informations du journal binaire

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000005 |   866214 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

2. Configurez le serveur 192.168.1.13

(1) Ajoutez le contenu suivant dans le fichier de configuration

[mysqld]
server-id=3
relay-log = mysql-relay-log

(2) Une fois la configuration terminée, redémarrez le service mysql et vérifiez les informations du fichier journal de relais:

[root@localhost ~]# ll /var/lib/mysql/mysql-relay*
-rw-r-----. 1 mysql mysql 207 7月   5 21:31 /var/lib/mysql/mysql-relay-log.000001
-rw-r-----. 1 mysql mysql 320 7月   5 21:31 /var/lib/mysql/mysql-relay-log.000002
-rw-r-----. 1 mysql mysql  76 7月   5 21:31 /var/lib/mysql/mysql-relay-log.index

(3) Importez les données sur le serveur principal

[root@localhost ~]# mysql -uroot -p123456 < /tmp/all_bak.sql 

(4) Configurer les paramètres de synchronisation maître-esclave

Exécutez les commandes suivantes sur le serveur esclave:

change master to 
master_host='192.168.1.12',
master_port=3306,
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000005',
master_log_pos=866214;

(5) Ouvrez le service depuis la bibliothèque (démarrez les threads IO et SQL)

mysql> start slave;
Query OK, 0 rows affected (0.01 sec)

(6) Afficher l'état de la réplication maître-esclave

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.12
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000005
          Read_Master_Log_Pos: 866214
               Relay_Log_File: mysql-relay-log.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000005
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 866214
              Relay_Log_Space: 527
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 2
                  Master_UUID: 800e4f85-2e00-11ea-a7ce-000c29cd5d3e
             Master_Info_File: /var/lib/mysql/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind: 
      Last_IO_Error_Timestamp: 
     Last_SQL_Error_Timestamp: 
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
           Retrieved_Gtid_Set: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

Quatrièmement, testez l'état de fonctionnement de la réplication maître-esclave

1. Créez une base de données sur le serveur 192.168.1.11, ajoutez une table et entrez des données

mysql> create database mydb;
Query OK, 1 row affected (0.04 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
7 rows in set (0.00 sec)

mysql> use mydb;
Database changed
mysql> create table goods(id int primary key auto_increment,name char(20));
Query OK, 0 rows affected (0.28 sec)

mysql> insert into goods(name) values('mobile');
Query OK, 1 row affected (0.09 sec)

mysql> insert into goods(name) values('computer');
Query OK, 1 row affected (0.03 sec)

mysql> 
mysql> select * from goods;
+----+----------+
| id | name     |
+----+----------+
|  1 | mobile   |
|  2 | computer |
+----+----------+
2 rows in set (0.00 sec)

2. Affichez les données de la bibliothèque esclave 192.168.1.12

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
7 rows in set (0.00 sec)

mysql> 
mysql> use mydb;
Database changed
mysql> select * from goods;
+----+----------+
| id | name     |
+----+----------+
|  1 | mobile   |
|  2 | computer |
+----+----------+
2 rows in set (0.00 sec)

3. Afficher les données de la bibliothèque esclave 192.168.1.13

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mydb               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
7 rows in set (0.00 sec)

mysql> use mydb;
Database changed
mysql> select * from goods;
+----+----------+
| id | name     |
+----+----------+
|  1 | mobile   |
|  2 | computer |
+----+----------+
2 rows in set (0.00 sec)

4. Supprimez mydb sur 192.168.1.11

mysql> drop database mydb;
Query OK, 1 row affected (0.58 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
6 rows in set (0.00 sec)

5. Affichez les données sur 192.168.1.12

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
6 rows in set (0.00 sec)

6. Affichez les données sur 192.168.1.13

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hist               |
| mysql              |
| performance_schema |
| sys                |
| wanggx             |
+--------------------+
6 rows in set (0.00 sec)

Je suppose que tu aimes

Origine blog.csdn.net/weixin_44377973/article/details/107145637
conseillé
Classement