为了数据安全和提供高可用的数据服务,每个日志流的数据在物理上存储多份,每一份叫做日志流的一个副本。每个副本,包括存储在磁盘上的 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 副本可以显著减少内存资源占用。




