glb/mysql.sh parsing error when starting arbitrator daemon
joffrey92 opened this issue · 1 comments
Hi,
I start a galera load balancer 1.0.1 with following start options:
[root@lb01 bin]# glbd -w exec:"mysql.sh -d 2 -umon -pmon" -b 10.0.0.1:3333 10.0.0.2:3306:1 -D
It detects successfully the cluster topology, and adds the available nodes to the load balancing policy.
When I start an arbitration daemon (garbd), this changes the wsrep_incoming_address from:
| wsrep_incoming_addresses | 10.0.0.2:3306,10.0.0.3:3306,10.0.04 |
to:
| wsrep_incoming_addresses | ,10.0.0.2:3306,10.0.0.3:3306,10.0.04 |
And the following error is displayed in glbd:
ERROR: glb_socket.c:90: Unknown host ,.
ERROR: glb_dst.c:86: Invalid argument
ERROR: glb_wdog.c:450: Failed to parse destination ',': 22 (Invalid argument). Skipping.
The parsing from mysql.sh is failing.
Note: the load-balancer still works correctly, and route queries to healthy nodes.
Idea fix1: Do not try to contact empty IPs
Idea fix2: Put the IP of the garbd daemon in the listening adresses, and tag it with a "garbd" so that it is not used for load-balancing or other purposes.
Thanks in advance,
Joffrey
$ cat glb_issue11.patch
--- mysql.sh 2014-04-24 10:15:26.541455852 +0200
+++ mysql_glbissue11.sh 2014-04-24 10:15:39.804455302 +0200
@@ -55,7 +55,8 @@
if [ $? -eq 0 ]
then
STATE=$(echo $RES | cut -d ' ' -f 2)
-
OTHERS=$(echo $RES | cut -d ' ' -f 4)
-
Fix garbd issue that shows empty string in wsrep_incoming_addresses : Bug #11
-
OTHERS=$(echo $RES | cut -d ' ' -f 4 | sed -e 's/^,//g' -e 's/,,*/,/g' -e 's/,$//g' )
If wsrep_local_state variable was not found on the server, we assume it
is a regular MySQL and is ready for connections (it accepted connection)
STATE=${STATE:-"4"}
$ patch -p0 < glb_issue11.patch