
凡是玩过 TDengine 的都知道安装这事要是顺利十分钟就能让服务端跑起来要是不顺光一个 FQDN 解析就能折腾到半夜。这篇文章是我在真实部署 TDengine 过程中整理出来的一套保姆级流程覆盖服务端安装、客户端配置、远程连接和常见问题排查主线以 TDengine 3.x 为例。如果你是第一次接触 TDengine建议从头开始看如果你之前已经在生产环境用过 2.x可以重点看服务端安装和 FQDN 配置这两块这两个地方是最容易踩坑的。这篇文章的目标很简单看完之后你能把 TDengine 装到一台干净的 Linux 机器上并且从自己的电脑连进去完成建库、建表、写入数据、查询数据这一整套动作。里面所有命令我都按照实际操作顺序写出来了包括安装包选择、系统服务管理、端口放行、连接器接入每一步都有解释不是单纯丢给你一串命令就完事。1. 先把架构看清TDengine 的“服务端”和“客户端”到底是什么1.1 一个时序数据库到底要装哪些东西很多新手第一次接触 TDengine容易把“安装”想成一个软件包搞定。实际上TDengine 的部署体系里至少包含三个层次第一个层次是服务端本体taosd它负责数据存储、查询计算、集群管理和时间分区调度。你所有的库表数据、超级表模型、数据文件都由它来管。第二个层次是各种“客户端接入方式”包括命令行工具taos、各语言连接器Python、Java、Go、Node.js 等、RESTful 接口和可视化工具。第三个层次是辅助组件比如taosAdapter负责把 RESTful、OpenTSDB、collectd 等协议接入taosdtaosExplorer是官方提供的 Web 管理界面。这个划分很重要因为很多人安装时只装了服务端然后在另一台机器上找不到 taos 命令就以为安装失败了。其实 taos CLI 默认包含在服务端安装包里也可以在客户端单独装。你先想清楚自己到底需要哪一部分再决定装什么后面就不乱了。1.2 以 3.x 为主线2.x 和 3.x 的架构差异要心里有数TDengine 目前主流的版本已经进入 3.x。3.0 之后产品和 2.x 相比有不少调整最直观的变化是组件拆分更清晰了taosd专注存储与查询taosAdapter负责协议接入和 RESTful 服务taosExplorer提供图形化管理页面taosKeeper负责监控指标采集。这种拆分在安装和运维上的直接体现就是你可能会看到多个 systemd 服务而不是只有一个 taosd 在跑。2.x 的架构也不差但官方已经明确新功能主要在 3.x 上迭代新的生产项目直接用 3.x 更稳妥。如果你只是自己学习或者做概念验证直接上 3.x 准没错。当然如果你的线上已经有 2.x 集群在稳定运行就不要为了“尝鲜”随便升级等制定好迁移方案再说。1.3 安装前的资源评估别等跑起来才发现不够TDengine 的安装门槛确实不算高但资源评估要做在前面。我自己的经验是单机测试环境至少 4 核 8GB 内存数据盘建议用 SSD尤其是写入压力大的场景机械盘很容易成为瓶颈。官方给的最低配置可以跑起来但你在安装后做性能验证时CPU 和 IO 很快就会露出短板。操作系统方面Linux 是首选。官方主推 Ubuntu、CentOS 等常见发行版Windows 和 macOS 更多用于开发调试或者只装客户端。另外我要特别提醒一件事时间同步。时序数据库对时间敏感服务器时间偏差过大会直接影响数据写入和查询的准确性安装前最好确认 ntp 或 chrony 已经配好。别小看这一步后面你排查数据错乱的时候会感谢自己。2. 服务端安装一个 Linux 新手也能照做的完整流程2.1 下载安装包官方仓库和 tar 包两种方式怎么选TDengine 服务端的安装主流有两种方式一种是直接通过官方软件仓库用 apt 或 yum 安装另一种是去官网或 GitHub 下载 tar.gz 包手动安装。两者没有本质区别选择标准主要看你的网络环境和系统版本。如果你用的是 Ubuntu/Debian并且网络能访问官方软件源仓库安装是最省事的curl -fsSL https://repos.taosdata.com/tdengine.key | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/tdengine.gpg echo deb https://repos.taosdata.com/tdengine-stable/3.x/deb/ . / | sudo tee /etc/apt/sources.list.d/tdengine-stable.list sudo apt-get update sudo apt-get install tdengineRHEL/CentOS 系列则用 yum 仓库这里我不过多展开官方文档写得很清楚。如果你所在的服务器无法访问外网或者你希望精确控制安装版本那就走 tar 包方式# 从官网或 GitHub Releases 下载对应版本的 tar 包 wget https://www.taosdata.com/assets-download/3.0/TDengine-server-3.0.x.x-Linux-x64.tar.gz tar -xzf TDengine-server-3.0.x.x-Linux-x64.tar.gz cd TDengine-server-3.0.x.x-Linux-x64 sudo ./install.sh安装脚本会告诉你安装路径、数据目录和日志目录。数据默认在/var/lib/taos日志在/var/log/taos配置文件在/etc/taos/taos.cfg。这些路径后面排查问题时经常用到建议提前记住。2.2 install.sh 安装过程实录遇到提示不要慌执行sudo ./install.sh时脚本会自动完成二进制文件拷贝、systemd 服务文件创建、默认配置生成这几件事。如果你的机器上已经存在旧的 TDengine 安装残留脚本会提示是否覆盖。这里我有一个建议如果你不确定旧版本是否还需要先备份数据目录和配置文件再覆盖别一上来就选 yes。安装完成后可以先看一眼服务状态是否已经自动在运行。不同版本的安装脚本行为略有差异有的会自动拉起 taosd有的需要你手动启动。所以下一步我们自己手动确认一遍这样更可控。2.3 启动服务、查看状态和设置开机自启TDengine 3.x 安装后系统里会多出几个 systemd 服务。最核心的是 taosd启动命令如下sudo systemctl start taosd sudo systemctl status taosd sudo systemctl enable taosd看到active (running)就说明服务端已经跑起来了。这里要特别注意enable的作用是设置开机自启生产环境务必执行否则服务器重启后数据库不会自动恢复。如果服务没有起来不要急着反复 start先看日志tail -n 100 /var/log/taos/taosdlog.0日志文件是定位问题的第一手资料。端口占用、目录权限、配置错误都会在这里留下线索。另一个常见场景是系统里没有 systemd或者你是在容器里安装这时你可以直接前台运行taosd看输出日志会直接打到终端上方便快速判断。在 3.x 中如果你还需要通过 RESTful 接口或 Web 页面访问记得把配套服务也启动。比如sudo systemctl start taosadapter sudo systemctl enable taosadapter sudo systemctl start taos-explorer sudo systemctl enable taos-explorer如果你执行后提示 unit not found不要慌说明当前版本没集成该组件或服务名不同。你可以用systemctl list-unit-files | grep taos查一下实际可用的服务名称。2.4 第一次进入 taos 命令行只要记住这几个命令就够服务端安装完成后直接执行taos就能进入命令行客户端。默认连接本机的 6030 端口默认用户名 root默认密码 taosdata这个组合一定要记住后面经常用。进入之后先跑几个最基础的命令确认系统正常SHOW DATABASES; CREATE DATABASE test; USE test; QUIT;SHOW DATABASES能看到默认的 log 库等信息CREATE DATABASE test创建一个测试库这一步能验证写入路径是否可用。到这一步服务端安装就算彻底通了。3. 客户端安装与使用CLI、连接器和图形界面3.1 “客户端”不止一个先明确你要装哪一种服务端装好之后你还需要一个“客户端”才能从自己的电脑上操作数据库。这个客户端可以分三类第一类是命令行客户端taos它在服务端安装包里自带也可以单独安装适合在服务器上快速执行 SQL。第二类是各语言连接器比如 Python 的taospy、Java 的taos-jdbcdriver、Go 的driver-go这是你在自己程序里访问 TDengine 的正式通道。第三类是可视化工具比如官方 taosExplorer或者接 Grafana 做监控大盘。不同客户端之间没有“哪个更好”的说法看你的使用场景。我做开发测试时习惯用命令行写业务代码时用连接器日常巡检直接用 Web 界面。下面三种都过一遍你根据自己需要选。3.2 taos 命令行客户端的单独安装方式如果你不想在客户端机器上装完整服务端只想用 taos 命令连远程库可以单独安装 TDengine-client 安装包。Linux 下官方提供了 client 的 tar 包安装过程和 server 类似tar -xzf TDengine-client-3.0.x.x-Linux-x64.tar.gz cd TDengine-client-3.0.x.x-Linux-x64 sudo ./install.shWindows 下更简单官方提供解压即用的客户端 zip 包把压缩包解压到任意目录进入目录执行taos.exe就能用。macOS 用户可以通过 Homebrew 安装 taos 客户端或者直接下载官方安装包。连接远程服务器这个动作本质就是指定目标主机的 IP 和端口taos -h 192.168.1.100 -P 6030-h后面是 TDengine 服务器的 IP 或主机名-P是端口默认就是 6030。如果你在本机直接敲taos默认连回本机不需要额外参数。3.3 官方连接器安装Python 和 Java 各跑一遍实际业务中连接器比命令行用得更频繁。Python 是数据分析和后端开发里最常用的官方推荐的 3.x 驱动是taospy一条 pip 命令搞定pip install taospy然后在 Python 脚本里连接数据库import taospy conn taospy.connect(host192.168.1.100, userroot, passwordtaosdata, port6030, databasetest) cursor conn.cursor() cursor.execute(CREATE TABLE IF NOT EXISTS t1 (ts TIMESTAMP, value FLOAT)) cursor.execute(INSERT INTO t1 VALUES (now, 12.3)) cursor.execute(SELECT * FROM t1) for row in cursor.fetchall(): print(row) cursor.close() conn.close()这段代码会连上远程的 TDengine建一张表写入一条数据再读出来。如果你能完整跑通说明客户端、网络、服务端这整条链路都是通的。Java 项目则通过 Maven 引入官方 JDBC 驱动dependency groupIdcom.taosdata.jdbc/groupId artifactIdtaos-jdbcdriver/artifactId version3.2.7/version /dependency连接字符串长这样String url jdbc:TAOS://192.168.1.100:6030/?userrootpasswordtaosdata; Class.forName(com.taosdata.jdbc.TSDBDriver); Connection conn DriverManager.getConnection(url); Statement stmt conn.createStatement(); stmt.execute(CREATE DATABASE IF NOT EXISTS test); stmt.execute(USE test);其他语言比如 Go、Node.js、C 语言的连接器在官方文档里都有对应说明接入思路大同小异无非是引入驱动、创建连接、执行 SQL 这三板斧。3.4 用 taosExplorer 当 Web 管理后台TDengine 3.x 自带了一个 Web 管理页面 taosExplorer对不习惯敲命令的人非常友好。启动服务后浏览器访问http://服务器IP:6042使用默认账号 root、密码 taosdata 登录就能看到数据库列表、节点状态、监控信息等。相比命令行图形界面在查看集群健康状态、慢查询分析和数据浏览时直观很多。我一般在部署完成后先打开 taosExplorer 确认整体状态再回头用命令行做精细操作。如果你的系统里 taos-explorer 服务没有自动启动可以手动运行sudo systemctl start taos-explorer sudo systemctl enable taos-explorer如果服务名不是这个找一下可执行文件which taosExplorer直接前台执行也能启动适合排查 Web 页面打不开的问题。4. 远程连接的三个拦路虎FQDN、端口和鉴权4.1 FQDN 是个什么鬼为什么连不上时老是它我见过最多的安装失败案例不是下载错误而是客户端连接时报 FQDN 解析失败。FQDN 全称 Fully Qualified Domain Name简单理解就是“完全限定域名”。TDengine 集群里的每个节点默认会把服务器的 hostname 当作自己的 FQDN 身份标识。举一个最常见的例子你的服务器 hostname 是td-server客户端用taos -h 192.168.1.100连接时服务端会把自己的节点信息告诉客户端其中包含 FQDNtd-server。如果客户端机器无法解析这个主机名后面某些操作就会报解析错误。解决办法是配置 hosts 文件让客户端能把服务器主机名和 IP 对上。在客户端机器上编辑/etc/hostsWindows 是C:\Windows\System32\drivers\etc\hosts加入一行192.168.1.100 td-server这样两端就能“认出”对方了。如果是单机测试不想改 hosts 也可以很多基础操作照样能执行但一旦涉及集群、分布式查询或者监控采集FQDN 解析问题就会集中爆发。所以我的习惯是装完服务端后立刻确认 hostname然后在所有需要连接的机器上把 hosts 配好一劳永逸。这里还要提醒一点TDengine 数据目录初始化后如果篡改服务端 hostname 或修改/etc/taos/taos.cfg里的fqdn参数可能会导致节点身份变化集群状态异常。如果你刚装完还没写入重要数据最干净的办法是清空数据目录重新初始化如果有业务数据改 FQDN 之前一定要先做备份和集群评估。4.2 防火墙和端口放行一个都不能少如果你确认服务端正常运行但远程客户端还是连不上十有八九是防火墙拦住了。TDengine 涉及几个常用端口6030是 taosd 的主服务端口客户端连接器和 taos CLI 走这个口6041是 taosAdapter 提供 RESTful 接口的 HTTP 端口6042是 taosExplorer 的 Web 页面端口。集群部署时还会用到更多端口但单机安装至少要确保这三个通。Linux 下如果你启用了 firewalld放行命令如下sudo firewall-cmd --zonepublic --add-port6030/tcp --permanent sudo firewall-cmd --zonepublic --add-port6041/tcp --permanent sudo firewall-cmd --zonepublic --add-port6042/tcp --permanent sudo firewall-cmd --reload如果是 ufw则用sudo ufw allow 6030/tcp这种写法。有些云服务器还需要在安全组里放行对应端口这是最容易忽略的一步因为本机测试正常换台机器就怎么都连不上多半是云安全组没配置。我建议你在安装前就先规划好端口清单并且在服务端执行一次ss -lntup | grep taos来确认监听状态确认端口在监听之后再排查防火墙这样能少走很多弯路。4.3 默认账号和密码别把 taosdata 留到生产环境TDengine 安装完成后的默认认证是用户名 root、密码 taosdata本地测试没有任何问题但一旦部署到生产或者暴露到公司内网必须第一时间修改默认密码。修改方式非常直接进入 taos CLIALTER USER root PASSWD 强密码;修改之后之前所有用 root 和旧密码建立的连接都会失效程序端连接配置也要同步更新。这里我不建议在密码里使用过于简单的字符毕竟数据库里存的是业务核心数据时序数据同样敏感。另外如果你计划给不同业务线开不同账号TDengine 支持创建用户CREATE USER app_user PASSWD app_password; GRANT ALL ON dbname.* TO app_user;权限细化可以后面慢慢研究但“第一时间改掉默认密码”这件事请放在安装流程里不要跳过。5. 端到端验证从建库到写入查询一次跑通5.1 用 taos CLI 完成建库、建超级表、写入和查询服务端、客户端、网络这几个环节都打通之后最后一步就是用一条完整链路验证安装成果。先从 taos CLI 开始登录后执行下面的 SQLCREATE DATABASE IF NOT EXISTS demo; USE demo; CREATE STABLE IF NOT EXISTS meter (ts TIMESTAMP, current FLOAT, voltage INT) TAGS (location BINARY(64), group_id INT); INSERT INTO d1001 USING meter TAGS (北京, 1) VALUES (now, 10.5, 220); INSERT INTO d1002 USING meter TAGS (上海, 2) VALUES (now, 12.8, 220); SELECT * FROM meter; SELECT location, AVG(current) FROM meter GROUP BY location;这里有几个细节值得展开。第一CREATE STABLE是建超级表它定义了数据的 schema 和标签模型。第二INSERT INTO d1001 USING meter TAGS (...)是典型的“按超级表创建子表并写入”语法它把具体设备 d1001 和标签绑定在一起。第三最后一条GROUP BY location是按标签分组做聚合这是时序数据里非常常见的统计方式。如果你能看到查询结果返回了多行数据并且AVG(current)有正确的计算值说明数据库的写入和查询链路都是正常的。这里推荐你反复多执行几次插入和查询稍微压一点数据量验证一下写入性能。5.2 用一个 Python 程序验证远端客户端命令行通了再验证程序连接。回到前面 3.3 小节的 Python 代码把连接参数改成你真实的服务器 IP 和数据库名再跑一遍。我建议你在代码里加一点异常处理不然一旦网络不通报错信息会很模糊import taospy try: conn taospy.connect(host192.168.1.100, userroot, passwordtaosdata, port6030, databasedemo) cursor conn.cursor() cursor.execute(INSERT INTO d1003 USING meter TAGS (广州, 3) VALUES (now, 15.6, 220)) cursor.execute(SELECT COUNT(*) FROM meter) print(total rows:, cursor.fetchone()[0]) cursor.close() conn.close() print(connection and query OK) except Exception as e: print(connect or execute failed:, e)这个脚本可以作为客户端安装是否成功的“验收标准”。如果它打印出 total rows 和 connection and query OK说明你的客户端驱动、网络连接、账号权限全部正常。如果报错优先检查三件事第一服务器防火墙是否放行 6030第二客户端能否解析服务器 FQDN第三账号密码是否正确。这三个问题涵盖了绝大多数连接失败场景。5.3 RESTful 接口验证用 curl 也能查数据TDengine 提供 RESTful 接口好处是任何支持 HTTP 的客户端都能访问不需要装任何驱动。前提是 taosAdapter 已经启动端口 6041 正常监听。验证方式很简单curl -u root:taosdata http://192.168.1.100:6041/rest/sql -d SELECT server_version()返回结果里会带有 TDengine 的版本号信息。这个命令可以作为快速健康检查特别适合在客户端机器上不做任何安装的情况下先确认服务端口和认证是否正常。比如你在排查“是不是客户端有问题”时先用 curl 验证服务端能迅速缩小问题范围。6. 常见问题速查安装配置中的高频坑和解决办法6.1 服务起不来端口占用、目录权限和内存不足服务起不来是安装阶段最高频的问题。第一步看/var/log/taos/taosdlog.0日志会直接告诉你原因。最常见的有几种6030 端口被其他进程占用用lsof -i:6030可以查到数据目录没权限确认/var/lib/taos的所有者是 taos 用户内存不足ibdata 或者 mmap 分配失败这种在小内存机器上很常见要么扩内存要么调低一部分缓存参数。如果是端口占用先确认占用进程是不是另一个 taosd。如果是残留进程处理掉再启动如果是其他业务程序占用了 6030你可以修改/etc/taos/taos.cfg里的serverPort参数绕开冲突端口。6.2 客户端连不上网络不通、FQDN 解析失败和防火墙客户端连不上我建议按顺序排查先在本机执行ping 服务器IP确认网络通再执行telnet 服务器IP 6030确认端口能通然后用taos -h 服务器IP连接看报什么错。如果是 FQDN 解析相关报错按 4.1 小节的方法配置 hosts。如果 telnet 都不通优先检查防火墙和安全组。这个排查顺序的好处是从底向上逐层剥离问题不会在东一头西一头乱试。很多朋友一上来就改客户端配置改了半天发现是安全组没放行浪费了大把时间。6.3 登录报错认证失败和版本不匹配输入默认账号和密码却提示认证失败第一件事是确认密码是否已经改过。如果你刚执行过 ALTER USER 修改密码那旧密码自然就失效了。版本不匹配的报错通常出现在 2.x 客户端连 3.x 服务端或者反过来这是因为协议做了兼容性调整。我强烈建议客户端和服务端保持同一个大版本最好小版本也一致避免各种莫名其妙的兼容问题。6.4 学会看日志最快的排查路径我把日志查看提到最后是因为这是最高效的手段。TDengine 的日志集中在/var/log/taos/目录文件名通常带编号和日期比如taosdlog.0、taosdlog.1。排查时用 tail 或 grep 定位关键错误比如grep -i error /var/log/taos/taosdlog.0 | tail -n 30看日志时不要只盯着 ERROR 关键字的字面意思要带上上下文一起读。很多时候前面的 WARNING 才是真正的根因后面的 ERROR 只是连锁反应。这里我把安装部署中最高频的问题整理成一个速查表方便你以后直接对照问题现象常见原因解决思路taosd 启动失败端口被占用或数据目录权限异常检查 6030 端口占用确认 /var/lib/taos 权限查看 taosdlog.0本地 taos 能连远程连不上防火墙或云安全组未放行放行 6030/6041/6042 端口用 telnet 验证连通性报 FQDN 解析失败客户端 hosts 里没有服务器主机名映射在客户端 hosts 文件添加 服务器IP 和 hostname 的映射认证失败默认密码已修改或账号错误用当前正确密码连接必要时用正确账号重置密码RESTful 接口 404/连不上taosAdapter 未启动或 6041 未放行启动 taosadapter 服务确认 6041 端口监听数据写入后查不到时区配置不一致调整客户端和服务端时区设置保持时间同步一致这个表格基本覆盖了我实际部署中遇到的大部分问题。如果你遇到了新问题第一步永远是看日志第二步才是上网搜索日志里的错误信息是最准确的线索。我个人在实际操作中的体会是TDengine 的安装并不难难的是对架构有清晰认知。很多人装完服务端就觉得完事了结果客户端不会连、端口没放行、FQDN 没配任何一个环节掉链子都会卡住。建议你按照这篇文章的顺序走一遍先在本地虚拟机上跑通服务端再从自己的电脑用命令行和 Python 各连一次最后再考虑接入实际业务。最后再分享一个小技巧如果你是为了快速体验 TDengine不想在机器上留太多安装痕迹也可以用 Docker 跑一次测试一条命令就能拉起来。但生产环境我依然推荐走完 systemd 服务安装这套完整流程因为你后面做集群扩容、权限管理、监控告警时都需要依赖这些基础认知尤其是服务管理方式和数据目录结构这些知识是通用的。