alibaba corba timeout问题
00:32:26,258 WARN [thread=Processor1-E15,class=ServerConnection,host=10.1.1.91,port=2441,schema=facebook_onlinegame_db]global_new.default{SHOW FULL TABLES LIKE 'PROBABLYNOT'}
java.util.concurrent.TimeoutException
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
at java.util.concurrent.FutureTask.get(FutureTask.java:91)
at com.alibaba.cobar.server.node.MySQLChannel.connect(MySQLChannel.java:185)
at com.alibaba.cobar.server.node.MySQLDataSource.getChannel(MySQLDataSource.java:156)
at com.alibaba.cobar.server.node.MySQLDataNode.getChannel(MySQLDataNode.java:115)
at com.alibaba.cobar.server.node.MySQLDataNode.getChannel(MySQLDataNode.java:107)
at com.alibaba.cobar.server.executor.MultiNodeExecutor$3.run(MultiNodeExecutor.java:206)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
最近发现corba的stout.log有时警告级别的日志,看起来是新建网络链接时time out异常,于是checkout corba的源码,追踪到相应的代码行,发现确实是由于超时引起的异常,corba也提供的相应的参数对这个时间进行配置,于是将time out设置到60秒,原来corba配认是10秒。进一步分析,我觉得原因可能是公司内部使用vpn,连接数据库也是通过vpn过去,由于网络不稳定,导致创建新连接时超时。
corba相应的超时设定,在schema.xml中 dataNode节点 waitTimeout属性
<!--数据节点由主、备数据源,心跳,连接池等配置组成。--> <dataNode name="dn_shards"> <property name="dataSource"> <!--第一行dataSourceRef表示主数据源--> <!-- 三个数据节点的主数据源,可用逗号分隔,支持$1-3的缩写形式, 表示ds_shard_master[1], ds_shard_master[2], ds_shard_master[3] --> <dataSourceRef>facebook_onlinegame_ds_shards[0],facebook_onlinegame_ds_shards$1-3</dataSourceRef> <!--第二行dataSourceRef表示备数据源--> <!-- <dataSourceRef>ds_single_slave</dataSourceRef> --> <!--如果需要一主多备的情况,可以将第二备数据源配置在第三行,以此类推--> <!-- <dataSourceRef>ds_single_slave2</dataSourceRef> --> </property> <!--Cobar与后端数据源连接池大小设置--> <property name="poolSize">16</property> <!--Cobar通过心跳来实现后端数据源HA,一旦主数据源心跳失败,便切换到备数据源上工作--> <!--Cobar心跳是通过向后端数据源执行一条SQL语句,根据该语句的返回结果判断数据源的运行情况--> <property name="heartbeat">select 1</property> <property name="waitTimeout">60000</property> </dataNode>