朝暾
#1
【 使用环境 】测试环境
【 OB or 其他组件 】4.2.5
【 使用版本 】
【问题描述】现在OceanBase集群有3个全能副本+1个只读副本,假设2个全能副本挂了,能不能将只读副本修改为全能副本,然后实现自动选主
【复现路径】
【附件及日志】在OceanBase集群中,全能副本和只读副本之间可以相互转换,只读副本不参与集群的选举,当有3个全能副本情况下,只能保证2个及以上全能副本正常,即可满足多数派,那么考虑极端场景,当2个全能副本挂了后,是否支持将剩下的一个只读副本转换为全能副本(集群正常情况下是可以的),此时则有两个全能副本,也能满足多数派原则,使得集群可以正常服务。
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
论坛小助手
#3
在您描述的情况下,OceanBase 集群中有 3 个全能副本(即具有读写能力的副本)和 1 个只读副本。当其中 2 个全能副本不可用时,集群可能面临无法继续提供服务的风险,因为剩余的 1 个全能副本虽然可以继续工作,但如果发生故障则没有其他副本能够接替其角色。
在这种情况下,通常的做法是将现有的只读副本转换为全能副本,以确保集群的可用性和容错性。不过,这个操作并非直接通过一个简单的命令就能完成,而是涉及到一系列的操作,包括但不限于:
- 确认当前集群状态,了解哪些副本已经失效,哪些副本还在正常运行。
- 如果可能,尝试先恢复失效的副本。
- 如果恢复失效副本不可行,那么需要手动或通过管理平台(如 OCP)来调整副本的角色。
- 在调整副本角色之前,应确保新的全能副本有足够的资源来承担额外的工作负载,例如磁盘空间、CPU 和内存等。
- 使用
alter system
命令或者通过 OCP 管理界面来修改副本的属性,将其从只读更改为全能副本。
- 调整分区组的仲裁机制,以确保新的全能副本可以参与决策过程,帮助完成主节点的选择。
- 监控整个过程中的集群状态,确保变更操作顺利进行。
由于您的问题是关于如何使用 obdiag
工具来进行问题诊断,而不是具体的副本角色转换指导,因此在这个场景中,obdiag
可以帮助我们收集有关集群状态的信息,特别是关于副本健康状况的数据,这对于我们理解当前的集群状态非常有用。
日志采集场景: 集群基础信息
日志采集命令: obdiag gather scene run --scene=observer.base
执行上述命令后,请将生成的日志文件提供给我们,这将有助于我们更好地理解您的集群配置和当前的状态。同时,如果您能回答以下几个问题,将更有助于我们为您提供有效的解决方案:
- 当前集群的版本信息是什么?
- 您是否使用了 OCP 或 OBD 进行集群管理?如果是,请说明版本。
- 在 2 个全能副本挂掉后,您尝试过哪些恢复措施?
- 是否有最近的监控数据或报警信息可以参考?
- 只读副本在转换前是否有足够的资源来承载更多的负载?
- 您是否有定期备份数据的习惯?如果有,最后一次成功备份是在什么时候?
希望这些问题能够帮助我们更快地定位问题并找到解决办法。
附上敏捷诊断工具 obdiag 使用帮助链接
辞霜
#4
1 个赞
朝暾
#5
集群正常情况下我知道可以改,想知道极端情况下是不是可以也能够改,比如3个全能副本+1个只读副本,在2个全能副本挂了后将只读副本提升为全能副本以保证多数派
1 个赞
辞霜
#6
可以修改为全能副本,但是4zone 坏掉2zone无法保证多数派原则
1 个赞
朝暾
#7
原来的只读副本不参与选举,所以只有三个节点参与选举,后面当两个全能副本异常后,将只读副本提升为全能副本,就是有两个全能副本,不能理解为三个节点存活两个满足多数派嘛