mysqlrouter doesn't send connection errors to read-write client -
i trying set innodb cluster mysqlrouter. cluster works fine, replication works, roles correctly change when 1 of nodes offline, mysqlrouter doesn't return errors clients when r/w node goes offline. according log, mysqlrouter correctly detects changes in cluster structure:
18:45:01 debug replicaset 'default' has 3 members in metadata, 2 in status table 18:45:01 warning member 192.168.122.12:3306 (33a131ee-7087-11e7-bbbb-5254005ea589) defined in metadata n actual replicaset 18:45:01 debug end updating replicaset 'default' 18:45:01 info changes detected in cluster 'devcluster' after metadata refresh 18:45:01 info metadata cluster 'devcluster' has 1 replicasets: 18:45:01 info 'default' (3 members, single-master) 18:45:01 info 192.168.122.11:3306 / 33060 - role=ha mode=ro 18:45:01 info 192.168.122.12:3306 / 33060 - role=ha mode=n/a 18:45:01 info 192.168.122.13:3306 / 33060 - role=ha mode=rw 18:45:06 info connected metadata server running on 192.168.122.11:3306 18:45:06 debug updating metadata information cluster 'devcluster' 18:45:06 debug updating replicaset status gr 'default' 18:45:06 debug replicaset 'default' has 3 members in metadata, 2 in status table however, conected clients don't errors long time (about 10 minutes), unacceptable. after timeout client gets error , reconnects:
(2013, 'lost connection mysql server during query') 19:02:37 debug [routing:devcluster_default_rw] unix socket connection 14 accepted @ 127.0.0.1 19:02:37 debug [routing:devcluster_default_rw] source /tmp/myrouter/mysql.sock - dest [192.168.122.13]:3306 new clients can freely connect router during timeout, old ones hang. connection type (socket or port) doesn't change situation. clients connecting via mysqldb python module , mysql client:
mysql -u root --socket /tmp/myrouter/mysql.sock -p --reconnect is there option decrease timeout or bug?
cluster status:
mysql-js> var c = dba.getcluster('devcluster') mysql-js> c.status() { "clustername": "devcluster", "defaultreplicaset": { "name": "default", "primary": "192.168.122.12:3306", "status": "ok", "statustext": "cluster online , can tolerate 1 failure.", "topology": { "192.168.122.11:3306": { "address": "192.168.122.11:3306", "mode": "r/o", "readreplicas": {}, "role": "ha", "status": "online" }, "192.168.122.12:3306": { "address": "192.168.122.12:3306", "mode": "r/w", "readreplicas": {}, "role": "ha", "status": "online" }, "192.168.122.13:3306": { "address": "192.168.122.13:3306", "mode": "r/o", "readreplicas": {}, "role": "ha", "status": "online" } } } } myqslrouter config:
[default] logging_folder=/tmp/myrouter/log runtime_folder=/tmp/myrouter/run data_folder=/tmp/myrouter/data keyring_path=/tmp/myrouter/data/keyring master_key_path=/tmp/myrouter/mysqlrouter.key [logger] level = debug [metadata_cache:devcluster] router_id=1 bootstrap_server_addresses=mysql://192.168.122.11:3306,mysql://192.168.122.12:3306,mysql://192.168.122.13:3306 user=mysql_router1_3bocarc7njs2 metadata_cluster=devcluster ttl=5 destination_connect_timeout = 2 [routing:devcluster_default_rw] #bind_address=0.0.0.0 #bind_port=6446 socket=/tmp/myrouter/mysql.sock destinations=metadata-cache://devcluster/default?role=primary mode=read-write protocol=classic max_connect_errors = 1 [routing:devcluster_default_ro] bind_address=0.0.0.0 bind_port=6447 socket=/tmp/myrouter/mysqlro.sock destinations=metadata-cache://devcluster/default?role=secondary mode=read-only protocol=classic [routing:devcluster_default_x_rw] bind_address=0.0.0.0 bind_port=64460 socket=/tmp/myrouter/mysqlx.sock destinations=metadata-cache://devcluster/default?role=primary mode=read-write protocol=x [routing:devcluster_default_x_ro] bind_address=0.0.0.0 bind_port=64470 socket=/tmp/myrouter/mysqlxro.sock destinations=metadata-cache://devcluster/default?role=secondary mode=read-only protocol=x software versions:
router: mysqlrouter -v mysql router v2.1.4 on linux (64-bit) (gpl community edition) cluster: mysql -v server version: 5.7.19-log mysql community server (gpl)
Comments
Post a Comment