疑问: oceanbase 的基线数据(SSTable) 部分是如何保证多副本高可用的?

网上有不少关于 clog 很棒的文章~ (比如这个 开源数据库OceanBase代码导读(13) - 知乎 (zhihu.com)

但理解 clog 只保证了事务日志的复制能在故障恢复时从其他日志副本恢复出未完成的事务和未 flush(转储)的 memtable,但好像没找到关于基线数据(SSTable,宏块- -)数据如何实现高可用的说明(原理或源码分析)。。。

2.x 版本的文档是可以找到几句说 sstable 副本的 OceanBase 企业级分布式关系数据库, 但不怎么详细(并且 3.0 好像删掉了

求介绍下基线数据的复制机制,或者又现成的文章也可以求分享链接~ 感谢感谢

从建表开始,sstable 就有三份。此后主副本的变化都会通过clog同步到备副本并应用,备副本也会在备副本节点当天的major freeze事件后将内存增量合并到磁盘的sstable上。所以sstable数据也是三份。

即使某些故障场景下某个机器磁盘损坏,机器故障永久下线等,OB 也会从空余机器(如果没有就给集群补充新机器)里自动补全缺失的数据,自然包括 sstable数据。

1 个赞

感谢理解了。。忽略了 clog 到副本也会回放到 memtable 这个事。。。嗯嗯 如果副本 memtable 也有数据那 flush compaction 后 sstable 也是完整的。。。

虽然感觉其他副本对这部分 compaction 感觉上大概率输入和输出差不多- - :)

跟传统数据库不一样的地方是,备副本回放不需要再读入sstable,直接写memtable。所以宕机回放也很快。