小T导读:对于许多初学者来说,面对虚拟机、Linux 系统和数据库集群时,总有一种“无从下手”的感觉。但事实上,任何技术的掌握都离不开勇于尝试和不断学习。本文作者刘艺博在这篇文章中分享了他从零开始学习 TDengine 的亲身经历,无论是从安装环境、操作系统的适应,到如何轻松应对海量时序数据,他都以自己独特的视角为我们提供了宝贵的经验。无论你是否有技术背景,都可以通过这篇文章,轻松跨越学习的障碍,开启属于自己的数据分析之旅。
前言
为什么我创建的虚拟机总是 ping 不通啊?
没用过 Linux 操作系统,看见黑框框无所适从怎么办?
没学过 SQL 语句,这数据怎么查啊?
什么?数据库集群?更不会了……
随着探测技术的进步与探测成本的降低,时间序列数据现在已经广泛存在于各行各业。对海量时序数据进行分析与应用,早已不再是少数高精尖行业的小众需求,而是变得随处可见。然而面对动辄几十 GB 甚至上 TB 而且还在不断增长的时序数据,即便是专业人士都会感到棘手,更不要说会被文章开头那几个问题困扰的广大计算机小白们了。TDengine 的出现为像我一样的小白用户带来了福音,作为一款同时具备高性能与低学习成本的时序数据库产品,能够助力各种行业背景的用户轻松玩转海量时序数据。
万事开头难,作为一个小白,轻易就会被虚拟机、数据库、操作系统、Linux 这样的专业词汇劝退,再看到涛思官网酷炫而专业的介绍资料,更是望而生畏,不敢上手使用。我作为一个过来人,以一个计算机新手小白的经验告诉你,大可不必。
本人航空航天专业,软件课程只在大二时上过 C 语言程序基础,主要编程经验来自使用 matlab 做课设和遗传算法仿真实验,曾经写过“hello world”级别的 python 代码,对 Linux 只知道基础的 cd、rm 等寥寥几条命令。以我这样的基础,都能短时间内上手 TDengine,你,也一定可以!
本文旨在引导一个完完全全的计算机小白,如何从心理建设开始,迈出学习使用 TDengine 的第一步。如果你也在观望不前,那么不如一起来加入这段旅程吧!
声明:
这是一篇面向纯小白的学习笔记,高手勿入!
尽量避免专业词汇,尽量细化操作步骤
不会涉及技术细节,跳过那些暂时不需要理解的内容,先跑起来用起来再说
一些新手才会遇到的小细节问题,都高亮标出,我踩过的坑大家就不要踩了
一般来说这种最基础的东西应该是高手大神来写最好,不过高手大神没啥功夫耐心讲这些最基础的知识,所以还是咱们小白们自己互相帮助下吧
专业程度十分有限,如有不当之处欢迎批评指正。
心理建设
在开始学习之前,首先我们要做下心理建设。
要知道,所有工具的设计目标都不是为难使用者,而是为了实现功能、让人方便使用。所以学习一款工具,首先要知道这东西是干嘛用的。理解了工具的用途,就能进一步理解其操作方法、步骤如此设计的原因。如果感觉工具使用困难、设计不合理,很可能是因为我们还未能理解工具的设计目的。
操作系统、数据库软件看着高端,本质上也是工具,也有它的设计目的:操作系统是为了方便人跟计算机打交道的,数据库就是为了增删改查数据的,编程语言是为了方便把人的思想表达出来然后让计算机去执行的。从工具的设计目的入手去理解和学习其使用方法,往往能够事半功倍。
事实证明,只要不畏难,有一颗想学习的心,又找对了方法,短时间内上手
TDengine 是完全可以的。
踏上西行路,比到达灵山更重要。
准备工作
牢记我们的目的:使用TDengine对时序数据进行分析。
一款软件,要使用,就得先安装;要安装,就得有安装的环境(这里我们使用 Linux 操作系统);小白们一般也没有 Linux 环境,那就要用虚拟机软件安装 Linux 虚拟机(这里我们使用 VMware 安装 CentOS7);为了方便访问多台虚拟机,以及向虚拟机上拷贝文件,还要安装 Xshell、Xftp 工具。
所以,现在只有一台 Windows/Mac 电脑的你,首先要做的是下载安装 VMware,下载 Linux 安装镜像(Linux 有很多发行版本,选个版本 7 以上的就行,注意是后缀为 .iso 的文件),下载安装 Xftp、Xshell,下载 TDengine 安装文件。
VMware 下载地址:
https://vmware.waltzsy.com/?bd_vid=10506430192705255196
CentOS 下载地址:
https://mirrors.aliyun.com/centos/7/isos/x86_64/
我用的是:CentOS-7-x86-64-DVD2207-02.iso
Xftp、Xshell 下载地址:
https://www.xshell.com/zh/free-for-home-school/
注意使用学生版
https://docs.taosdata.com/get-started/package/
建议下载 tar 包
做好上述准备,就要开始我们的 TDengine 的学习之旅了,步骤如下:
- 安装 VMware
安装好后需要获取 VMnet8 网卡的网络信息
- 使用 VMware 安装 CentOS
新手最大的坑:网络配置
- 使用 xshell、xftp访问CentOS
初见 Linux 操作系统
- 在 CentOS 中安装 TDengine
注意端口配置。
安装 Vmware
安装没啥说的,就是安装一款软件。
如果需要授权码,网上到处都是。
这一步最重要的是设置并获取 VMnet8 的信息。
我们的最终目标是搭建一个 3 节点 TDengine 集群,那就需要安装 3 台虚拟机,虚拟机互相之间还要能够通信,我们还希望虚拟机也能连接到外部网络,以备将来读写数据。这些通信需求要利用 VMnet8 来实现。
VMnet8 是 VMware 提供的一块网卡,专门用于实现上述通信需求。安装好 VMware 之后,打开自己电脑的设置-网络和 Internet-高级网络设置,就能看到这块网卡
![]()
点击编辑,选择 IPv4
把 IP 地址固定下来,理论上来说随便设置都行,只要确保 IP 和默认网关的前三段相同即可。
设置完建议禁用再启用 VMnet8,确保设置生效。也可以进入 cmd 命令行,运行 ipconfig,看看设置是否生效,例如我这个就是生效了的。
![]()
使用 VMware 安装 CentOS
一般来说按照提示一步步走就可以,需要注意的部分见文字描述:
![]()
![]()
这里可以修改你的虚拟机名称,当然安装好之后再改也可以。注意安装的位置需要有足够的磁盘空间。
最大磁盘大小是占用磁盘空间的上限,不是说一创建就会占用这么空间。
![]()
自定义硬件这里注意网络连接选择 NAT 模式。
接下来就按照指示进行安装即可:
![]()
![]()
这里需要注意,鼠标点一下就进入虚拟机操作了,要按住 ctrl+alt 才能把鼠标移出来
![]()
![]()
选择汉语和带 GUI 的服务器
有叹号提醒的点进去
选中打勾即可。
关键操作来了!!!此时选择“网络与主机名”,进入配置界面
![]()
![]()
在 IPv4 设置里,点 add 按钮,注意 IP 地址前三段必须与 VMnet8 一样,最后一段确保虚拟机之间互不相同,把子网掩码、和网关配置成与 VMnet8 一模一样!这样就可以互相通信了!
注意 DNS 服务器,配成和网关一模一样!这样就可以访问外网了!
(如果不在此时进行修改,安装好之后在有线设置里修改也是可以的)
然后可以把主机名也修改了,比如我这里就叫做 td1,先点击应用使之生效,再点击左上角完成按钮。
(操作失误没生效也没关系,安装好之后仍可以通过修改 hostname 的方式修改)
![]()
![]()
root 密码很重要,设置好之后不要忘了。所谓 root 用户就是用户名为 root,密码为 root 密码的用户。root 用户有最高的权限,相当于 windows 的管理员权限。创建用户可以先不管,后面总会提醒你创建的。
这里点下接受即可。后面时区、用户名、密码就随便配好了。
启动以后,最重要的是把有线设置配置好。
有线设置的按钮在右上角
打开有线设置
点齿轮按钮
把自动连接打开就不用每次开机都要连接了
如果刚才的网络配置没有配好,可以在这里的IPv4继续设置
配置好之后点应用,如果没有生效那就关闭有线连接再打开,就能生效了。
使用Xshell、Xftp访问CentOS
简介
如果我们创建了多台虚拟机,在 VMware 里来回切换访问会很不方便,而且操作十分卡顿。向虚拟机里上传或下载文件也很麻烦。这个时候就需要 Xshell、Xftp 这种工具出场了。
Xshell 是一个终端模拟软件,对我们初学者而言,只需要知道它能同时连接到多个虚拟机,方便我们通过命令行方式操作虚拟机就可以了;
Xftp 是一个传输软件,对我们初学者而言,只需要知道它能同时连接到多个虚拟机,并向这些虚拟机上传、下载文件即可。
建立连接
配上虚拟机的 IP 地址,用创建虚拟机时设置的 root 用户密码连接即可
![]()
![]()
![]()
选择接受并保存,以后就可以直接连了。两个工具连接方式差不多。
![]()
初识 Linux 操作系统
现在的数据服务器大多运行在 Linux 操作系统上,既然要做时序数据分析,那就不要怕麻烦,先了解下 Linux 操作系统吧。
对于新手最痛苦的就是 Linux 这个黑框框,命令行方式操作与平时的 Windows 桌面操作系统差别实在太大。眼前就这么几行字,怎么下手呢?
如心理建设那一章所说,学习一款工具的使用首先要了解工具的用途和目的。操作系统就是为了方便人跟计算机打交道诞生的,只要是操作系统,基本功能都是相同的,只是具体的使用方法有差异。所以只要你用过 Windows,就不用怕这个黑框框,它们本质上是一种东西。
Windows 是咱们最常见的 PC 操作系统,下面就以 Windows 中的功能来做对照。
从看到的第一行内容说起:
root 是当前登录的用户名,td1 是本虚拟机的 hostname,~ 代表当前所在的目录是 /root 目录(取决于哪个用户登录,root 用户登录就是 /root)。
挨个解释:
用户名:因为刚才连接的时候建议大家使用 root 用户密码连接,因此登录进来就是 root 用户,这样后续很多操作都比较方便,相当于 Windows 里直接用管理员方式,可以避免很多权限问题。
hostname:虚拟机的 hostname 就是虚拟机的名字,你的 Windows 电脑也会有一个自己的设备名,两者类似。这个名字很重要,后面我们讲不同机器之间通信,搭建集群都需要这个名字。
那么 /root 目录是什么意思呢?
Windows 的文件夹大家都不陌生,双击可以打开一个文件夹,文件夹里面是各种文件或者文件夹。包括我们打开电脑看到的桌面,其实也有个对应的文件夹,这个文件夹里有什么我们就会在桌面上看见什么。
同为操作系统的 Linux 也有自己的文件系统,所不同的是所有的文件和目录都被组织成以一个根节点开始的倒置的树状结构。
![]()
文件系统的最顶层是由根目录开始的,系统使用 / 来表示根目录。在根目录之下的既可以是目录,也可以是文件,而每一个目录中又可以包含子目录文件。如此反复就可以构成一个庞大的文件系统。
所以 /root 就很容易理解了,意思就是/这个目录下,名为 root 的文件夹。
在 Windows 上,进入一个目录就能看到其内容,那么 Linux 下,如何看到当前目录下的内容呢?只需要输入以下命令,然后回车执行:
都可以显示当前目录的内容,不同之处是显示的信息完整度不一样。我个人习惯于使用ll命令。
那么如果我想要看其他文件夹的情况呢?比如我想看根目录/底下都有些什么东西,就可以执行如下命令
![]()
想看根目录的 var 文件夹下的 lib 文件夹里都有啥,执行以下命令即可。
因此无论当前目录在哪里,我们都可以直接访问自己想访问的文件目录。但如果我想操作的文件或者文件夹都在某个目录下,我不想每次都要输入一串路径信息怎么办呢?那我们就把当前目录切换到目标目录去。这就要用到 cd 命令。比如说我想进入到根目录/,执行如下命令:
![]()
可以看到当前目录从 ~ 变成了 /,这个时候执行 ll 就可以显示 / 目录下的内容。/ 目录下有很多个文件夹,我想进入这个叫 etc 的文件夹,那么执行:
就能进入到 etc 文件夹下,执行 ll 即可显示 etc 文件夹下都有哪些内容。如果我在其他目录下,想直接进入 etc 目录,那么就要输入 etc 所在的完整路径,也就是:
Windows 里我们还可以很方便的进入到上级目录,在 Linux 对应的实现方式是:
即可进入上级目录。
所以大家可以看到,在 Windows 中常用的功能,Linux 全都具备,
# 创建文件夹
mkdir
# 复制文件或文件夹
cp
# 移动文件或文件夹
mv
# 删除文件或文件夹
rm
注意,Linux 下的命令都会有若干个参数,使用参数或参数组合可以实现不同的命令执行效果。比如我们刚才已经熟悉的 ls 命令,它就有 3 个参数:
- -a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
- -d :仅列出目录本身,而不是列出目录内的文件数据(常用)
- -l :长数据串列出,包含文件的属性与权限等等数据;(常用)
所以执行ls和ls -l看到的结果是不同的
![]()
可以看到,Linux 的使用就是通过各种命令实现功能,掌握的命令越多,Linux 的使用也就越发得心应手。
小技巧:
Windows 下最常用的ctrl+c、ctrl+v组合在 Xshell 连接中都不好使,起不到复制粘贴的作用。如需复制粘贴,可以使用ctrl+insert和shift+insert组合键,或者选中之后右键-复制/粘贴。
在CentOS中安装TDengine
铺垫了这么多,终于可以开始安装 TDengine 了!
错!
安装之前,还有个准备工作要做,那就是端口。
网络端口问题
网络端口,可以类比于计算机上的各种接口,众所周知,电源插在耳机口上是充不进去电的(如果插得进去),网络端口也是这样。应用程序要通过特定端口来收发数据,如果端口没有开放,或者与其他程序冲突,就会出问题。
所以在安装 TDengine 之前,我们要确保 TDengine 所用到的端口都开放,或者干脆一点,把防火墙关了。
# 查看开放的端口号
firewall-cmd --list-ports
# 打开指定端口(例如6030)
firewall-cmd --zone=public --add-port=6030/tcp --permanent
#重启firewall
firewall-cmd --reload
#停止firewall
systemctl stop firewalld.service
#禁止firewall开机启动
systemctl disable firewalld.service
安装步骤
先把从官网下载的安装包复制粘贴到 /root 目录下
复制完在 Xshell 里查看下文件
红色的就是刚拷贝进来的压缩包。
安装之前要先解压:
tar -zxvf TDengine-server-3.3.3.0-Linux-x64.tar.gz
灵活使用tab键,可以自动填充文件或文件夹的名字。上面这条命令只需要打出 TD 两个字母,然后敲一下tab键即可自动补充完整。
此时再看,目录下多了一个同名文件夹,cd 命令切换到这个文件夹,能够看到以下内容:
![]()
执行:
遇到提示就直接回车:
这就装好了。
因为我们现在就是 root 用户,所以不需要在前面加 sudo,直接执行 start-all.sh 即可启动所有组件。
安装部署 TDengine 集群
坚持到这里,我们已经掌握了安装部署单节点
TDengine 的方法,接下来让我们更进一步,部署第一个 TDengine 集群。
为什么要部署集群
为什么要部署集群呢?主要是两个原因: 第一,单节点的服务能力是有上限的,如果数据量、读写压力过于大,总会超过一台机器或一个节点的承载上限;
第二,单节点无法保障高可用,无论是软件硬件都有可能出故障乃至损坏,单节点一旦出现软硬件故障,数据库服务必然直接受到影响,对于一些要求高可用高可靠的场景,单节点是无法满足需求的。
所谓集群,就是把多个节点的数据库服务整合到一起,让它们作为一个整体来提供服务。使用多个节点的资源,既能提供超过单个节点的服务能力,也能提供冗余备份保障数据库服务的高可用,哪怕一个节点的硬件都坏了,这个集群仍能正常对外提供数据库服务而不受影响。
准备工作
一般来说一个集群至少有三个节点,我们就来部署一个三节点 TDengine 集群。
创建三个虚拟机
首先要根据之前的步骤,创建三个虚拟机,注意它们的 IP 地址和 hostname 要各不相同。最好是有规律的。
例如创建三个虚拟机,hostname 分别为 node1,node2,node3。
理解 fqdn
既然三个节点要作为一个整体,那么它们之间就要能相互通信,互相要能找到对方在哪里,此时除了网络要联通,还得让它们互相知道对方叫什么名字。一般来说不同的设备之间互相连通都是通过 IP 地址,但是在 TDengine 集群中,节点之间是通过 FQDN 进行识别的,FQDN(fully qualified domain name,完全限定域名)是 internet 上特定计算机或主机的完整域名。
可能你已经有点糊涂了,我们可以这么理解:
每个节点(物理机或者虚拟机)都有一张身份证,IP 地址可以理解为身份证号,hostname 就是姓名,FQDN 可以理解为是一个别名或者外号,只有
TDengine 服务会用别名或外号称呼这个节点。为了方便起见,我们一般就直呼其名,fqdn 干脆就设置为 hostname,避免叫错人或认错人。
为了让三个节点互相认识,就要把三个节点姓名和身份证号的对应关系,也就是 hostname 和 IP 地址的对应关系,告诉三个节点并记录下来。在 /etc/ 目录下,有一个 hosts 文件,专门用来记录其他节点 hostname 与 IP 地址的对应关系。凡是记录在这个文件中的对应关系,就能被计算机正确识别并解析。
使用 vi/vim 修改文件
现在要读取每个节点的 hosts 文件,并对其进行修改。如果是 Windows 下,我们用一个记事本工具就可以完成,那么在 Linux 下要如何实现文件的读写操作呢?
Linux 也有自己的文本编辑器,就是 vi 或 vim。这个工具十分强大,只不过操作方法与 Windows 里的文本编辑工具差别较大。我们现在不需要学习那些高端用法,只需要指导怎么读,怎么改,怎么保存退出就可以了。
首先使用 cd 命令到 /etc/ 路径下,执行vim hosts。或者也可以直接vim /etc/hosts,就可以打开这个名为 hosts 的文件。如下所示:
![]()
这个时候可以通过上下左右键移动光标,但是不能像 Windows 下那样直接输入或者删除文字。注意这个时候不要乱敲键盘,可能会触发 vim 的其他编辑命令。
点击键盘上的i健,会提示进入了插入(insert)模式,这个时候就可以进行编辑、删除等操作了。
![]()
把三个节点的 hostname 与 IP 对应信息按上图的格式进行添加。添加完成后,要退出插入模式,此时需要点击Esc键,看到插入或 insert 字样消失,就说明退出了插入模式。
输入英文字符:wq,即可保存并退出。
如果再次使用 vi/vim 命令打开该文件,就能看到刚才的修改操作生效了。
在三个节点上,把三行信息都记录在 hosts 文件中,就完成了这一步准备工作。
连通性检查
那么我们的修改究竟是不是有效呢?三个节点能不能正常通信呢?这个时候通过 ping 命令就可以进行验证。
在一个节点上 ping 另外两个节点的 hostname,如果能 ping 通,说明配置成功,hostname 能够正确解析为对应的 IP。如下图所示
![]()
使用Ctrl+C退出 ping。
安装部署
万事俱备,开始安装部署吧!
首先,在三个节点都安装上
TDengine。注意,只执行 install,先不要 start-all。
安装好之后,首先要修改各个节点的 taos.cfg 文件,让 firstEP 完全相同。
![]()
# 代表这一行被注释掉了,不生效。去掉#号,解除注释。
firstEP,三个节点改成相同的,比如第一个节点,node1:6030。
fqdn,改成本机的hostname。
保存退出。
三个节点修改完成后,即可启动三个节点的 taos 服务,使用 systemctl 或 start-all 命令均可。
systemctl start taosd
systemctl start taosadapter
systemctl start taoskeeper
systemctl start taos-explorer
此时登录到 firstEP 所在的节点,执行 taos 命令进入 taosCLI。
执行如下命令,挨个加入其他两个节点
create dnode "node2:6030"
create dnode "node3:6030"
执行show dnodes命令,如果所有节点都是 ready 状态,则说明集群搭建成功。
taos> show dnodes;
id | endpoint | vnodes | support_vnodes | status | create_time | reboot_time | note | machine_id |
==========================================================================================================================================================================================================
1 | node1:6030 | 2 | 16 | ready | 2024-12-03 15:47:13.563 | 2024-12-03 15:47:13.497 | | A5EGywkW2ZuFi+DBTUJh9tmD |
2 | node2:6030 | 1 | 16 | ready | 2024-12-03 15:49:19.852 | 2024-12-03 15:48:58.127 | | A6Sc6iXzSdNrlaapIfZplu+k |
3 | node3:6030 | 1 | 16 | ready | 2024-12-03 15:51:12.354 | 2024-12-03 15:50:50.435 | | A5KSUGPQeT2vcV5YFkJSoMLO |
结语
走到这里,你已经成功安装了第一个 TDengine 节点,成功搭建了第一个
TDengine 集群。作为一名新手小白,就算成功迈出了学习 TDengine 的第一步,接下来的操作学习流程官网文档都有详尽的指导,本文就不再赘述。走出了这第一步,就说明你已经克服了自己的惰性以及对未知的恐惧,接下来的学习中将不会再有什么困难能够击败你,祝看到这篇文章的各位能够在 TDengine 的学习之路上越走越顺,越走越远!