暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

OceanBase系统架构日志流副本概述

2023-12-26
810

为了数据安全和提供高可用的数据服务,每个日志流的数据在物理上存储多份,每一份叫做日志流的一个副本。每个副本,包括存储在磁盘上的 Tablet 的静态数据(SSTable)、存储在内存上的 Tablet 的增量数据(MemTable)、以及记录事务的日志三类主要的数据。根据存储数据种类的不同,副本有几种不同的类型,以支持不同业务在在数据安全、性能伸缩性、可用性、成本等之间的选择。

OceanBase 数据库支持以下三种类型的副本:

  • 全能型副本(FULL/F)

    说明

    V4.0.0 版本仅支持该副本类型。

  • 日志型副本(LOGONLY/L)

  • 只读型副本(READONLY/R)

全能型、日志型副本称为 Paxos 副本,对应副本可构成 Paxos 成员组;只读型副本称为非 Paxos 副本,对应副本不可构成 Paxos 成员组。当前,V4.0.0 版本仅支持全能型副本类型。

副本类型属性

目前,指定副本类型和位置分布的 Locality 一般语法如下:

locality='F@z1,F@z2,F{1},R{ALL_SERVER}@z3,L@z4,L@z5'

在该语法中,允许在副本类型之后的花括弧内限定副本的其他属性。花括弧内的数字表示对应 zone 对应副本类型的副本个数,其中:

  • 对于 F、L、E 型副本:该值只能为 1,或者不指定(不指定视作 1)。

  • 对于 R 型副本:该值上限为租户对应 zone 的可用 Unit 数目,或者指定为 ALL_SERVER(表示尽可能在对应 zone 创建 R 副本),或者不指定(不指定视作 1)。

为了限定副本的 MemTable 内存属性,引入一个属性名为 memstore_percent,表示该 副本 memstore 占用内存上限与 leader 占用内存上限的比值 。目前,memstore_percent 属性可以 作用于 F、R 型副本 ,语法示例如下:

locality='F@z1,F{memstore_percent:0}@z2,F{1,memstore_percent:100},R{ALL_SERVER}@z3,L@z4,L@z5'

目前该属性只有 0 和 100 两种取值:

  • 对于不给定 memstore_percent 属性的副本,等价于 memstore_percent=100,代表不限制 memstore 内存使用。

  • 特别的,对于 memstore_percent=0 的副本,这个副本没有 memstore,不做日志回放(节省了回放日志和转储的 CPU 开销);该副本需要定期从其他副本拉取转储数据,以保障宕机后的恢复时间可控。

对于设置了 memstore_percent=0 属性的副本,我们称之为 D 副本(Data Replica/D) 。对于 D 副本:

  • F 型的 D 副本作为新主上任时,需要更长(分钟级)的宕机自动恢复时间。

  • D 副本的 MemTable 内存占用为 0,不回放日志。

对资源受限的业务场景,若其对宕机恢复时间不敏感,通过设置 D 副本可以显著减少内存资源占用。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论