| Bug #91189 | InnoDB cluster reboot ignores group_replication_local_address from conf file | ||
|---|---|---|---|
| Submitted: | 8 Jun 2018 16:33 | Modified: | 22 Jun 2018 18:20 | 
| Reporter: | Shubhra Prakash Nandi | Email Updates: | |
| Status: | Can't repeat | Impact on me: | |
| Category: | Shell AdminAPI InnoDB Cluster / ReplicaSet | Severity: | S2 (Serious) | 
| Version: | mysql-5.7.22, mysql-shell- 8.0.11 | OS: | Debian (9) | 
| Assigned to: | MySQL Verification Team | CPU Architecture: | x86 (amd64) | 
   [8 Jun 2018 16:33]
   Shubhra Prakash Nandi        
  
 
   [18 Jun 2018 10:48]
   MySQL Verification Team        
  Hi, I'm missing some info here as I can't reproduce this with 5.7.22 ? all best Bogdan
   [18 Jun 2018 16:10]
   Shubhra Prakash Nandi        
  Ok, I think I missed one step. Once the cluster is up, shutdown all the instances. Change the group_replication_local_address from 33061 to something else like 13306 in all instances and change group_replication_group_seeds accordingly. Now start all instances and use Mysql shell command dba.rebootClusterFromCompleteOutage to bring up the cluster again. Below is the relevant config and how I brought up the cluster to find local address has been reset to default (33061) but on a live cluster I have seen it to take a random port may be because I am not using seed nodes in the primary instance here.
group_replication_group_seeds
group_replication_gtid_assignment_block_size = 1000000
group_replication_ip_whitelist = 192.168.1.10,192.168.1.20,192.168.1.30
group_replication_local_address = node1:13306
root@node1:~# mysqlsh --log-level=8
MySQL Shell 8.0.11
Copyright (c) 2016, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type '\help' or '\?' for help; '\quit' to exit.
 MySQL  JS > \connect ca@node1:3306
Creating a session to 'ca@node1:3306'
Enter password: ************
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 12
Server version: 5.7.22-log MySQL Community Server (GPL)
No default schema selected; type \use <schema> to set one.
 MySQL  node1:3306 ssl  JS > var cluster = dba.rebootClusterFromCompleteOutage('my_cluster')
Reconfiguring the cluster 'my_cluster' from complete outage...
The instance 'node2:3306' was part of the cluster configuration.
Would you like to rejoin it to the cluster? [y/N]: y
The instance 'node3:3306' was part of the cluster configuration.
Would you like to rejoin it to the cluster? [y/N]: y
WARNING: On instance 'node1:3306' membership change cannot be persisted since MySQL version 5.7.22 does not support the SET PERSIST command (MySQL version >= 8.0.5 required). Please use the <Dba>.configureLocalInstance command locally to persist the changes.
The cluster was successfully rebooted.
 MySQL  node1:3306 ssl  JS > cluster.status()
{
    "clusterName": "my_cluster",
    "defaultReplicaSet": {
        "name": "default",
        "ssl": "REQUIRED",
        "status": "OK",
        "statusText": "Cluster is ONLINE and can tolerate up to ONE failure.",
        "topology": {
            "node1:3306": {
                "address": "node1:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "node2:3306": {
                "address": "node2:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            },
            "node3:3306": {
                "address": "node3:3306",
                "mode": "R/W",
                "readReplicas": {},
                "role": "HA",
                "status": "ONLINE"
            }
        }
    },
    "groupInformationSourceMember": "mysql://ca@node1:3306"
}
 MySQL  node1:3306 ssl  JS > \q
Bye!
root@node1:~#
root@node1:~#
root@node1:~# netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:33061           0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 :::3306                 :::*                    LISTEN
root@node1:~#
 
   [22 Jun 2018 17:08]
   MySQL Verification Team        
  Hi, I don't see a problem here, you got the cluster up as expected? What part of this you consider a bug. I don't see any random ports here? all best Bogdan
   [22 Jun 2018 17:24]
   Shubhra Prakash Nandi        
  When I had setup the cluster, I had specified GR local address port as 13306 (please see earlier comment), when I rebooted the cluster after migrating to Mysql 5.7.22, the GR local address port changed to 33061 instead of 13306 (see netstat output in earlier comment). When I reboot the cluster other nodes may be down which are unable to join then but the seed addresses in them have 13306 as the port, so when I restart them they fail to join. So what I consider as bug is InnoDB cluster should not override the GR local address port when cluster is rebooted from Mysql shell. This makes recovery much faster. I am not able to replicate the randomness of port here though the port definitely changes as you can see from my earlier comment but if your cluster is multi-master and you are using SSL for GR and for GR recovery then you should be able to replicate it. I have faced this over 3-4 times in a production environment.
   [22 Jun 2018 17:28]
   MySQL Verification Team        
  sorry, I see it now, but I can't reproduce this? You get different port every time?
   [22 Jun 2018 18:20]
   Shubhra Prakash Nandi        
  In this case I donot get a different port everytime, but I do get a different port than what is present as GR local address in the conf file. I have not tried this on a fresh install of Mysql 5.7.22 and creating the cluster after installing it, but when I had created the cluster in Mysql 5.7.20 and then upgraded Mysql to 5.7.22 I am able to get this issue consistently. On the live server I am running this does take a random port always when I reboot the cluster.
