Maxscale:将readwritesplit和schemarouter结合起来

Maxscale:将readwritesplit和schemarouter结合起来

问题描述:

我试图设置maxscale以使用schemarouter和readwritesplit。 我有很多我的mysql数据库的碎片。每个分片都有一个从属节点 所以,想法是在主节点上使用一个模式路由器,在从节点上使用一个模式路由器来代理所有分片。然后在readwritesplit中使用这2个服务。Maxscale:将readwritesplit和schemarouter结合起来

This cause the following issue: 
2017-02-10 14:57:48 error : Failure loading users data from backend [10.161.66.145:4009] for service [Splitter Service]. MySQL error 2013, Lost connection to MySQL server at 'handshake: waiting for inital communication packet', system error: 110 
2017-02-10 14:57:52 error : Failure loading users data from backend [10.161.66.145:4008] for service [Splitter Service]. MySQL error 2013, Lost connection to MySQL server at 'reading authorization packet', system error: 110 
2017-02-10 14:57:52 error : Unable to get user data from backend database for service [Splitter Service]. Failed to connect to any of the backend databases. 

任何帮助将是不错的。

我的schemarouter都工作正常。 这里是readwritesplit配置:

[max_ro] 
type=server 
address=10.10.10.10 
port=4009 
protocol=MySQLBackend 

[max_rw] 
type=server 
address=10.10.10.10 
port=4008 
protocol=MySQLBackend 

[Splitter Service] 
type=service 
router=readwritesplit 
servers=max_ro,max_rw 
user=maxscale 
passwd=maxscale 

[Splitter Listener] 
type=listener 
service=Splitter Service 
protocol=MySQLClient 
port=4010 

感谢

这些错误是最有可能的是,readwritesplit服务尚未启动造成的事实。在MariaDB Jira上有关于此行为的错误报告。

如果分片服务工作并且一旦MaxScale启动后不再记录任何错误,则所有内容都按预期工作,错误可以忽略,如this bug report中所述。

解决此问题的另一种方法是将配置分为两部分并使用单独的MaxScale实例;一个用于分片服务,另一个用于读写分片服务。这确实增加了一层额外的复杂性,因为需要启动两个服务而不是一个服务。