强杀服务、重启系统及断电对 TDengine 影响

  1. 背景介绍

最近发现 TDengine 企业用户及社区论坛用户中都有反馈服务器断电后导致 TDengine 无法启动的问题,服务器突然断电对 TDengine 影响有多大,这里做了个专业的测试, 让你能够了解到断电对 TDengine 的影响。

  1. 测试方案

在有大量数据写入及查询的情况下,制造异常,异常后启动 TAOSD 服务,检查 TAOSD 服务是否能够正常启动,并通过日志文件查找是否有损坏的文件及是否进行了修复行为。

异常主要分两大类:

1)非物理断电异常

  • 杀 taosd 进行(kill taosd)
  • 强杀 taosd 进行 (kill -9 taosd)
  • 操作系统重启(reboot 命令)
  • 点击关机按钮关机后再启动

2)物理断电异常

使用定时断点插座,每10 分钟掐断电源一次

  1. 测试数据及结论
  • 整体数据:

    分类 操作 实验次数 TAOSD 无法启动 是否有文件损坏 文件修复成功率
    非物理断电 强杀 taosd 进程 246 次 0 次 7 次 100%
    系统重启(reboot) 579 次 0 次 0 次 -
    物理断电 掐断电源 177 次 12 次 56 次 78%

    测试结论:

    1)物理断电是造成文件损坏及导致 TAOSD 无法启动的主要原因

    2)非物理断电造成的文件损坏基本都能自修复

    3)系统重启是一个有通知的退出行为,几乎不会造成文件损坏

  • 物理断电场景下文件损坏:

    序号 损坏文件类型 实验次数 损坏次数 损坏率 修复成功次数 修复成功率
    1 WAL 文件 177 35 20% 29 83%
    2 WAL meta-ver 文件 177 1 0.5% 0 0%
    3 VNODE 下 current.json 文件 177 5 2.8% 0 0%
    4 VNODE 下 .head .data .stt 文件 177 5 2.8% 2 40%
    5 ROCKDB 文件 177 3 1.6% 0 0%

    测试结论:

    1)文件损坏和写文件频次正相关,WAL 文件写频次最高,损坏也最高

    2)WAL 文件损坏修复率最高,剩下类型文件除 .head 与.data 可互修外,其它很难自修复

说明:

1)次数是指一次实验中或有多个文件损坏,仍计为一次

2)修复是指程序自动修复,非人工修复

  1. 无法启动解决方案

当有文件损坏时, TAOSD 是无法启动的,可分为以下几个场景解决:

  • 数据为价值重要数据:联系涛思技术人员尝试人工修复
  • 数据丢一些也能接受:尝试备份受损文件后删除
  • 数据是测试数据,可清空数据目录即可启动 TAOSD

TAOSD 无法启动后会在日志中记录损坏文件位置及名称,可确定损坏的是什么文件。

注意:通过删除受损文件的方式可能会导致一部分数据丢失的现象。

  1. 避免方案

导致文件损坏的主要原因是服务器突然断电,如果机房供电不稳,可通过成熟的 UPS 方案来保证,若没有这个条件,也可以通过购买带有服务器断电后可回写缓存数据的硬盘来解决。

  1. 总结
  • 非物理断电的软异常,如强杀 TDengine 服务、系统重启等,磁盘都有机会把缓存中数据落盘,所以造成文件损坏的概率不大,即使产生了,也是有预期内的不完整,能够自我修复好。
  • 物理断电,造成的影响会比较大,往往文件损坏的结果无预期,很多情况下无法自我修复,造成 TAOSD 服务无法启动。
  • 为了避免故障,建议尽可能提供稳定的机房电源,或增加 UPS 备用电源设备,也可以使用带断电保护的磁盘来减小故障的产生。

关于 TDengine

TDengine 专为物联网IoT平台、工业大数据平台设计。其中,TDengine TSDB 是一款高性能、分布式的时序数据库(Time Series Database),同时它还带有内建的缓存、流式计算、数据订阅等系统功能;TDengine IDMP 是一款AI原生工业数据管理平台,它通过树状层次结构建立数据目录,对数据进行标准化、情景化,并通过 AI 提供实时分析、可视化、事件管理与报警等功能。

相关推荐
zh15702317 小时前
JavaScript中WorkerThreads解决服务端计算瓶颈
jvm·数据库·python
代码AI弗森17 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
^—app56686618 小时前
游戏运存小启动不起来临时解决方法
运维·服务器
摇滚侠18 小时前
expdp 查看帮助
java·数据库·oracle
流年似水~18 小时前
MCP协议实战:从零搭建一个让Claude能“看见“数据库的工具服务
数据库·人工智能·程序人生·ai·ai编程
Ujimatsu18 小时前
虚拟机安装Debian 13.x及其常用软件(2026.4)
linux·运维·ubuntu
2401_8714928518 小时前
Vue.js监听器watch利用回调函数处理级联下拉框数据联动
jvm·数据库·python
志栋智能19 小时前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
zhoutongsheng20 小时前
C#怎么实现Swagger文档 C#如何在ASP.NET Core中集成Swagger自动生成API文档【框架】
jvm·数据库·python
WinterKay20 小时前
【开源】我写了一个轻量级本地数据库浏览工具,支持 MySQL/Redis 只读查询
数据库·mysql·开源