1.开发app项目
<!--引入TDEngine-->
<dependency><groupId>com.taosdata.jdbc</groupId><artifactId>taos-jdbcdriver</artifactId><version>3.0.0</version>
</dependency>
<!-- 引入jdbc -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
spring:datasource:url: jdbc:TAOS://:/ciotdriver-class-name: com.taosdata.jdbc.TSDBDriverusername: rootpassword: taosdata
@RestController
public class AppController {@Autowiredprivate JdbcTemplate jdbcTemplate;@GetMapping("create")public String create() {jdbcTemplate.execute("use ciot");jdbcTemplate.execute("create table if not exists weather_1(" +"ts timestamp ,temporary float ,humidity int)");List<String> tables = jdbcTemplate.query("show tables", (rs, rowNum) ->rs.getString(1));return tables.toString();}@GetMapping("hello")public String test() {return "hello world";}
}
运行项目,请求接口 http:127.0.0.1:8080/create 获取响应结果
2.根据TDengine Linux Client构建基础镜像
2.1.准备安装包
官网下载TDengine-client-3.0.1.4-Linux-x64-Lite.tar.gz,并放置在./target目录中
2.2.编写Dockerfile
### 基础镜像
FROM openjdk:8
### 作者
MAINTAINER zhaominglei <17610907265@sina.cn>
### 系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
WORKDIR /
### 将TDengine-client添加进入镜像
ADD target/TDengine-client-3.0.1.4-Linux-x64-Lite.tar.gz /
### 解压缩并安装client
WORKDIR /TDengine-client-3.0.1.4/
RUN ./install_client.sh
### 安装时间工具ntp
#RUN echo ' \
# deb http://mirrors.aliyun.com/debian/ buster main non-free contrib \
# deb http://mirrors.aliyun.com/debian-security buster/updates main \
# deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib \
# deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib \
# deb-src http://mirrors.aliyun.com/debian-security buster/updates main \
# deb-src http://mirrors.aliyun.com/debian/ buster main non-free contrib \
# deb-src http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib \
# deb-src http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib \
# ' > /etc/apt/sources.list
#RUN apt-get clean && apt-get update --fix-missing
#RUN apt-get install -y ntp ntpdate
2.3.构建tdengine client基础镜像
docker build -t tdengine-client:0.0.1 -f Dockerfile .
2.4.查看构建的基础镜像
3.根据基础镜像构建工程镜像
3.1 准备工程jar
执行mvn clean package 获得app-0.0.1-SNAPSHOT.jar,并放置在./target目录中。
3.2 编写Dockerfile
### 基础镜像
FROM tdengine-client:0.0.1
### 同步系统时间
RUN cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
#RUN ntpdate cn.pool.ntp.org
### 修改基础镜像中taos.cfg
RUN echo "firstEp hasaki:6030" >> /usr/local/taos/cfg/taos.cfg
### 修改hosts
RUN echo "192.168.177.137 hasaki" >> /etc/hosts
### 应用构建成功以后jar文件被复制到镜像内,名字也改为app.jar
ADD target/app-0.0.1-SNAPSHOT.jar /app.jar
### 启动容器时的进程
ENTRYPOINT ["java", "-jar", "/app.jar"]
### 暴露的端口
EXPOSE 8080
3.3 构建工程镜像
docker build -t app:0.0.1 -f Dockerfile .
3.4 查看构建的工程镜像
3.5 根据镜像运行容器
docker run -d -p 8083:8080 app:0.0.1
请求接口查看结果:http://192.168.177.131:8083/create
4. 问题记录
4.1 tdengine创建普通用户并授权
4.1.1 执行命令并查看结果:
CREATE USER ciot PASS '123321' sysinfo 1;
show users;
4.1.2 用户授权
GRANT ALL ON ciot.* TO ciot;
4.1.3 结论
经测试,授权过某一数据库权限的用户仍然具有其他数据库的操作权限,授权失败。
已经反馈给TDengine技术支持人员。
4.2 新版tdengine解决了什么问题
4.2.1 修复bug
- taosd和taosAdapter中存在一些内存泄漏
- 删除后的数据仍然可以查询到
- 无模式写入不会积累在写入的统计数据中
- 与NCHAR匹配时,结果错误
- 当事务失败时,show transactions命令的操作输出是错误的
- float列上max()的错误结果
- 计划器和查询模块的一些bug
- taosd在查询子表数量时崩溃,无法重启
- 由interp()导致的taosd崩溃
- twa+间隔导致Taosd崩溃
- 无效行索引导致Taosd崩溃
- 使用已有数据重新启动Taosd失败
- taosd在修改表TTL为1后崩溃,并在重启时继续崩溃
- last()导致Taosd崩溃
- 使用group by查询导致taosd崩溃
- Vnode陷入无限循环
- Insert在创建SMA后挂起
- 频繁的taos_connect()/taos_close()导致客户端死锁
- 查询子表个数时CPU占用率过高
- 高压力查询导致客户端挂起
- Limit不适用于嵌套查询
- TTL作为查询条件不适用于information_schema
- length()函数的计算错误
- SUM()函数的计算错误
- 在高压力写入过程中强制停止Taosd后无法启动
- Taosd崩溃后无法重新启动
- 创建2亿个表时崩溃,无法重新启动
- 删除数据库后出现"表不存在"错误
- “Show create table”命令不能显示注释
4.2.2 增强
- avg()函数的性能优化
- 优化taosd启动速度
- 在超过100万个表的情况下,对索引模块进行性能优化
- 2.x KeepColumnName功能在3.0中得到支持
- “taosd -s” 可以转储mnode的详细信息
- “show transactions” 命令可以输出正在进行的操作
- 禁用非时间戳列上的连接操作
- TDB模块日志优化,降低mnode CPU使用率
- …
4.3 集群环境如何保证高可用
4.3.1 show dnodes
首先集群节点设置要正确,通过show dnodes命令查看,如下图:
如果节点缺少,需要通过 create dnode "hostname:port"创建。
4.3.2 show mnodes
如果需要保证服务高可用,需要在注册节点taos cli中手动执行以下命令:
create mnode on dnode 2;
其中,dnode 2是指对应tdengine节点的id值。
执行命令后,如下图所示。
此时当leader宕机,follower会自动升级为leader,提供服务。如下图所示:
4.4.3 vnode设置多副本保证高可用
CREATE DATABASE demo replica 3;
如果此时有四个dnode,关掉两个dnode服务(这两个服务至多有一个leader,否则mnode不可用),vnode group 仍然可以正常使用。如下图:
此时,关闭hasaki-3,数据库操作无法执行,如下图所示:
4.4 时间不同步问题解决
4.4.1 非docker环境
Client and server's time is not synchronized
执行如下命令:
yum -y install ntp ntpdate
ntpdate cn.pool.ntp.org
4.4.2 docker环境
tdengine client基础镜像系统为debain,执行ntpdate cn.pool.ntp.org
报 Can't adjust the time of day: Operation not permitted
;
原因分析:猜测在一些虚拟vps上,可能存在一些限制,导致此处报错。
经测试,使用RUN cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
,
可以解决docker环境项目接口访问数据库,Client and server’s time is not synchronized问题。