Loading [MathJax]/jax/input/TeX/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >OceanBase 增量代理日志服务重启异常

OceanBase 增量代理日志服务重启异常

作者头像
爱可生开源社区
发布于 2025-03-27 02:28:46
发布于 2025-03-27 02:28:46
5500
代码可运行
举报
运行总次数:0
代码可运行
作者:关炳文,爱可生 DBA 团队成员,负责数据库相关技术支持,一步两阶梯,兼具勤奋与慵懒。

爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。

本文约 1100 字,预计阅读需要 3 分钟。

前一阵,我们介绍了 OceanBase 增量日志代理服务(OBLogProxy)的一则故障案例:《OBLogProxy 在 Binlog 模式下的故障案例解析》,本期我们将介绍另一个相关案例。以下是正文内容。

1. 背景

曾经在某客户环境中部署的 OBLogProxy[1] 服务并未使用。最近因扩容重启主机,需要手动重启该服务。服务启动成功,但是 show binlog status 展示的 pid0,并且 Binlog 日志从三个月前至今无新增。

服务启动日志如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@oblogproxy oblogproxy]# ./run.sh start
DEPLOY_PATH : /usr/local/oblogproxy
is_running : (6347)/usr/local/oblogproxy logproxy is running!
kill_proc : (6347)/usr/local/oblogproxy succ!
./run.sh: line 53:  6347 Terminated              ./bin/${BIN} -f ./conf/conf.json &>${log_path}/out.log
is_running : (7735)/usr/local/oblogproxy logproxy is running!
logproxy started

2. 故障分析

2.1 OBLogProxy 状态检测

直连 OBLogProxy 服务,检查服务状态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql -h 'IP' -P 2983
show  Binlog  instances\G

根据上图可知,runningobcdc_runningconvert_running 三列分别标识 binlog 实例主进程obcdc 进程converter 进程 的运行状态。

三者均为 Yes 时,表示 Binlog 实例运行正常,否则即表示相应组件的运行状态异常。

继续检查 Binlog converter(bc)进程,该进程负责拉取和解析 Clog ,并转换为 Binlog 文件。

执行以下命令,可以看到 bc 进程并未启动,则需要从日志中去查找原因。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@oblogproxy ~]$ ps -ef|grep  binlog_converter
root    30687 29844  0 17:16 pts/1    00:00:00 grep --color=auto binlog_converter

2.2 日志分析

2.2.1 查看 bc 进程日志

bc 进程日志文件是 oblogproxy/run/clustername/tenant_name/log/binlog_converter.log。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[2025-02-24 10:33:14] [critical] obcdc_access.cpp(96): Failed to init libobcdc, ret: -4018
[2025-02-24 10:33:14] [error]  binlog_converter_entry.cpp(66): !!! Exit  binlog converter process with pid: 24479
[2025-02-24 10:33:14] [warning] thread.cpp(37): The current thread :(24482) has already stopped
[2025-02-24 10:33:14] [warning] thread.cpp(37): The current thread :(24482) has already stopped

从日志中发现,bc 进程在启动后很快就退出了,原因是 libobcdc 初始化失败,错误代码 4018。

这在 OceanBase 中通常原因是读取数据不存在,此时可以初步猜测 bc 进程拉取日志阶段发生了异常。libobcdc 是 C++ 动态库,负责从 OceanBase 集群中拉到的增量日志按事务提交顺序向外透出。那么我们需要继续从 libobcdc 日志里找出初始化失败的原因。

2.2.2 查看 libobcdc 日志

libobcdc 日志文件是 oblogproxy/run/clustername/tenant_name/log/libobcdc.log。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[2025-02-24 10:33:11.551061] WDIAG [TLOG] get_data_dict_in_log_info (ob_log_meta_data_queryer.cpp:49) [24479][][T0][Y0-0000000000000000-0-0] [lt=45][errcode=-4018] can't find datadict snapshot_scn older than start_timestamp_ns(ret=-4018, ret="OB_ENTRY_NOT_EXIST", tenant_id=1006, start_timestamp_ns=1733201736158282000)
[2025-02-24 10:33:11.551097] WDIAG [TLOG] get_data_dict_in_log_info_ (ob_log_meta_data_service.cpp:375) [24479][][T0][Y0-0000000000000000-0-0] [lt=34][errcode=-4018] sql_queryer get_data_dict_in_log_info fail(ret=-4018, ret="OB_ENTRY_NOT_EXIST", tenant_id=1006, start_timestamp_ns=1733201736158282000, data_dict_in_log_info={snapshot_scn:-1, end_scn:-1, start_lsn:{lsn:18446744073709551615}, end_lsn:{lsn:18446744073709551615}})
[2025-02-24 10:33:11.551149] ERROR issue_dba_error (ob_log.cpp:1875) [24479][][T0][Y0-0000000000000000-0-0] [lt=26][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4018, file="ob_log_meta_data_service.cpp", line_no=389, info="[FATAL][DATA_DICT] Can't find suitable data_dict to launch OBCDC, please try use online schema(refresh_mode=online && skip_ob_version_compat_check=1)")

在日志中搜索关键字 error,发现报错内容 can't find datadict snapshot_scn older than start_timestamp_ns,意味着下游请求位点的时间戳 1733201736158282000 没有找到对应可消费的 Clog 记录。

登录集群 sys 租户,查询各个日志流最小可消费位点中的最大值和开启归档的时间,与请求位点进行对比,请求位点至少需要大于前面两者的最小值。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
obclient [oceanbase]>  SELECT CEIL(MAX(BEGIN_SCN)/1000) AS START_TS_US FROM oceanbase.GV$OB_LOG_STAT; 
+------------------+
| START_TS_US      |
+------------------+
| 1737628799517391 |
+------------------+
1 row in set (0.004 sec)     
MySQL [(none)]> SELECT CEIL(MAX(START_SCN)/1000) as START_TS_US  FROM oceanbase.DBA_OB_ARCHIVELOG;
+------------------+
| START_TS_US      |
+------------------+
| 1733387084685441 |
+------------------+
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-------->请求位点
[root@ob log]# date -d @1733201736
Tue Dec  3 12:55:36 CST 2024    

-------->日志流最小可消费位点
[root@ob log]# date -d @1737628799
Thu Jan 23 18:39:59 CST 2025       

-------->归档开始时间
[root@ob log]# date -d @1733387084
Thu Dec  5 16:24:44 CST 2024            

对比结果:请求位点 < min(日志流最小可消费位点,归档开始时间)

结论

OBLogProxy 服务重启后需要拉取的断点是从 2024 年 12 月 03 号开始的,而归档开始时间是 2024 年 12 月 05 号,OBLogProxy 无法获取上游可消费数据导致服务启动后异常。

处理方法

释放并重建 Binlog 任务。 指定租户的所有 Binlog 实例,同时删除已生成的存量 Binlog 文件。重建 Binlog 任务后,binlog_converter 进程便会以当前时间从上游拉取和解析 Clog。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1. 登录 Binlog Server。
mysql -h $IP -P2983

2. 释放 Binlog 任务。
DROP Binlog FOR TENANT $cluster_name.$tenant_name;

3. 创建 Binlog 任务。
CREATE BINLOG FOR TENANT $cluster_name.$tenant_name TO USER $username PASSWORD `xxx` WITH CLUSTER URL '$obconfig_url';

4. 查看所有 Binlog 实例状态信息。
SHOW Binlog INSTANCES;

预期状态:running、obcdc_running 和 convert_running 三列的值均为yes。

拓展阅读

《如何判断启动时间戳是否过小?》[2]

《如何重建 Binlog 任务?》[3]

参考资料

[1]

oblogproxy: https://www.oceanbase.com/docs/community-oblogproxy-doc-1000000000861451

[2]

《如何判断启动时间戳是否过小?》: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013720

[3]

《如何重建 Binlog 任务?》: https://www.oceanbase.com/docs/community-oblogproxy-doc-1000000001999434

本文关键字:#OceanBase# #oblogproxy# #clog# #binlog#

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 爱可生开源社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OB 运维 | OceanBase 单机改三副本:实操手记与深思
作者:李锡超,苏商银行DBA,负责数据库和中间件运维和建设。擅长 MySQL、Python、Oracle,爱好骑行、技术研究和分享。
爱可生开源社区
2025/02/19
1410
OB 运维 | OceanBase 单机改三副本:实操手记与深思
OBLogProxy 在 Binlog 模式下的故障案例解析
作者:郑增权,爱可生 DBA 团队成员,OceanBase 和 MySQL 数据库技术爱好者。
爱可生开源社区
2025/03/06
420
OBLogProxy 在 Binlog 模式下的故障案例解析
技术分享 | OceanBase 4.1 全面测评及部署流程,看这篇就够了【建议收藏】
测试 OceanBase 对比 MySQL,TiDB 的性能表现,数据存储压缩,探索多点内部项目一个数据库场景落地 Oceanbase(MySQL->OceanBase)。
爱可生开源社区
2023/08/18
9750
技术分享 | OceanBase 4.1 全面测评及部署流程,看这篇就够了【建议收藏】
OB 运维 | OceanBase 4.X-2F1A 仲裁高可用方案初探
作者:郑增权,爱可生 DBA 团队成员,OceanBase 和 MySQL 数据库技术爱好者。
爱可生开源社区
2024/09/14
1720
OB 运维 | OceanBase 4.X-2F1A 仲裁高可用方案初探
带宽被 OBServer 备份 “榨干”,集群陷入 “无主” 危机
近期,一套 OceanBase 生产环境集群,每天早七点左右都会出现无主告警。同时,业务人员反馈同一时间,业务接口会出现短暂超时的情况。
爱可生开源社区
2025/03/12
280
带宽被 OBServer 备份 “榨干”,集群陷入 “无主” 危机
技术分享 | 使用 ANTMAN 工具替换 OceanBase 云平台节点
上海某公司 DBA,曾经从事银行、证券数仓设计、开发、优化类工作,现主要从事电信级 IT 系统及数据库工作。有三年以上 OceanBase 工作经验,参与某通信行业核心数据库全面国产化工作。获得的专业技能与认证包括 OceanBase OBCP、Oracle OCP 11g、OracleOCM 11g 、MySQL OCP 5.7 、腾讯云TBase、腾讯云 TDSQL、阿里云 ACP 、KingBase KCP。
爱可生开源社区
2023/08/18
2730
技术分享 | 使用 ANTMAN 工具替换 OceanBase 云平台节点
技术分享 | OceanBase 错误日志分析
OceanBase 运行时会产生很多各种级别的日志,如果出现了错误,想要从数量繁多的错误日志中定位到错误原因,是件不太容易的事。
爱可生开源社区
2022/10/21
1.3K0
OceanBase写入限速源码解读
OceanBase中的写入限速机制旨在控制系统中写入操作(一般写入操作包括插入、更新和删除等)的速率,目的是为了提高数据库系统的稳定性。本文主要通过以下2个参数来解释写入限速的实现机制。
爱可生开源社区
2023/05/08
8200
OceanBase写入限速源码解读
OceanBase 学习记录 -- 安装简易环境
学习OB ,这是OB 的第二期,还是那句话,让人家用枪逼着上路,不如自己自找出路,今天安装。基于OB并不是一个想装就能装的数据库,OB的同学给我们这些想用的人,来了一套一键安装的版本。其中文档中明确了,我们这样使用和安装的问题,但我们就是要试用一下,所以必然就这样了。尤其昨天听了一耳朵 OceanBase新数据库版本的发布会,其中有几句话。
AustinDatabases
2024/11/25
1340
OceanBase  学习记录 -- 安装简易环境
OB 运维 | OceanBase 备份清理任务卡死之谜
客户 OceanBase 集群的备份策略是每天全备,备份文件最近保留 4 天。经过观察,实际保留的备份文件多达 13 个,导致磁盘空间占用较高。
爱可生开源社区
2025/02/07
370
OB 运维 | OceanBase 备份清理任务卡死之谜
OB 运维 | 一文讲透 OceanBase 单机版【建议收藏】
OceanBase 单机集中式集群(即单机版,后文不再称“单机集中式集群”)是OceanBase 推出的极简数据库架构,区别于分布式集群架构,单机版无多副本和扩缩容能力,适用于开发测试环境及数据安全性要求不高的业务系统。
爱可生开源社区
2024/09/14
3730
OB 运维 | 一文讲透 OceanBase 单机版【建议收藏】
OceanBase初体验之部署生产标准的三节点分布式集群
如果是使用的物理机部署,建议在BIOS中开启最大性能模式,X86芯片开启超线程。三台节点保证时间一致。
HOHO
2024/03/15
3650
OceanBase初体验之部署生产标准的三节点分布式集群
OB 运维 | OB4.X-Follower 节点时钟偏差导致合并卡住?
某客户由于 OBServer 机器(租户 Follower 节点)发生过重启,且时钟同步服务未自动启动,导致此机器时间比时钟源落后 60s+!
爱可生开源社区
2024/10/21
820
OB 运维 | OB4.X-Follower 节点时钟偏差导致合并卡住?
故障分析 | 租户 memstore 内存满问题排查
https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000362143
爱可生开源社区
2023/04/28
9600
技术分享 | OceanBase 慢查询排查思路
爱可生 DBA 团队成员,擅长故障分析和性能优化,文章相关技术问题,欢迎大家一起讨论。
爱可生开源社区
2023/08/18
5140
技术分享 | OceanBase 慢查询排查思路
OB 运维 | OceanBase 4.1.0 clog 目录探究
爱可生 DBA 团队成员,擅长数据库故障排查和处理。对技术抱有热忱,实践是检验真理的唯一标准~
爱可生开源社区
2023/08/18
9160
OB 运维 | OceanBase 4.1.0 clog 目录探究
【DB宝87】手动部署 OceanBase 三副本集群(在同一个节点)
OceanBase Docker安装体验:https://www.xmmup.com/oceanbase-dockeranzhuangtiyan.html 手动部署 OceanBase 单副本集群:h
AiDBA宝典
2022/02/23
7220
【DB宝87】手动部署 OceanBase 三副本集群(在同一个节点)
源码阅读OceanBase(1)计划开始
https://wangcy6.github.io/post/plan/oceanbase_day1/
早起的鸟儿有虫吃
2021/07/22
9500
猿创征文|体验新一代分布式数据库—OceanBase
现如今,当我们谈到关键核心技术,自主创新等话题,很多人都会非常关注芯片,但是还有一种IT的核心技术,它的重要性丝毫不在芯片之下,那就是数据库。
宝耶需努力
2022/12/13
6850
猿创征文|体验新一代分布式数据库—OceanBase
OB 运维 | 基于日志或 gv$sql_audit 分析 OB 异常重试 SQL
作者:郑增权,爱可生 DBA 团队成员,OceanBase 和 MySQL 数据库技术爱好者。
爱可生开源社区
2024/09/14
1390
OB 运维 | 基于日志或 gv$sql_audit 分析 OB 异常重试 SQL
推荐阅读
相关推荐
OB 运维 | OceanBase 单机改三副本:实操手记与深思
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文