IoTDB 常见问题 Q&A 第六期

关于 IoTDB 的 Q & A

第六期持续答疑解惑中!我们将定期汇总社区讨论频繁的问题,并展开进行详细回答,通过积累常见问题"小百科",方便大家使用 IoTDB。

Q1:IoTDB 看门狗配置后不生效

问题现象

使用 IoTDB 安装包自带的脚本 daemon-confignode.shdaemon-datanode.sh 配置看门狗后,使用"kill -9 ConfigNode 进程号 DataNode 进程号"的方式杀掉数据库进程后,数据库进程不会自动重启。

原因

执行脚本后,默认生成的 service 文件中的 RestartPreventExitStatus=SIGKILL,表示如果服务退出状态码为 SIGKILL(信号 9),则不会重启服务,所以数据库进程不会自动重启。

解决方案

  1. 执行完 daemon-confignode.shdaemon-datanode.sh 后,数据库进程服务其实还没有被 systemd 接管,这时需要先把 ConfigNode 和 DataNode 服务手动停一下,然后使用下面的命令启动服务,这样数据库进程就会被 systemd 接管了。
sql 复制代码
systemctl start iotdb-confignode.servicesystemctl start iotdb-datanode.service
  1. 修改 /etc/systemd/system/iotdb-confignode.service 和 /etc/systemd/system/iotdb-datanode.service 中的内容,把 RestartPreventExitStatus=SIGKILL 这一行注释掉。
  1. 修改完脚本后执行以下命令使修改生效。
nginx 复制代码
systemctl daemon-reload

上面的步骤执行完成后,这时再杀掉数据库进程,看门狗就可以自动拉起数据库服务了。

Q2:IoTDB 写入数据后 data 目录为空

问题现象

向 IoTDB 写入少量数据后,使用 CLI 工具可以查询到这部分数据,但是在 data 目录下未查找到对应的 TsFile 文件。

问题原因

写入数据时首先写入 memtable,记录 wal,并没有直接落盘。少量数据写入情况下可能并未触发 memtable 的持久化操作,因此在 data 目录下查看不到对应的 TsFile。而通过 CLI 命令行可以从内存中查询到这部分数据。

解决方案

在 CLI 中手动执行 flush 可以将当前 memtable 的所有数据持久化到磁盘上,将 TsFile 文件封口,然后在 data 下对应的目录中可以获取到完整的 TsFile。

思考

在做测试、备份等场景中,保证此时没有并发写入的条件下,需要当前数据文件完整性的话,可以手动 flush(使用 CLI 或者程序)。

Q3: IoTDB 日志提示 Too many open files

问题

IoTDB 1.3.3 版本 IoTDB 执行查询操作失败,日志打印提示 Too many open files。通过命令查看打开文件数,结果如下:

cs 复制代码
[root@0002 DataReceiver]# lsof|grep  28347|wc -l     DataNode55444[root@0002 DataReceiver]# lsof|grep  28207|wc -l    ConfigNode18574

查看当前网络连接数,结果如下:

原因和解决方案

原因一:连接太多

**解决方案:**降一点客户端并发。

原因二:文件太多

**解决方案:**观察顺乱序文件数目以及各个模块文件的大小,TsFile 过多可以调优合并,顺序文件或者乱序文件过多可以修改配置。

ini 复制代码
# The priority of compaction execution# INNER_CROSS: prioritize inner space compaction, reduce the number of files first# CROSS_INNER: prioritize cross space compaction, eliminate the unsequence files first# BALANCE: alternate two compaction types# compaction_priority=BALANCE# 优先执行空间内合并任务compaction_priority=INNER_CROSS# BALANCE 各种合并平等# INNER_CROSS 优先进行顺序文件和顺序文件或乱序文件和乱序文件的合并# CROSS_INNER 优先将乱序文件合并到顺序文件中

如果条件允许(系统资源利用率不高,对其他模块无影响的情况下),可以适当再调大合并写入限速、合并任务并发数,加速合并。

apache 复制代码
# How many threads will be set up to perform compaction, 10 by default.# Set to 1 when less than or equal to 0.# Datatype: int# compaction_thread_count=1
# The limit of write throughput merge can reach per second# values less than or equal to 0 means no limit# Datatype: int, Unit: megabyte# compaction_write_throughput_mb_per_sec=16# 每秒可达到的写入吞吐量合并限制。
# The number of sub compaction threads to be set up to perform compaction.# Currently only works for nonAligned data in cross space compaction and unseq inner space compaction.# Set to 1 when less than or equal to 0.# Datatype: int# sub_compaction_thread_count=4# 每个合并任务的子任务线程数,只对跨空间合并和乱序空间内合并生效

Q4:IoTDB TTL 不生效

问题

IoTDB 1.3.0 版本数据库的 TTL 设置为两天,show databases details 看到设置也是正确的,怎么还是可以查到好几天前的数据?因为有很多不活跃的测点,所以专门设置了两天过期,有什么办法可以自动清理呢?设置方式是在配置文件统一设置的。

原因

  • 可能因为期间出现过 ConfigNode OOM,加了内存重启过。

  • 或者是当前版本已解决的 TTL Cache 不一致问题。

方案

  • 用命令 unset 然后再 set,设置就可以生效了。

  • 升级到最新版 IoTDB。

Q5: IoTDB 一台节点的 DataNode 出现 xxxx.tsfile is not complete, and some source files is lost 错误

问题

使用 IoTDB 1.3.0 版本集群的时候,其中有一台节点的 DataNode 出现这个错误,造成无法正常写入数据:

sql 复制代码
2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] ERROR o.a.i.d.s.d.c.e.r.CompactionRecoverTask:292 - root.ln-5 [Compaction][ExceptionHandler] target file unsequence/root.ln/5/2865/1733480889427-13297-1-0.tsfile is not complete, and some source files is lost, do nothing. Set allowCompaction to false 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] INFO  o.a.i.c.conf.CommonConfig:399 - Set system mode from Running to ReadOnly. 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] WARN  o.a.i.c.conf.CommonConfig:405 - Change system status to ReadOnly! Only query statements are permitted! 2024-12-12 14:30:46,136 [pool-8-IoTDB-StorageEngine-3] ERROR o.a.i.d.s.d.c.e.r.CompactionRecoverTask:142 - root.ln-5 [Compaction][Recover] Failed to recover compaction, set allowCompaction to false

还有两个 DataNode 节点是好的,连接好的 DataNode 节点写入是没有问题的,但是剩下的节点就不行了。

原因

在低版本的 IoTDB 当中,Compaction 时出现上述异常,会将对应的 DataNode 设置为 ReadOnly 的状态,此时该节点会无法进行写入请求。

解决方案

更新至 IoTDB 1.3.3 及以上版本。

规上企业应用实例

能源电力:中核武汉国网信通产业集团华润电力大唐先一上海电气国轩清安储能某储能厂商太极股份

航天航空: 中航机载共性北邮一号卫星

钢铁、金属冶炼: 宝武钢铁中冶赛迪中国恩菲

交通运输: 中车四方长安汽车城建智控德国铁路

智慧工厂与物联: PCB 龙头企业博世力士乐德国宝马北斗智慧物联某物联大厂昆仑数据怡养科技绍兴安瑞思

相关推荐
musk12124 分钟前
ubuntu 安装 g++
linux·运维·ubuntu
徐小黑ACG9 分钟前
Ubuntu下载docker、xshell
linux·ubuntu·docker
A~taoker18 分钟前
jmeter接口自动化+ant执行(方案)
运维·jmeter·自动化
即兴小索奇30 分钟前
王者荣耀服务器突然崩了
运维·服务器·王者荣耀
TPCloud33 分钟前
如何快速解决django存储session变量时出现的django.db.utils.DatabaseError错误
数据库·python·django
山外有山a44 分钟前
neo4j知识图谱常用命令
服务器·数据库·oracle
重启就好1 小时前
【LVS】负载均衡群集部署(DR模式)
服务器·负载均衡·lvs
2101_824775821 小时前
Debian ubuntu源
服务器·ubuntu·debian
vortex51 小时前
如何为 Debian 和 Kali 系统更换软件源并更新系统
linux·运维·网络·网络安全·渗透测试·debian·kali
大明者省1 小时前
Xshell远程登录腾讯云高性能应用服务
linux·服务器·腾讯云