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