slog 日志如果出现数据错误校验失败,会直接导致 OBServer 节点重启失败。升级期间做节点替换的流程复杂,人工成本很高。因此,最好可以在升级前检查 slog 文件的数据,及时发现问题并进行规避。本文介绍如何在升级前对 slog 日志文件进行检查,以及发现数据问题后如何规避。
准备工作
将 ob_admin 工具放置到 oceanbase 执行目录下的 bin 文件夹内。
检查
确认
store/{cluster}/slog目录下的 slog 文件数量,数量不会很多,通常只有 1 个。用 ob_admin 工具扫描每个 slog 文件。
注意
文件路径用全路径。
./bin/ob_admin slog_tool -f /home/admin/oceanbase/store/{cluster}/slog/1工具输出:

全部扫描完成后,在 ob_admin 的日志文件中检查是否有数据错误。
grep -F 'ob_storage_log_reader' ob_admin.log* | grep -v INFO若有数据错误,会返回 4052 或是 4103 相关的错误日志,类似的日志如下:

规避
发现数据错误时,请第一时间联系技术支持人员,一起帮助执行下面的规避操作。
找到检查过程中所有出错的 slog 文件号,记录其中最大的文件号为
max_file_id。使用 ob_admin 工具确认重启回放位点。若输出的回放位点
replay_start_point中的文件号大于第 1 步中的max_file_id,则可以不需要做规避,节点可以正常重启。./bin/ob_admin dumpsst -d super_block -q succ to open, filename=ob_admin.log, fd=3, wf_fd=2 SuperBlock: {header:{version:3, magic:1018}, content:{Type:"ObServerSuperBlock", create_timestamp:1657266582459378, modify_timestamp:1657279843656256, macro_block_size:2097152, total_macro_block_count:5120, total_file_size:10737418240, replay_start_point:ObLogCursor{file_id=1, log_id=69483, offset=39088128}, super_block_meta:{macro_block_id:[0-357](ver=1,mode=0,seq=0)}, tenant_config_meta:{macro_block_id:[0-358](ver=1,mode=0,seq=0)}, block_mgr_meta:{macro_block_id:[0-359](ver=1,mode=0,seq=0)}, pg_log_archive_meta:{macro_block_id:[0-360](ver=1,mode=0,seq=0)}}}确认集群是否可以进行合并,避免影响业务。可以的情况下发起一次合并。
alter system major freeze;再次使用 ob_admin 工具,确认最新的回放位点
replay_start_point。保证回放的起始文件大于第一步中的max_file_id(若没有生成新的 slog 文件,则需要多发起几次合并),并对新生成的文件再次使用 ob_admin 扫描一次,避免再次发生数据错误。两点确认无误后,节点可以正常重启。
适用版本
OceanBase 数据库 V3.2 版本。