taosd 是 TDengine 的核心服务进程,如果无法启动将导致整个数据库无法使用,了解常导致无法启动的原因,可以帮你快速解决问题。
1. 如何查找日志
无法启动的原因记录在日志中,日志文件默认在 /var/log/taos 的 taosdlog.0 或者 tasdlog.1 文件,当前使用的是哪个看最后修改日期。
通常查看日志结尾为 ERROR 类日志即可快速查找出错误原因,可以使用以下脚本快速查找:
tail -n 1000 /var/log/taos/taosdlog.0 | grep ERROR
2. 常见原因
2.1 配置文件不正确
1. FQDN 不正确
现象:
示例在 taos.cfg 中的 fqdn 配置为一个不合法的名称: abcdef,启动 taosd 会失败,报如下错:

解决方法:
配置正确的 FQDN, 正确的 FQDN 必须是能 ping 通并显示的是预期 IP 地址。
配置 fqdn 在 linux 是在 /etc/hosts 中。
注意:
taos.cfg 中的 FQDN 只在 taosd 服务第一次启动时读取使用,启动成功后会保存 dataDir 指向的数据存储目录下的 dnode/dnode.json 文件中,下次再启动不再使用 taos.cfg 配置文件中,而会直接使用 dnode.json 中保存的 FQDN。
如果 dnode.json 已创建,若要修改 FQDN,需要 taos.cfg 及 dnode.json 两处都修改方可生效。
2. serverPort 不正确
示例在 taos.cfg 中的 serverPort 配置为一个超出范围的不合法端口:65539,启动 taosd 会失败,报如下错:

解决方法:
确保 serverPort 端口在指定范围内并且不被其它程序占用。
注意:
serverPort 端口修改同上面 FQDN 相同
3. dataDir 配置
dataDir 是配置数据库的存储目录,目录无访问权限或不可写会导致服务启动失败。
2.2 WAL 损坏
WAL 文件在数据写入过程中使用频繁,当突然断电再重启后最容易出现 WAL 损坏的现象。
现象:

解决方法:
把日志中提示损坏的 WAL 文件移出当前目录并备份到一个安全的地方,重新启动 taosd 即可。
WAL 中记录着已落或未落盘的数据,移除 WAL 后可能会导致部分数据丢失。
如果数据非常重要,联系涛思数据技术人员尝试修复损坏的 WAL 文件,但数据不一定能修复回来。
2.3 数据版本不兼容,如降版本操作
版本升级,老版本数据可以在新版本中完全兼容,但新版本数据在老版本中有可能会无法识别,以下是降版本后导致的 taosd 无法启动的现象:
现象:

上面的报错仅是其中一种,数据不兼容可能会报各种错误,识别的方式即看是否有降版本操作。
解决方法:
卸载老版本,再安装回原来版本即可。
2.4 端口被占用
taosd 启动过程中,taos.cfg 中的 serverPort 端口被其它程序占用后,会导致启动失败。
现象:
如下是指定的 serverPort 为 9100 的端口被其它应用占用:

解决方法:
更换其它未使用的端口或停止占用端口的应用均可解决
2.5 dataDir 损坏
在突然断电或关机的情况下,可能会导致正在写入数据损坏,再启动 taosd 服务时,会遇到无法启动的现象
现象:
以下示例是数据文件 v2f1736ver3.data 丢失,导致 taosd 无法启动

解决方法:
如果数据非常重要,联系涛思数据技术人员尝试修复损坏的文件。
如果只是测试数据,仅想把 taosd 启动起来,可以根据报错的文件,删除报错文件所在 vnode 目录下的 tsdb 目录即可。如上例中,删除 /var/lib/taos/vnode/vnode2/tsdb 目录,即可重新启动 taosd。
2.6 磁盘空间不足
TDengine 当存放数据磁盘空间小于 2G 时,会拒绝写入请求并告警磁盘空间不足,此时 taosd 服务仍然可以正常启动和工作,当磁盘空间继续减小,全部被占满后,taosd 服务将无法再启动。
现象:

解决方法:
清理出磁盘空间或增加磁盘
2.7 已有实例运行
taosd 服务是单进程工作模式,一台机器上只允许运行一个实例,如果前面已有实例在运行,再启动新实例会报启动失败错误,提示日志为尝试多次锁定 .running 失败,如下:
现象:

解决方法:
ps aux | grep taosd 查看具体占用实例进程,KILLL 后再启动即可
2.8 正在数据同步
启动 taosd 后,日志长时间显示进行 restore ,无法进入服务状态。
这个现象一般出现在集群中,当集群中某个节点上的 taosd 服务停止了一段时间,集群正在大量写入数据中,再启动已停止的节点时会出现此现象。
原因是在做数据同步,停止节点上的数据和正在运行集群中的数据有了一段差距,需要更新到与集群数据相同才可接入集群。
当需要同步数据比较多时,启动时间就会比较长,日志如下:
现象:

解决方法:
-
等待,等到与集群数据同步后即会进入服务状态
-
如果集群仍在大量数据写入,可以暂停集群数据写入,让落后节点尽快赶上来,再启动集群数据写入。
2.9不支持的平台
TDengine 服务端支持平台列表如下, 非列表中的平台,服务启动会报 0x8000013A 错误,表示不支持此平台。
|----------------|-----------|-------|-----|
| 版本 | X64 64bit | ARM64 | |
| CentOS | 7.9 以上 | ● | ● |
| Ubuntu | 18 以上 | ● | ● |
| RedHat | RHEL 7 以上 | ● | ● |
| Debian | 6.0 以上 | ● | ● |
| FreeBSD | 12 以上 | ● | ● |
| OpenSUSE | 全部版本 | ● | ● |
| SUSE Linux | 11 以上 | ● | ● |
| Fedora | 21 以上 | ● | ● |
| Windows Server | 2016 以上 | ●/E | |
| Windows | 10月11日 | ●/E | |
| 银河麒麟 | V10 以上 | ●/E | ●/E |
| 中标麒麟 | V7.0 以上 | ●/E | ●/E |
| 统信 UOS | V20 以上 | ●/E | |
| 凝思磐石 | V8.0 以上 | ●/E | |
| 华为欧拉 openEuler | V20.03 以上 | ●/E | |
| 龙蜥 Anolis OS | V8.6 以上 | ●/E | |
| macOS | 11.0 以上 | | ● |
注:
-
● 表示经过官方测试验证, ○ 表示非官方测试验证,E 表示仅企业版支持。
-
社区版仅支持主流操作系统的较新版本,包括 Ubuntu 18+/CentOS 7+/CentOS Stream/RedHat/Debian/CoreOS/FreeBSD/OpenSUSE/SUSE Linux/Fedora/macOS 等。
访问官网
更多内容欢迎访问 TDengine 官网