本文主要梳理 OceanBase 数据库 Clog 对存储能力的要求。
OceanBase 数据库的事务遵循日志先行原理,需要 Clog 落盘。Clog落盘是指 Clog 使用 Paxos 协议为事务的 redo 日志及两阶段提交日志提供日志持久化服务,每条日志的持久化都需要经过一轮多数派副本的确认,即本地落盘和远端成员的落盘,以形成多数派。
适用版本
OceanBase 数据库 V2.2.X 版本
能力要求
OceanBase 数据库对存储介质的要求如下:
- 高可用:Paxos 多数派投票、异常恢复均需要保证单点 Clog 的高成功率写入。
- 强一致:发生脑裂、网络分区、宕机、磁盘故障等异常时,在 Clog 写入位置上保证数据强一致,不丢失数据。
- 追加写入磁盘:要求写入延迟低并且均匀。
OceanBase 数据库的 I/O 特性
- 读写块大小:
- 2 MB 的读写是 SSTable、备份恢复最为密集的 I/O 行为。
- 4 KB 读写是 slog、clog、ilog 最为密集的 I/O 行为。
- 写入使用的底层函数:
- OceanBase 数据库 V1.4.X 版本日志盘使用 pwrite 写入。
- OceanBase 数据库 V2.X 版本日志盘使用 aio_write 写入。
- 写入机制:OceanBase 数据库采用大量的磁盘顺序写入。
Clog I/O 相关 HA 特性
对于 IO 相关的故障,OceanBase 数据库具有以下 HA 特性:
- 写盘超时:OceanBase 数据库会标记写入超时的磁盘并发起重试,如果成功则清除标记,如果仍不成功,则继续重试。
- IO 错误:OceanBase 数据库会记录错误并退出。
- open file 失败:如果文件句柄数达到上限,OceanBase 数据库会重试打开文件。
监控指标
若要监控 OceanBase 数据库的 I/O 性能,可以通过以下方式进行:
-
OCP 中的
CLOG_WRITE_DISK_RT
:记录每次事务日志写盘平均耗时。
-
OCP 中的
TRANS_COMMIT_LOG_SYNC_RT
:记录每次事务网络同步平均耗时。
-
有关 OCP 中的监控指标,请参见 《OCP 用户指南》的 租户管理 > 性能监控 章节。
-
在要检查的 OBServer 服务器执行
iostat -x -k 1
,查看
util%
与
await%
,以及存储数据表上标明的
IO capacity
等信息。
-
OceanBase 数据库中的参数
clog_sync_time_warn_threshold
:表示 commitlog 同步超过多长时间会输出 WARN 日志。
-
有关该参数的详细信息,请参见《OceanBase 数据库 参考指南》中的 **系统配置项 **章节。
建议配置
- 存储 Clog 的目录与存储 datafile 的目录分别挂载到不同硬盘,以实现分散 clog 日志和 datafile 读写压力与失败隔离。
- 选择合适的 RAID 级别,不推荐使用 RAID5 模式,该模式的小 I/O 性能非常差。
- 检查 log 盘的 RAID 的缓存策略。writethrough 的作用是换电池时,能保证 RAID cache memory 中的数据能保存到硬盘。
[root@hostname /]# ./data/log – writethrough
-
使用高性能存储介质,例如 nvmessd。
-
log 目录
/data/log1
空间大小建议为增量数据内存上限的 3~4 倍。