【 使用环境 】
【 OB or 其他组件 】OB
【 使用版本 】4.2.1.4
【问题描述】
关于OceanBase RootService切主的一些疑问
文档链接:OceanBase分布式数据库-海量数据 笔笔算数
1、加入一个observer丢失心跳超过租约时长10s之后,observer会被标记为inactive,按道理应该会触发切主(不然该observer上的主副本无法访问),但是文档上说RS仅将 OBServer 的工作状态设置为 inactive,不做其他处理,这个怎么理解?
2、心跳租约lease_time默认值是10s,也就是心跳丢失10s后才会有所动作,那RTO<8s是如何保证的,还是说8s仅仅指的是从切主开始到切主完成的时间在8s以内?
3、心跳丢失和进程丢失的处理是否有差别?比如数据库进程宕了,但是服务器还在运行,是否会通过ssh感知到进程不存在而立即触发切主而不用等lease_time的时间?
【复现路径】问题出现前后相关操作
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
-
“RS仅将 OBServer 的工作状态设置为 inactive”,是指RS模块不会主动切主,切主是后台选举模块根据多种优先级综合决定的,宕机会触发切主,但不是RS发起的切主,RS只是把server的status改掉了
-
RTO是从业务的角度说的,leader副本能提供服务的话业务就不会受影响。心跳是机器即observer层面的机制,选举是日志流副本层面的,两者没有严格的时间顺序。
-
从RS角度看差别是有的,心跳丢失会影响observer的状态,比如网络问题、队列积压问题都可能导致心跳不正常,这种一般认为是短暂的很快能恢复的状态。选举层面不会等心跳丢失以后再切主,有系统层面的一些判断
2、是不是可以理解为如果observer心跳不存在但是只要掉线的observer和odp之间的网络没问题就还会继续提供服务?
3、系统层面的判断有哪块文档有说明吗?
2、observer 掉线那这台 observer 肯定不能提供服务了。RTO 可以简单理解成 leader 切换的时间。
3、目前没有对外的文档
切主是后台选举模块根据多种优先级综合决定的,宕机会触发切主,但不是RS发起的切主 如何理解
老师您好,再追问下:
-
根据您上面的描述 RS 只是在接收各个 Observer 上报的元信息,在不同的场景下,RS 承担的角色不同?
比如磁盘,服务器故障等,根据心跳以及操作系统层面的信息情况来判断是否会主动触发切主,或者补数据副本的操作?官方文档的描述如下:
“OBServer 心跳数据包存在,心跳数据包中的 OBServer 磁盘状态异常。此种状态下,Root Service 认为 observer 进程还在,但 OBServer 磁盘故障。此种状态下,Root Service 会尝试将该 OBServer 上的全部 leader 副本切走”
2)下述场景下的切主由谁触发?
- compaction
- 集群版本滚动升级过程中
- 调整租户的 primary zone
- 缩容 observer
3)其他非预期故障,均是由选举日志流进行的切主?
- 服务器异常宕机
- 网络隔离
- …
另外,可以理解为上面的提到的 RTO < 8s 是指一个租户的日志流切换的耗时,当租户的数量比较多,待切主的 tablet 基数大,业务端感知到的 RTO 极有可能是大于 8s 的?
或者关于这块有相关的材料可以学习吗?谢谢 ~