2.23.2 dbGroup命令的具体使用方法和解释
外部ha启用参数
当项目准备使用dble的外部ha联动方式来完成高可用切换或者同步的时候,需要提前进行如下配置
bootstrap.cnf 中的对应参数
-DuseOuterHa=true
注意:本参数的调整需要重启dble服务
cluster.cnf 的对应参数
needSyncHa = true
- 当此参数启用时,集群状态的dble将会在集群中同步自身的dbGroup的状态
- 此配置会强制将bootstrap.cnf 中的useOuterHa设置为true
- 当bootstrap.cnf 中的useOuterHa但cluster.cnf的needSyncHa不为true时,dble可以执行高可用切换的所有指令,但是其行为退化为单机dble,需要人工进行集群中多个dble的状态同步
注意:此参数的调整需要重启集群内的所有dble服务
关于dble中对于后端MySQL状态的解释
dbInstance的状态“disabled/enable”仅表示dble层面对于具体每个MySQL后端节点是否允许有流量的标识,和具体的MySQL存活状态无关
dbGroup @@disable
命令细节:
dbGroup @@disable name = 'dbGroup_name' [instance = 'instance_name']
- 其中的dbGroup_name指的是在db.xml中配置的dbGroup的名称,而instance_name指的是在一个dbInstance的name
- 当此命令不指定instance = '..'的内容时,默认将此dbGroup下所有dbInstance的状态置为disabled
- 被标记为disabled的节点无法提供正常的查询,即使对应的mysql真实的存活着
- 具体的dbInstance的disable状态可以通过管理端命令show @@dbInstance进行查询
- 若当前dble服务尚存连接被disable的连接,在命令执行过程中会被全部关闭,包括正在新建过程中的连接,可能会导致少量的查询报错
- 关闭连接的策略为对于使用中的连接先从池中删除,后续由定时任务(时间周期固定为5s)进行关闭;而空闲的连接则会直接关闭
- 由于连接关闭策略具有延迟性,可能会导致disable命令返回结果后,后端连接实际上还没有关闭
dbGroup @@enable
命令细节:
dbGroup @@enable name = 'dbGroup_name' [instance = 'instance_name']
- 其中的dbGroup_name指的是在db.xml中配置的dbGroup的名称,而instance_name指的是在一个dbInstance的name
- 当此命令不指定instance = '..'的内容时,默认将此dbGroup下所有dbInstance的状态置为enable
dbGroup @@switch
命令细节: dbGroup @@switch name = 'dbGroup_name' master = 'instance_name'
- 其中的dbGroup_name指的是在db.xml中配置的dbGroup的名称,而instance_name指的是在一个dbInstance的name
- 此命令name和master内容都为必填,在缺少任意元素的状态下会报错
- 此命令的作用会导致dbGroup下的标记为primary的dbInstance发生重置,也就是写节点会发生变化
- 此命令不会导致所有dbInstance节点的disable状态变化,但如果命令使得一个dbInstance从primary退化成为非primary,此dbInstance上的所有既有连接都会被关闭,以确保新的写请求不会被写入到错误的dbInstance上面去,这可能导致一些前端连接的查询报错和事务失败