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://:/ciot
    driver-class-name: com.taosdata.jdbc.TSDBDriver
    username: root
    password: taosdata
@RestController
public class AppController {

    @Autowired
    private 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 zml<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 结论

经测试,授权过某一数据库权限的用户仍然具有其他数据库的操作权限,授权失败。

4.2 新版tdengine解决了什么问题

	略。请及时更新最新版本

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问题。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐