Maison  >  Article  >  base de données  >  La réplication de groupe de base de données MySQL crée le piège de marcher sur l'adresse IP

La réplication de groupe de base de données MySQL crée le piège de marcher sur l'adresse IP

黄舟
黄舟original
2017-02-07 11:42:353018parcourir

Introduction

La fonction de réplication de MySQL version 5.7.17 a inauguré une nouvelle fonctionnalité, la fonction étoile brillante Réplication de groupe. Naturellement, il est indispensable d'avoir une certaine expérience en matière de construction et de tests, mais lors du processus de construction, nous avons rencontré des pièges liés au nom d'hôte. Ce qui suit expliquera comment le construire et le processus pour rencontrer cet écueil.

2

Attendez-vous

à créer deux instances 3306 et 3307 sur la machine virtuelle 192.168.56.102 et une instance 3308 sur 192.168.56.105. Selon les caractéristiques, vous devez sélectionner un nœud comme nœud pour démarrer la réplication de groupe. Cet article sélectionne 3306 comme nœud de démarrage.

3

Construire

instance 192.168.56.102:3306

mon contenu clé.cnf :

[mysqld3306]
gtid-mode=on
enforce-gtid-consistency=on
 
master-info-repository=table
relay-log-info-repository=table
 
binlog-checksum=none
log-slave-updates=on
binlog-format=row
 
transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="2dc52aec-cfea-11e6-95f3-080027264cfa"
loose-group_replication_start_on_boot=off # 开机启动OFF
loose-group_replication_local_address="192.168.56.102:33061"
loose-group_replication_group_seeds="192.168.56.102:33061,192.168.56.102:33071,192.168.56.105:33081"
loose-group_replication_bootstrap_group=off # 作为首个启动OFF

Remarque :

1. Les ports répertoriés dans la configuration sont requis et non utilisés.

2. Le format de group_name est UUID, vous pouvez exécuter select uuid();

Créer un compte de copie :

mysql> set sql_log_bin=0;
mysql> create user 'group_repl'@'%' identified by 'group_repl';
mysql> grant replication slave on *.* to 'group_repl'@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;

Créer une chaîne de copie :

mysql> change master to master_user='group_repl',master_password='group_repl' for channel 'group_replication_recovery';


Charger le plugin :

mysql> install plugin group_replication soname 'group_replication.so';

Démarrer la réplication de groupe en tant que premier nœud :

mysql> set @@global.group_replication_bootstrap_group=1;
mysql> start group_replication;
mysql> set @@global.group_replication_bootstrap_group=0;
mysql> select * from performance_schema.replication_group_members\G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 4f987d01-cff0-11e6-9afa-080027264cfa
 MEMBER_HOST: localhost
 MEMBER_PORT: 3306
MEMBER_STATE: ONLINE

Instances 192.168.56.102:3307 et 192.168.56.105:3308

La plupart des opérations des instances restantes sont les mêmes que 102:3306. Seules les différentes parties sont listées ci-dessous :

1 Dans my.cnf, les paramètres de 102:3307 : <.>

loose-group_replication_local_address="192.168.56.102:33071",105:3308的参数:loose-group_replication_local_address="192.168.56.105:33081";
2. Après avoir créé le compte de réplication, répliqué le canal et chargé le plug-in, 102:3307 et 105:3308 n'ont qu'à exécuter : start group_replication;.

4

Vérifiez

Pour vérifier si vous souhaitez rejoindre la réplication de groupe, interrogez simplement la table performance_schema.replication_group_members. Voici la situation de 102:3307 rejoignant le groupe :

mysql> select * from performance_schema.replication_group_members\G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 4f987d01-cff0-11e6-9afa-080027264cfa
 MEMBER_HOST: localhost
 MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: d8f7405d-cff1-11e6-b449-080027264cfa
 MEMBER_HOST: localhost
 MEMBER_PORT: 3307
MEMBER_STATE: ONLINE

Vous pouvez voir qu'il y a déjà deux nœuds formant le groupe, à savoir 102:3306 et 102:3307.

5

Problème

Quand j'ai commencé à rejoindre 105:3308, quelque chose s'est mal passé. On peut constater que 3308 n'a pas pu rejoindre le groupe :

.

mysql> select * from performance_schema.replication_group_members;
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 4f987d01-cff0-11e6-9afa-080027264cfa
 MEMBER_HOST: localhost
 MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 645aef9a-d000-11e6-a756-080027d54077
 MEMBER_HOST: localhost
 MEMBER_PORT: 3308
MEMBER_STATE: RECOVERING
*************************** 3. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: d8f7405d-cff1-11e6-b449-080027264cfa
 MEMBER_HOST: localhost
 MEMBER_PORT: 3307
MEMBER_STATE: ONLINE

D'après le journal des erreurs :

...
2017-01-02T17:35:02.123501Z 32 [Note] &#39;CHANGE MASTER TO FOR CHANNEL &#39;group_replication_recovery&#39; executed&#39;. 
Previous state master_host=&#39;<NULL>&#39;, master_port= 0, master_log_file=&#39;&#39;, master_log_pos= 4, master_bind=&#39;&#39;. 
New state master_host=&#39;localhost&#39;, master_port= 3306, master_log_file=&#39;&#39;, master_log_pos= 4, master_bind=&#39;&#39;.
...
2017-01-02T17:35:02.133661Z 34 [ERROR] Slave I/O for channel &#39;group_replication_recovery&#39;: error connecting to master &#39;group_repl@localhost:3306&#39; - retry-time: 60
  retries: 1, Error_code: 2003
...
On peut deviner que le problème vient de MEMBER_HOST, alors remplacez le nom d'hôte par l'adresse IP. Après tests, cela s'est avéré réalisable :

mysql> select * from performance_schema.replication_group_members\G
*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 4f987d01-cff0-11e6-9afa-080027264cfa
 MEMBER_HOST: 192.168.56.102
 MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 645aef9a-d000-11e6-a756-080027d54077
 MEMBER_HOST: 192.168.56.105
 MEMBER_PORT: 3308
MEMBER_STATE: ONLINE
*************************** 3. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: d8f7405d-cff1-11e6-b449-080027264cfa
 MEMBER_HOST: 192.168.56.102
 MEMBER_PORT: 3307
MEMBER_STATE: ONLINE

Mais dans les circonstances réelles, il est impossible de définir le nom d'hôte sur IP. Ainsi, après de nombreuses tentatives, j'ai découvert que ce problème peut être résolu des manières suivantes :

1. Définir différents noms d'hôte pour différentes machines physiques (machines virtuelles)

2. / hosts permet d'effectuer un ping entre les machines physiques (machines virtuelles) via les noms d'hôtes.

Après avoir terminé le travail ci-dessus, vérifiez enfin les membres du groupe :

mysql> select * from performance_schema.replication_group_members
\G*************************** 1. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 4f987d01-cff0-11e6-9afa-080027264cfa
 MEMBER_HOST: local-102
 MEMBER_PORT: 3306
MEMBER_STATE: ONLINE
*************************** 2. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: 645aef9a-d000-11e6-a756-080027d54077
 MEMBER_HOST: local-105
 MEMBER_PORT: 3308
MEMBER_STATE: ONLINE
*************************** 3. row ***************************
CHANNEL_NAME: group_replication_applier
   MEMBER_ID: d8f7405d-cff1-11e6-b449-080027264cfa
 MEMBER_HOST: local-102
 MEMBER_PORT: 3307
MEMBER_STATE: ONLINE

Problème résolu. Une autre chose à noter est que même les instances situées sous une machine physique (machine virtuelle) doivent avoir une relation de mappage entre le nom d'hôte et l'adresse IP pour former un groupe. La raison pour laquelle des groupes peuvent être formés sous la même machine physique dans la situation localhost ci-dessus est que le système a une relation de mappage de 127.0.0.1 à localhost par défaut.

6

Résumé

Le problème ci-dessus se produit car MySQL utilise directement le nom d'hôte du système d'exploitation au lieu de l'adresse IP couramment utilisée lors de la configuration de la réplication. bug, et quelqu'un a soumis une demande de bug sur le site officiel quelques jours plus tôt que moi. Il est recommandé que lors de la configuration de la réplication de groupe et avant que le bogue ne soit corrigé, il est préférable de vérifier si la relation de mappage entre le nom d'hôte et l'adresse IP est définie.


Ce qui précède est le piège de la configuration de la réplication de groupe de base de données MySQL et de l'accès à l'adresse IP. Pour plus de contenu connexe, veuillez prêter attention au site Web PHP chinois (www. php.cn) !


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
Article précédent:fichiers mysql, journauxArticle suivant:fichiers mysql, journaux