暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase数据库因clog空间满导致集群初始化失败

原创 尚雷 2023-02-01
1746

一、问题描述

2022年年底在测试环境部署了一套OceanBase 4.0社区版集群作为学习测试使用,采用的是BP1版本,后来社区发布了BP2补丁,于是将数据库集群升级到了BP2,该环境是一套3节点集群,使用一台单独的OBD节点部署的集群。

春节后,在尝试连接OB数据库时,发现所有节点都无法连接,通过ps -ef查看到各个节点的进程都还存在,但使用obclient尝试各种方法都无法正常连接到数据库。

于是,决定对整个集群进行重启,但重启过程进入到初始化阶段耗时很长时间后总提示失败,如下所示:

[admin@obproxy-node ~]$ obd cluster start obcluster
Get local repositories ok
Search plugins ok
Open ssh connection ok
Load cluster param plugin ok
Check before start observer ok
Check before start obproxy ok
Check before start obagent ok
Check before start prometheus ok
Check before start grafana ok
Start observer ok
observer program health check ok
Connect to observer ok
Initialize cluster x
[ERROR] Cluster init failed
See https://www.oceanbase.com/product/ob-deployer/error-codes .

0d0a23ed6456e1697f79cbe13a89f58d.png

一开始甚至怀疑是集群内存不够,申请将每个节点内存从12G调整到16G,并使用echo 3 > /proc/sys/vm/drop_caches释放内存,保证有足够可用内存,但再多次尝试重启后依然如故,于是在钉钉群进行请教。

二、问题分析

在钉钉OB群将问题现象进行了描述,钉钉群OB厂家技术人员建议我在社群论坛上发个帖子,并将每个节点的observer.log日志进行上传,因observer.log日志较大,最后单独发送到OB钉钉群。

很快,OB厂家技术人员反馈是因为clog空间占满导致集群初始化失败。
因为对OB不是很熟,我看了下当前clog所在的空间目录,发现还剩不少空间。

6f5b9ec2bfa116a4e2d2380042a7b671.png
2e7666d1c6d806555c44f9c0a0ce9a63.png
0716f8a3abbbb9432b53012a94e777e5.png

于是就请教OB技术人员,为什么还剩这么多空间,会导致clog占满呢。
最后经OB技术人员指导才知道是当初在部署OB集群的时候,在设置ymal文件时,将log_dsik_size设置的过小,大小仅设置了2G。
我又请教能否使用obd cluster edit-config obd 来调整log_disk_size大小,回复是不可以的。但我还是尝试修改了下,修改后,再重启集群时提示因为有修改操作,要做reload,但目前集群是停止状态无法进行reload,于是就尝试使用 obd cluster start obcluster --wop这种不加参数的方式启动,但很遗憾和之前一样,初始化时仍然失败。
需要重建集群

我也查看了下各个节点的observer.log日志,确实日志中存在提示clog空间满的报错信息。

[2023-01-29 10:40:26.633510] WARN  read_single_row (ob_table_access_helper.h:178) [3056][T1_Occam][T1][Y0-0000000000000000-0-0] [lt=13] get mysql result failed(ret=-4016, ret="OB_ERR_UNEXPECTED", MTL_ID()=1, columns=0x7f9768dccd78, table=__all_server, where_condition=where svr_ip='10.110.3.153' and svr_port=2882)
[2023-01-29 10:40:26.633604] WARN  [COORDINATOR] get_self_zone_name (table_accessor.cpp:517) [3056][T1_Occam][T1][Y0-0000000000000000-0-0] [lt=24] get zone from __all_server failed(ret=-4016, ret="OB_ERR_UNEXPECTED", columns=0x7f9768dccd78, where_condition="where svr_ip='10.110.3.153' and svr_port=2882", zone_name_holder=)
[2023-01-29 10:40:26.633614] WARN  [COORDINATOR] get_all_ls_election_reference_info (table_accessor.cpp:450) [3056][T1_Occam][T1][Y0-0000000000000000-0-0] [lt=10] get self zone name failed(ret=-4016, ret="OB_ERR_UNEXPECTED", all_ls_election_reference_info=[])
[2023-01-29 10:40:26.633620] WARN  [COORDINATOR] get_all_ls_election_reference_info (table_accessor.cpp:459) [3056][T1_Occam][T1][Y0-0000000000000000-0-0] [lt=7] zone name is empty(ret=-4016, ret="OB_ERR_UNEXPECTED", all_ls_election_reference_info=[])
[2023-01-29 10:40:26.633626] WARN  [COORDINATOR] refresh (ob_leader_coordinator.cpp:107) [3056][T1_Occam][T1][Y0-0000000000000000-0-0] [lt=5] get all ls election reference info failed(ret=-4016, ret="OB_ERR_UNEXPECTED", MTL_ID()=1)
[2023-01-29 10:40:26.642029] WARN  [PALF] recycle_blocks_ (palf_env_impl.cpp:1025) [3062][T1_PalfGC][T1][Y0-0000000000000000-0-0] [lt=30] there is not any block can be recycled, need verify the baselsn of PalfHandleImpl whether has been advanced(ret=0, this={self:"10.110.3.153:2882", log_dir:"/data/clog/tenant_1", disk_options_wrapper:{disk_opts_for_stopping_writing:{log_disk_size(MB):2048, log_disk_utilization_threshold(%):80, log_disk_utilization_limit_threshold(%):95}, disk_opts_for_recycling_blocks:{log_disk_size(MB):2048, log_disk_utilization_threshold(%):80, log_disk_utilization_limit_threshold(%):95}, status:1}})
[2023-01-29 10:40:26.642061] ERROR [PALF] try_recycle_blocks (palf_env_impl.cpp:766) [3062][T1_PalfGC][T1][Y0-0000000000000000-0-0] [lt=36] clog disk space is almost full(total_size(MB)=2048, used_size(MB)=1945, used_percent(%)=95, warn_size(MB)=1638, warn_percent(%)=80, limit_size(MB)=1945, limit_percent(%)=95, maximum_used_size(MB)=1945, maximum_log_stream=1, oldest_log_stream=1, oldest_timestamp=1673314191266029062) BACKTRACE:0xb617e7b 0xb609956 0x3d31f43 0x3d31c21 0x3d31a0c 0x3d3183e 0x3dc6b03 0x3a3ec25 0x3a3e84b 0x3a3d7a1 0xb5f880c 0xb5fc017 0xb5f6f5a 0x7f97cedbcea5 0x7f97ceae5b0d
[2023-01-29 10:40:26.643820] WARN  [PALF] recycle_blocks_ (palf_env_impl.cpp:1025) [3228][T1001_PalfGC][T1001][Y0-0000000000000000-0-0] [lt=26] there is not any block can be recycled, need verify the baselsn of PalfHandleImpl whether has been advanced(ret=0, this={self:"10.110.3.153:2882", log_dir:"/data/clog/tenant_1001", disk_options_wrapper:{disk_opts_for_stopping_writing:{log_disk_size(MB):819, log_disk_utilization_threshold(%):80, log_disk_utilization_limit_threshold(%):95}, disk_opts_for_recycling_blocks:{log_disk_size(MB):819, log_disk_utilization_threshold(%):80, log_disk_utilization_limit_threshold(%):95}, status:1}})
[2023-01-29 10:40:26.643849] ERROR [PALF] try_recycle_blocks (palf_env_impl.cpp:766) [3228][T1001_PalfGC][T1001][Y0-0000000000000000-0-0] [lt=20] clog disk space is almost full(total_size(MB)=819, used_size(MB)=778, used_percent(%)=95, warn_size(MB)=655, warn_percent(%)=80, limit_size(MB)=778, limit_percent(%)=95, maximum_used_size(MB)=778, maximum_log_stream=1, oldest_log_stream=1, oldest_timestamp=1672512916522999657) BACKTRACE:0xb617e7b 0xb609956 0x3d31f43 0x3d31c21 0x3d31a0c 0x3d3183e 0x3dc6b03 0x3a3ec25 0x3a3e84b 0x3a3d7a1 0xb5f880c 0xb5fc017 0xb5f6f5a 0x7f97cedbcea5 0x7f97ceae5b0d
[2023-01-29 10:40:26.649444] WARN  [SERVER] after_func (ob_query_retry_ctrl.cpp:834) [3117][T1_FreInfoReloa][T1][YB420A6E0399-0005F35D9642AEC5-0-0] [lt=9] [RETRY] check if need retry(v={force_local_retry:true, stmt_retry_times:30, local_retry_times:30, err_:-4722, err_:"OB_LS_LOCATION_LEADER_NOT_EXIST", retry_type:1, client_ret:-4722}, need_retry=true)

三、总结

经过这次故障,也算是对OB又增加了些了解。
另外就是在设置clog时,需要根据实际配置确认下,log_disk_size 默认是分配内存的3-4倍大小,如果内存太大,可能超出这个磁盘范围。
在此要感谢OB技术群的 @李作群 @康墨,感谢他们的指导帮助。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论