Einführung
Die Replikationsfunktion von MySQL Version 5.7.17 hat eine neue Funktion eingeführt, die Shining-Star-Funktion Group Replicatioin. Natürlich ist es unabdingbar, etwas Erfahrung im Erstellen und Testen zu haben, aber während des Erstellungsprozesses sind wir auf Fallstricke im Zusammenhang mit dem Hostnamen gestoßen. Im Folgenden wird erläutert, wie man es erstellt und wie man dieser Gefahr begegnet.
2
Es wird erwartet
, zwei Instanzen 3306 und 3307 auf der virtuellen Maschine 192.168.56.102 und eine Instanz 3308 auf 192.168.56.105 zu erstellen. Entsprechend den Merkmalen müssen Sie einen Knoten als Knoten zum Starten der Gruppenreplikation auswählen. In diesem Artikel wird 3306 als Startknoten ausgewählt.
3
Erstellen Sie
Instanz 192.168.56.102:3306
my.cnf-Schlüsselinhalt:
[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
Hinweis:
1. Die in der Konfiguration aufgeführten Ports sind erforderlich und werden nicht verwendet.
2. Das Format von Gruppenname ist UUID. Sie können select uuid(); in MySQL ausführen, um eine zu erhalten.
Erstellen Sie ein Kopierkonto:
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;
Erstellen Sie einen Kopierkanal:
mysql> change master to master_user='group_repl',master_password='group_repl' for channel 'group_replication_recovery';
Plugin laden:
mysql> install plugin group_replication soname 'group_replication.so';
Gruppenreplikation als ersten Knoten starten:
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
Instanzen 192.168.56.102:3307 und 192.168.56.105:3308
Die meisten Vorgänge der übrigen Instanzen sind die gleichen wie 102:3306. Nur die verschiedenen Teile sind unten aufgeführt:
1. In my.cnf sind die Parameter von 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. Nach dem Erstellen des Replikationskontos, dem Replizieren des Kanals und dem Laden des Plug-Ins müssen sowohl 102:3307 als auch 105:3308 nur Folgendes ausführen: starte group_replication;.
4
Überprüfen
Um zu überprüfen, ob Sie der Gruppenreplikation beitreten möchten, fragen Sie einfach die Tabelle performance_schema.replication_group_members ab. Das Folgende ist die Situation, in der 102:3307 der Gruppe beitritt:
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
Sie können sehen, dass bereits zwei Knoten die Gruppe bilden, nämlich 102:3306 und 102:3307.
5
Problem
Als ich anfing, 105:3308 beizutreten, ist ein Fehler aufgetreten. Es wurde festgestellt, dass 3308 der Gruppe nicht beitreten konnte:
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
Aus dem Fehlerprotokoll:
... 2017-01-02T17:35:02.123501Z 32 [Note] 'CHANGE MASTER TO FOR CHANNEL 'group_replication_recovery' executed'. Previous state master_host='<NULL>', master_port= 0, master_log_file='', master_log_pos= 4, master_bind=''. New state master_host='localhost', master_port= 3306, master_log_file='', master_log_pos= 4, master_bind=''. ... 2017-01-02T17:35:02.133661Z 34 [ERROR] Slave I/O for channel 'group_replication_recovery': error connecting to master 'group_repl@localhost:3306' - retry-time: 60 retries: 1, Error_code: 2003 ...
Es kann vermutet werden, dass das Problem bei MEMBER_HOST liegt, also ändern Sie den Hostnamen in die IP-Adresse. Nach Tests wurde festgestellt, dass dies machbar ist:
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
Unter tatsächlichen Umständen ist es jedoch unmöglich, den Hostnamen auf IP festzulegen. Nach vielen Versuchen habe ich herausgefunden, dass dieses Problem auf folgende Weise gelöst werden kann:
1. Legen Sie unterschiedliche Hostnamen für verschiedene physische Maschinen (virtuelle Maschinen) fest.
2 /hosts ermöglicht Ping zwischen physischen Maschinen (virtuellen Maschinen) über Hostnamen.
Nach Abschluss der oben genannten Arbeiten überprüfen Sie abschließend die Gruppenmitglieder:
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
Problem gelöst. Beachten Sie außerdem, dass selbst Instanzen unter einer physischen Maschine (virtuellen Maschine) eine Zuordnungsbeziehung zwischen Hostname und IP haben müssen, um eine Gruppe zu bilden. Der Grund dafür, dass in der oben genannten Localhost-Situation Gruppen unter derselben physischen Maschine gebildet werden können, liegt darin, dass das System standardmäßig eine Zuordnungsbeziehung von 127.0.0.1 zu Localhost hat.
6
Zusammenfassung
Das obige Problem tritt auf, weil MySQL beim Konfigurieren der Replikation direkt den Hostnamen des Betriebssystems anstelle der üblicherweise verwendeten IP-Adresse verwendet Bug, und jemand hat ein paar Tage früher als ich eine Bug-Anfrage an die offizielle Website gesendet. Es wird empfohlen, bei der Konfiguration der Gruppenreplikation und vor der Behebung des Fehlers zu überprüfen, ob die Zuordnungsbeziehung zwischen dem Hostnamen und der IP-Adresse festgelegt ist.
Das oben Genannte ist die Gefahr, die beim Einrichten der MySQL-Datenbankgruppenreplikation und beim Zugriff auf die IP-Adresse besteht. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). php.cn)!