由于log_pool目录过大,清理完部分log_pool下文件后,observer启动不了

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.1.0
【问题描述】clog目录下的log_pool占用空间过大,手动清理log_pool部分文件后,observer启动不了,报错误:[2023-05-07 14:32:46.492282] ERROR issue_dba_error (ob_log.cpp:1786) [220397][][T0][Y0-0000000000000000-0-0] [lt=19][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4016, file=“ob_server_log_block_mgr.cpp”, line_no=486, info=“check_log_pool_whehter_is_integrity_ failed, unexpected error”)

启动日志见附件

【复现路径】问题出现前后相关操作
【问题现象及影响】
[2023-05-07 14:32:46.492282] ERROR issue_dba_error (ob_log.cpp:1786) [220397][][T0][Y0-0000000000000000-0-0] [lt=19][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4016, file=“ob_server_log_block_mgr.cpp”, line_no=486, info=“check_log_pool_whehter_is_integrity_ failed, unexpected error”)
[2023-05-07 14:32:46.492320] EDIAG [CLOG] do_load_ (ob_server_log_block_mgr.cpp:486) [220397][][T0][Y0-0000000000000000-0-0] [lt=37][errcode=-4016] check_log_pool_whehter_is_integrity_ failed, unexpected error(ret=-4016, this={dir::"/data/oceanbase/storage/ob/clog/log_pool", dir_fd:14, meta_fd:15, log_pool_meta:{curr_total_size:103079215104, next_total_size:103079215104, status:0}, min_block_id:2323, max_block_id:2533, min_log_disk_size_for_all_tenants_:0, is_inited:true}, log_disk_path="/data/oceanbase/storage/ob/clog", has_allocated_block_cnt=612) BACKTRACE:0xd5f8c19 0x59b755a 0x59b706f 0x59b6e66 0x59aeac8 0x63f38a7 0x63eaf42 0x7d647fe 0x598bc13 0x7f23883e3c05 0x3e4900c
[2023-05-07 14:32:46.492424] ERROR issue_dba_error (ob_log.cpp:1786) [220397][][T0][Y0-0000000000000000-0-0] [lt=98][errcode=-4388] Unexpected internal error happen, please checkout the internal errcode(errcode=-4016, file=“ob_server_log_block_mgr.cpp”, line_no=103, info=“do_load_ failed”)
【附件】
日志.txt (167.3 KB)

请问能发下完整日志吗?请问下是集群启动不了还是单节点启动不了?

日志.txt (167.3 KB)

单节点observer,集群就一个节点

单节点集群,如果删除了clog文件,是无法恢复了,这个属于高危操作,需要重新部署集群了

log_pool是ob的日志池化,根据log_disk_size/64M创建出多个log_file,当ob需要记录redolog时,需要从log_pool里申请log_file

log_pool下的文件生成分配的机制是什么的,与clob目录下各租户的目录tenant_xxx/1001/log区别是什么
[root@ocp1 clog]# du -h -d 1
21G ./log_pool
4.8G ./tenant_1
8.7G ./tenant_1002
960M ./tenant_1001
18G ./tenant_1004
1.9G ./tenant_1003
2.9G ./tenant_1006
1.9G ./tenant_1005
60G .

log_pool 是里的文件是预分配文件,可以理解为clog的磁盘池,clog里面的每一个文件log file 取之于 log_pool,clog被回收后,log file 归还给log_pool。
举个例子,如果用例指定log_disk_size=128M,那么按照每个clog文件64M,那么log_pool里就有2个文件,这两个文件会被取出来使用,用完会放回log_pool。

1 个赞

我已经包clog删了,observer启动不了,库里有重要数据,不想重新部署集群,我怎么恢复数据库呢