oceanbase 设计上的问题 为什么sys系统租户 日志流只有一个

我个人简单的认为sys租户就是集群管理和租户管理, 需要同步的数据量较少 所以不需要多个日志流,并且单个日志流减少了系统复杂度,降低了出错的概率。

是否有什么代码实现上的必要性? 有熟读代码的大佬能解释一下 (比如类似sys租户只通过rootservice 的leader 同步或这其他实现上的情况 导致日志流只使用一个的?)

系统租户 是集群默认创建的租户,与集群生命期一致,负责管理集群和所有租户的生命期。系统租户仅有一个1号日志流,只支持单点写入,不具备扩展能力,是不可扩展租户。系统租户可以创建用户表,所有的用户表和系统表数据均由1号日志流服务。系统租户数据是集群私有的,是私有租户。

4.x 后重构了 OB clog 机制。日志流 可以理解为 租户多副本之间的同步机制。
三副本的租户当只需要一个节点提供读写服务时,租户里就只需要一个日志流(类似于传统数据库主备的单向同步);如果租户需要三个节点同时提供读写服务时,则最终会生成4个日志流,2个在原来的节点,2个分别在其他节点有一个。如果有复制表,额外开辟一个日志流用于复制表的全同步。

对于 SYS 租户而言,设计上就不是给业务用的,而是OB的内部数据。OB 的内部数据最好是就单点写入,避免不必要的远程执行计划或分布式执行计划。所以 SYS 租户一个日志流够用了。

1 个赞

请问一下, 3个节点的话 为什么是4个日志流 2个在原来节点 2个在其他节点 这个没看懂。 (比如A,B,C 3个节点 负载均衡的话不是应该3个复制流?)

业务租户里也有一些元数据表,属于OB内部表,独占一个日志流。

@obpilot 老师说的非常对 下面在解释一下

Meta 租户

Meta 租户是 OceanBase 数据库内部自管理的租户,每创建一个用户租户系统就会自动创建一个对应的 Meta 租户,其生命周期与用户租户保持一致。

Meta 租户用于存储和管理用户租户的集群私有数据,这部分数据不需要进行跨库物理同步以及物理备份恢复,这些数据包括:配置项、位置信息、副本信息、日志流状态、备份恢复相关信息、合并信息等。

租户架构

租户架构如下图所示,用户租户与 Meta 租户一一对应,系统租户与 Meta 租户有且仅有一个 1 号日志流,日志流为 LogStream,简称 LS。用户租户支持动态创建和删除日志流。

1 个赞