docker环境连接tdengine服务

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

<think>嗯,用户想了解如何使用Docker Compose部署TDengine。首先,我需要回忆一下TDengine的基本架构,它是一个专为物联网设计的时序数据库,支持多容器部署吗?或者是否需要集群配置? 根据用户提供的引用[4],里面提到TDengine需要为每个数据采集点独立建表,并且使用超级表作为模板。此外,Docker Compose的配置需要正确设置网络、卷和环境变量。我需要确保Compose文件中的服务配置正确,尤其是主节点和可能从节点的设置。 用户提供的引用[3]提到了安装DockerDocker Compose的步骤,所以可能不需要在回答中重复这些,但可能需要简要提及前置条件。引用[4]中的自动建表部分很重要,可能需要在配置示例中体现出来。 然后,我需要考虑如何组织docker-compose.yml文件,包括版本、服务定义、网络设置。例如,TDengine可能需要持久化数据存储,所以需要配置卷。环境变量如TAOS_DISK和TAOS_DEBUG可能需要设置。 另外,用户可能需要一个示例配置文件,这样他们可以直接复制使用。同时,需要注意TDengine的端口配置,比如6030-6042端口是否都需要暴露。还有,如何验证部署是否成功,比如进入容器执行taos命令测试连接。 可能还需要提到集群部署的情况,但用户的问题主要是单节点部署,所以可能作为扩展说明。此外,自动建表的实现可能需要通过初始化脚本或命令行操作,这部分在配置文件中如何体现? 最后,根据用户提供的引用[2],生产环境的部署示例可能需要更详细的配置,比如资源限制和重启策略。因此,在配置示例中加入这些部分会更有帮助。同时,要确保引用的正确性,比如引用[4]关于TDengine的建表方式,需要在回答中正确引用。</think>### 使用 Docker Compose 部署 TDengine 的方法 #### 一、前置准备 1. 安装 DockerDocker Compose [^3] 2. 配置 Docker 镜像加速(推荐阿里云镜像源)[^3] 3. 创建专用目录用于存储配置和数据文件 #### 二、配置示例 ```yaml # docker-compose.yml version: '3.8' services: tdengine: image: tdengine/tdengine:latest container_name: tdengine restart: unless-stopped environment: TAOS_DISK: "/var/lib/taos" # 数据存储路径 TAOS_DEBUG_FLAG: "0" # 调试模式关闭 ports: - "6030-6042:6030-6042" # 暴露 REST/客户端/查询端口 volumes: - ./data:/var/lib/taos # 持久化数据存储 - ./log:/var/log/taos # 日志目录 networks: - taos-net networks: taos-net: driver: bridge ``` #### 三、关键配置说明 1. **数据持久化**:通过 volumes 映射本地目录,避免容器重启数据丢失 2. **网络配置**:使用独立网络保证容器间通信[^1] 3. **环境变量**: - `TAOS_FIRST_EP`(集群部署时需要) - `TAOS_SERVER_PORT`(默认6030) 4. **端口映射**: - 6030:客户端连接端口 - 6041:REST API 端口 - 6042:时序数据库 Web 控制台 #### 四、操作步骤 1. 启动服务 ```bash docker-compose up -d ``` 2. 进入容器执行命令 ```bash docker exec -it tdengine taos ``` 3. 验证服务状态 ```sql SHOW DNODES; ``` #### 五、自动建表配置 通过初始化脚本实现自动建表[^4]: 1. 创建 `init.sql` 文件 ```sql CREATE DATABASE IF NOT EXISTS sensor; USE sensor; CREATE STABLE IF NOT EXISTS gl07 (ts TIMESTAMP, value FLOAT) TAGS (device INT); CREATE TABLE d1008 USING gl07 TAGS (1008); ``` 2. 修改 compose 文件添加 volume 映射 ```yaml volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql ``` #### 六、生产环境建议 1. 集群部署需配置多个节点和`TAOS_FIRST_EP`参数 2. 添加资源限制: ```yaml deploy: resources: limits: memory: 4G cpus: '2' ``` 3. 配置日志轮转策略[^2]
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值