2024重新梳理
安装
rpm -ivh TDengine-server-3.0.4.2-Linux-x64.rpm
创建数据存储的目录
cd /mnt/sdc/
mkdir tdengine
cd tdengine
mkdir dataDir
mkdir tempDir
mkdir logDir
修改配置文件/etc/taos
cd /etc/taos
vim taos.cfg
修改以下内容:
dataDir /mnt/sdc/tdengine/dataDir
tempDir /mnt/sdc/tdengine/tempDir
logDir /mnt/sdc/tdengine/logDir
启动:
systemctl start taosd
systemctl status taosd
修改密码:
-h HOST: 要连接的 TDengine 服务端所在服务器的 FQDN, 默认为连接本地服务
-P PORT: 指定服务端所用端口号
-u USER: 连接时使用的用户名
-p PASSWORD: 连接服务端时使用的密码
# 连接taosd服务
taos -u root -p
# 用户管理
# refer to : https://docs.taosdata.com/2.6/operation/admin/
# 修改用户密码 密码的缺省值是taosdata
ALTER USER root PASS 'long123456';
安装taosadapter:
systemctl start taosadapter
开启端口:
firewall-cmd --add-port=6030/tcp --permanent
firewall-cmd --add-port=6030/udp --permanent
firewall-cmd --add-port=6041/tcp --permanent
firewall-cmd --add-port=6041/udp --permanent
firewall-cmd --reload
Install
https://docs.taosdata.com/get-started/package/
rpm -ivh TDengine-server-3.0.1.2-Linux-x64.rpm
systemctl start taosd
systemctl status taosd
## 默认账户
root
## 默认密码
taosdata
- 启动服务进程:
systemctl start taosd
- 停止服务进程:
systemctl stop taosd
- 重启服务进程:
systemctl restart taosd
- 查看服务状态:
systemctl status taosd
port
# taosd
6030 tcp/udp
firewall-cmd --add-port=6030/tcp --permanent
firewall-cmd --add-port=6030/udp --permanent
firewall-cmd --reload
# taosAdapter
6041 tcp/udp
firewall-cmd --add-port=6041/tcp --permanent
firewall-cmd --add-port=6041/udp --permanent
firewall-cmd --reload
uninstall
https://docs.taosdata.com/operation/pkg-install/
systemctl stop taosadapter
systemctl stop taosd
rpm -e tdengine
rm -rf /etc/taos
rm -rf /var/lib/taos
rm -rf /var/log/taos
rm -rf /usr/local/taos
配置FQDN
https://www.taosdata.com/engineering/1824.html
taos-client连接taos-server端
https://docs.taosdata.com/develop/connect/
我们的client是安装在windows上的,而server端,是安装到linux上的。
server端的配置,这里暂时部说了,下面说下client端怎么配置
在client端安装完成后,需要首先配置FQDN,也就说域名映射成IP,参考https://www.taosdata.com/engineering/1824.html,具体操作如下:
1.需要修改C:\Windows\System32\drivers\etc
目录下的hosts
文件
49.4.13.102 hecs-15e2
这个hecs-15e2的值,其实就是taos-server端对应的linux主机的主机名,怎么查看这个linux服务器的主机名呢?
vim /etc/hostname
这个就是linux主机的主机名了
2.接下来,我们需要在client端,编辑 taos.cfg 文件(默认路径 C:\TDengine\cfg\taos.cfg),将 firstEP 修改为 TDengine 服务器的 End Point,例如:hecs-15e2:6030
。
firstEp hecs-15e2:6030
注意,这个主机名,不能随意乱写,特别是taos-server端安装完成后,linux主机的主机名,就不能再变了。如果变了的话,taos-client就连接不上server端了。
如果主机名,还想要能连接上,参考TDengine ERROR (8000000b): Unable to establish connection · Issue #6691 · taosdata/TDengine · GitHub
解决方案如下:
1.clients需要配置FQDN /etc/hosts 里面配置192.168.128.160 td1.
2.server端修改主机的名字,/etc/hostname 中添加td1
3.server端修改/var/lib/taos/dnode/下的dnodeEps.json,mnodeEpSet.json中的localhost替换为修改过的hostname td1.
4.重启之后,发现windows client能够成功连接server,并能够进行select * from table; 和select count(*) from table; 操作。
测试
PS C:\TDengine> .\taos.exe
Welcome to the TDengine Command Line Interface, Client Version:3.0.1.2
Copyright (c) 2022 by TDengine, all rights reserved.
Server is Community Edition.
taos> show databases;
name |
=================================
information_schema |
performance_schema |
demo |
Query OK, 3 rows in database (0.109000s)
如何理解fqdn & End Point
FQDN(fully qualified domain name,完全限定域名)是internet上特定计算机或主机的完整域名。FQDN由两部分组成:主机名和域名。例如,假设邮件服务器的FQDN可能是mail.taosdata.com。主机名是mail,主机位于域名taosdata.com中。
DNS(Domain Name System),负责将FQDN翻译成IP,是互联网绝大多数应用的寻址方式。
有2个重要的文件/etc/hostname
和/etc/hosts
。其中 /etc/hostname
记录了这个服务器的主机名,而/etc/hosts
记录了 域名和 ip的映射关系。
注意,这里出现了3个概念:主机名、ip、域名
2个服务器之间,除了可以使用ip沟通,还可以使用域名沟通,另外,还可以使用主机名沟通,比如:查看主机名hostname -f
, ping host
,当执行 ping host
时,其实是拿着host,去/etc/hosts
中,找到host对应的ip,然后通过ip进行沟通。
而我们一般开发过程中,是没有域名的,所以,fqdn直接使用主机名即可。然后我们将fqdn 和 ip的映射关系,配置到/etc/hosts
。
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
218.93.228.30 linu1.com.com
上面的linu1.com.com,就是fqdn,他完全是用主机名,不包含域名。
一个集群中,每一个物理节点的fqdn都是不同的,比如物理节点A的fqdn是linu1.com.com
,那么物理节点B的fqdn是linu2.com.com
而每个节点的End Point 等于fdqn 外加端口号,比如:
firstEp linu1.com.com:6030
这样,我们在tacos.cfg文件中,
// firstEp 是每个数据节点首次启动后连接的第一个数据节点
firstEp h1.taosdata.com:6030
// 必须配置为本数据节点的 FQDN,如果本机只有一个 hostname,可注释掉本项
fqdn h1.taosdata.com
// 配置本数据节点的端口号,缺省是 6030
serverPort 6030
firstEp,主要用于,当taosd 或者 taos服务启动时,连接到集群中的哪一个节点,用来做沟通的
fqdn ,主要用于,本节点的唯一标识。
因此,在每个数据节点,firstEp 需全部配置成一样,但 fqdn 一定要配置成其所在数据节点的值。
参数配置
refer to : https://docs.taosdata.com/reference/config/
refer to : https://docs.taosdata.com/taos-sql/database/
配置文件路径: /etc/taos/taos.cfg
-
CACHEMODEL:表示是否在内存中缓存子表的最近数据。默认为 none。
-
none:表示不缓存。
-
last_row:表示缓存子表最近一行数据。这将显著改善 LAST_ROW 函数的性能表现。
-
last_value:表示缓存子表每一列的最近的非 NULL 值。这将显著改善无特殊影响(WHERE、ORDER BY、GROUP BY、INTERVAL)下的 LAST 函数的性能表现。
-
both:表示同时打开缓存最近行和列功能。
-
taos-cli
https://docs.taosdata.com/reference/taos-shell/
-
-h HOST: 要连接的 TDengine 服务端所在服务器的 FQDN, 默认为连接本地服务
-
-P PORT: 指定服务端所用端口号
-
-u USER: 连接时使用的用户名
-
-p PASSWORD: 连接服务端时使用的密码
# 连接taosd服务
taos -h linu1.com.com -u root -p
# 用户管理
# refer to : https://docs.taosdata.com/2.6/operation/admin/
# 修改用户密码 密码的缺省值是taosdata
ALTER USER root PASS 'long123456';
maven连接
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.0.0</version>
</dependency>
package com.wp;
import com.taosdata.jdbc.TSDBDriver;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class TdEngineConnTest {
public static void main(String[] args) throws SQLException {
String jdbcUrl = "jdbc:TAOS://49.4.13.102:6030?user=root&password=taosdata";
Properties connProps = new Properties();
connProps.setProperty(TSDBDriver.PROPERTY_KEY_CHARSET, "UTF-8");
connProps.setProperty(TSDBDriver.PROPERTY_KEY_LOCALE, "en_US.UTF-8");
connProps.setProperty(TSDBDriver.PROPERTY_KEY_TIME_ZONE, "UTC-8");
Connection conn = DriverManager.getConnection(jdbcUrl, connProps);
System.out.println("Connected");
conn.close();
}
}
taosAdapter
refer to : https://docs.taosdata.com/reference/taosadapter/
systemctl start taosadapter
systemctl stop taosadapter
Rest连接设置
refer to: https://docs.taosdata.com/connector/java/
设置rest连接的参数,包括最小连接数、最大连接数等。
使用tdengine-gui
tdengine-gui,其实就是调用tdengine提供的restful接口,然后将接口返回的数据,展现出来
而要使用restful接口,必须使用启用taosAdapter,参考https://docs.taosdata.com/reference/taosadapter/
systemctl start taosadapter
当taosadapter被启用后,还需要打开6041端口
6041 tcp/udp
firewall-cmd --add-port=6041/tcp --permanent
firewall-cmd --add-port=6041/udp --permanent
firewall-cmd --reload
最后,我们就可以,使用tdengine-gui,连接tdengine-server了
常用sql
DDL
# 查询建表语句
SHOW CREATE TABLE tb_name;
SHOW CREATE TABLE iot.dm_228964512222830219;
# 查询超级表的建表语句
SHOW CREATE STABLE iot.s_bool;
# 查询当前数据库下,所有表名
show iot.tables;
# 查询某个盒子下的数据
168317994510
修改表结构
ALTER STABLE demo8.smeter_bool ADD COLUMN is_addition BOOL;
查询DML
# 查询普通表
select * from iot.dm_228964512222830219 order by ts desc;
# 查询超级表,并且使用tag标签过滤 这里的id 和 box_no都是属于 tag标签列
select ts,val from iot.s_float where 1=1 and id=228964512223878831 and box_no=301021111407 order by ts desc ;
时间窗口切分查询---interval
使用TDengine,最重要的是时间戳。创建并插入记录、查询历史记录的时候,均需要指定时间戳。时间戳有如下规则:
- 时间格式为
YYYY-MM-DD HH:mm:ss.MS
, 默认时间分辨率为毫秒。比如:2017-08-12 18:25:58.128
- 内部函数now是服务器的当前时间
- 插入记录时,如果时间戳为now,插入数据时使用服务器当前时间
- Epoch Time: 时间戳也可以是一个长整数,表示从1970-01-01 08:00:00.000开始的毫秒数
- 时间可以加减,比如 now-2h,表明查询时刻向前推2个小时(最近2小时)。 数字后面的时间单位可以是 a(毫秒)、s(秒)、 m(分)、h(小时)、d(天)、w(周)。 比如select * from t1 where ts > now-2w and ts <= now-1w, 表示查询两周前整整一周的数据。 在指定降频操作(down sampling)的时间窗口(interval)时,时间单位还可以使用 n(自然月) 和 y(自然年)。
select first(ts) ,avg(val) from iot.dm_228964512221781629 where ts> 1677292383000 and ts < 1678933983000 INTERVAL(1m);
填充---Fill
FILL 语句指定某一窗口区间数据,缺失的情况下的填充模式。
select first(ts) ,avg(val) from iot.dm_228964512221781629
where ts> 1677292383000 and ts < 1678933983000
INTERVAL(1m) FILL(PREV)
使用fill 填充,可能会出现值null的情况,此时,需要找到距离开始时间最近的,一条数据;然后,用这个数据,来替换null
select * from iot.dm_228964512221781629 where ts < 1677292383000 order by ts desc limit 1
查找值无效数据
select distinct(id) from iot.s_float where val>100000 limit 10;
select * from iot.dm_228964512223878843 where val>100000 limit 10;
添加测试数据
select * from iot.dm_5853449478635520
insert into iot.dm_5853449478635520(ts,val) values(1681091587000,20)
最后一行记录
select last_row(ts) as ts,val,id from iot.s_float where id in ('228964791275115307','228964512222830219','228964512237506563','228964512223878845') group by tbname
select last_row(ts) as ts,val,id from iot.s_float where id in ('228964791275115307','228964512222830219','228964512237506563','228964512223878845') group by id
集群
基础概念
refer to: https://www.bookstack.cn/read/TDengin-2.0-zh/spilt.5.771310a0ef87f612.md
dnode:实际的数据存储节点。一个dnode,就是一台物理机
vnode group & vnode & replica
一个DB,为了高可用,必须采用副本,这样,即使一个副本宕机了,还有其他的副本可用。多个副本之间的数据,完全一致。
一个DB,为了水平可扩展,必须采用分片。比如一个DB中需要存储100条数据,分成5个分片,每个分片只存储20条数据。
基于上面的副本 和 分片思想,引入了vnode group & vnode & replica这些概念:
一个DB里的数据会被切片分到多个vnode group,vnode group里的vnode数目就是DB的副本数,同一个vnode group里各vnode的数据是完全一致的
不同vnode group,存储的数据,不同
为保证高可用性,vnode group里的vnode一定要分布在不同的数据节点dnode里(实际部署时,需要在不同的物理机上),只要一个vgroup里超过半数的vnode处于工作状态,这个vgroup就能正常的对外服务
同时,集群的节点数必须大于等于副本数,否则创建表时将返回错误“more dnodes are needed”。也就是说:dnodes >= replica
假设,要存储的数据是1,2,3...100,假设dnodes 是3,副本数也是3,分为5个分片,下面画图示意下:
结论如下:
颜色相同,属于同一个vgroup,同一个vgroup内的多个vnode,存储的数据是相同的
不同颜色的vnode,存储的数据是不同的
每一个DB的副本数 <= dnodes数
每一个vnode,只属于某一个DB;但是一个DB,可以有多个vnode
多个vnode是分布在 dnode上的
我们可以从数学的角度看,是将vnode,进行分类。分类的依据有2个:
第一个依据:vnode属于哪一个vgroup;
第二个依据:同一个vgroup中,vnode对应的序号
查询Vnode
show dnodes;
{
"res": true,
"count": 3,
"data": [
{
"id": 1,
"endpoint": "linu1.com.com:6030",
"vnodes": 7,
"support_vnodes": 16,
"status": "ready",
"create_time": "2022-08-16T12:54:14.701Z",
"note": ""
},
{
"id": 2,
"endpoint": "linu2.com.com:6030",
"vnodes": 7,
"support_vnodes": 16,
"status": "ready",
"create_time": "2022-08-16T12:57:26.533Z",
"note": ""
},
{
"id": 3,
"endpoint": "linu3.com.com:6030",
"vnodes": 8,
"support_vnodes": 16,
"status": "ready",
"create_time": "2022-08-16T12:57:41.453Z",
"note": ""
}
]
}
查询数据库创建时的参数
SELECT * FROM INFORMATION_SCHEMA.INS_DATABASES where name='iot';
{
"res": true,
"count": 1,
"data": [
{
"name": "iot",
"create_time": "2022-08-21T00:50:37.948Z",
"vgroups": 2,
"ntables": 403,
"replica": 1,
"strict": "off",
"duration": "14400m",
"keep": "5256000m,5256000m,5256000m",
"buffer": 96,
"pagesize": 4,
"pages": 256,
"minrows": 100,
"maxrows": 4096,
"comp": 2,
"precision": "ms",
"status": "ready",
"retention": null,
"single_stable": false,
"cachemodel": "none",
"cachesize": 1,
"wal_level": 1,
"wal_fsync_period": 3000,
"wal_retention_period": 345600,
"wal_retention_size": -1,
"wal_roll_period": 86400,
"wal_segment_size": 0
}
]
}