本文主要梳理 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 级别。
检查 log 盘的 RAID 的缓存策略。writethrough 的作用是换电池时,能保证 RAID cache memory 中的数据能保存到硬盘。
[root@hostname /]# ./data/log -- writethrough使用高性能存储介质,例如 nvmessd。
log 目录
/data/log1空间大小建议为增量数据内存上限的 3~4 倍。