背景:当我们做部分datanode的拆分或者是数据重分片时,有时希望不影响到其他无关的业务所涉及到的datahost和datanode,所以希望只停下部分datanod的流量。
pause功能会在dble不停止的状态下停止对于指定后端节点的流量,在暂停期间的所有涉及到节点的路由结果会被挂起(为防止挂起的连接过多queue和wait_limit参数会控制挂起连接的数量和时间),直到恢复命令resume被执行之后之前被挂起的查询才会继续进行
pause的执行不一定成功,pause命令将会在指定的timeout的时间内等待需要暂停的流量上的所有事物或者正在执行的sql结束,当目标节点上来自dble的sql或者事务一直无法在指定时间内结束的时候,本次暂停会返回失败。
pause(暂停)是一种dble server级别的全局状态,暂停节点不可追加或者逐步恢复,只能一起暂停指定的一个或几个dataNode并一起恢复流量,并且暂停期间执行reload命令不会恢复对应的流量状态。但是暂停操作不会被记录在文件之中,若发生dble重启,则暂停状态会被重置。
这里推荐谨慎的使用暂停并选择影响的范围,推荐逐个变动暂停,reload,恢复,再进行下一个变动
pause @@DataNode = 'dn1,dn2' and timeout = 10 ,queue = 10,wait_limit = 10;
参数描述:
timeout:这个参数是等待涉及到的事务完成的时间,如果在到达timeout之后,仍然有事务未完成,本次pause失败,单位秒。
queue:这个参数表示暂停期间的阻塞前端连接的数量,超过此数量时,前端连接建立将会发生错误。
wait_limit:是针对被阻塞的每个单个的前端的时间限制,如果被阻塞了超过wait_limit的时间,将会返回错误,单位秒。
RESUME;
返回正常的OK 或者错误“No dataNode paused”
show @@pause;
mysql> show @@pause;
+----------------+
| PAUSE_DATANODE |
+----------------+
| dn1 |
| dn2 |
+----------------+
2 rows in set (0.15 sec)
另外,商业版本支持集群操作,开源版本后续也将支持