TDengine初搭建--第四版

1、客户端通讯

目前客户端通讯已经都正常

2、IDEA数据库工具通讯

目前IDEA数据库工具通讯正常,可以可视化查询相应数据

3、TDengine和MySQL双配置适配

接下来是TDengine和MySQL双配置的适配

4、简单main方法测试

如果只是测试,后续不需要考虑项目整合,那直接这样即可【注意:数据库链接、数据库名、表名等等根据自己情况调整】

4.1 代码

public class testclass {
    public static void main(String[] args) throws Exception{
        Connection conn=getConn();
        Statement stmt = conn.createStatement();
        // create database
        stmt.executeUpdate("create database if not exists epiot");
        // use database
        stmt.executeUpdate("use epiot");
        // create table
        stmt.executeUpdate("create table if not exists weather (ts timestamp, temprature int, humidity float)");
        // insert data
        int affectedRows = stmt.executeUpdate("insert into weather values(now, 23, 10.3) (now + 1s, 20, 9.3)");
        System.out.println("insert " + affectedRows + " rows.");
        // query data
        ResultSet resultSet = stmt.executeQuery("select * from weather");
        Timestamp ts = null;
        int temperature = 0;
        float humidity = 0;
        while(resultSet.next()){
            ts = resultSet.getTimestamp(1);
            temperature = resultSet.getInt(2);
            humidity = resultSet.getFloat("humidity");
            System.out.printf("%s, %d, %s\n", ts, temperature, humidity);
        }
    }

    public static Connection getConn() throws Exception{
        Class.forName("com.taosdata.jdbc.TSDBDriver");
        String jdbcUrl = "jdbc:TAOS://192.168.0.127:6030/epiot?user=root&password=admin";
        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);
        return conn;
    }
}

 4.2 jar包

jar包有三种方式引入:①jar包导入;②源码路径打包在引入;③pom引入

这里只讲pom引入,其它有需要网上找。

<dependency>
    <groupId>com.taosdata.jdbc</groupId>
    <artifactId>taos-jdbcdriver</artifactId>
    <version>2.0.4</version>
</dependency>

5、项目整合测试(整合MySQL和TDengine)

整合结果如下图所示(2.0.34):

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAS25pZ2h0X0tleQ==,size_11,color_FFFFFF,t_70,g_se,x_16

源码下载路径 

 springboot-tdengine-master.zip-互联网文档类资源-优快云文库

 

<think>我们正在使用Docker部署TDengine数据库集群。根据引用[2]和[3]的信息,我们可以使用DockerCompose或Docker Swarm来部署集群。引用[4]提到了使用docker-compose进行集群部署,但未给出完整配置。引用[3]则提到了使用Docker Swarm搭建集群,并指出社区版无法使用delete命令(企业版才支持)。由于用户要求部署集群,我们可以采用DockerCompose或Docker Swarm。这里我们选择使用DockerCompose来部署,因为Docker Compose更简单,适合在单台机器上模拟集群(通过不同端口映射),或者可以在多台机器上分别启动容器(每台机器一个节点,但需要配置网络和主机名)。 然而,注意引用[3]和[4]都提到了多节点部署,因此我们需要配置多个节点,每个节点一个容器,并且它们之间需要通信。 根据TDengine的官方文档,要组建集群,需要配置每个节点的FQDN(完全限定域名),并在每个节点上配置其他节点的FQDN和IP地址映射(通过hosts文件或DNS)。以下是一个使用DockerCompose部署三个节点(一个主节点,两个从节点)的示例步骤:1.创建一个docker-compose.yml文件,定义三个服务(节点)。2.每个节点需要配置主机名(hostname)和网络,以便节点间可以互相通信。 3.在每个节点的配置中,需要将其他节点的IP和主机名映射添加到hosts文件中(或者使用自定义网络让Docker自动解析主机名,但TDengine要求使用FQDN,所以我们需要设置hostname,并在其他节点的hosts中明确指定IP和主机名的映射)。 4.启动第一个节点作为主节点,然后启动其他节点并加入集群。 但是,在DockerCompose中,我们可以利用自定义网络,让容器之间通过服务名进行通信。然而,TDengine要求每个节点有一个固定的FQDN,并且集群配置时使用这个FQDN。因此,我们可以为每个容器设置一个固定的hostname(例如taos1,taos2,taos3),并在每个容器的hosts文件中添加其他容器的IP和hostname的映射。但是,由于Docker Compose在启动时容器的IP可能不固定,所以我们可以使用静态IP或者使用extra_hosts来手动指定。 另一种方法是使用Docker Compose的network配置,并设置容器的hostname,然后通过自定义网络让容器之间通过hostname通信。但是,由于TDengine集群配置需要每个节点知道其他节点的IP和FQDN,我们可以利用DockerCompose的links或者depends_on来确保启动顺序,但IP问题仍然需要解决。实际上,我们可以使用Docker Compose的“hostname”和“container_name”来固定容器名,然后使用自定义网络,这样容器间就可以通过容器名(hostname)解析到IP。但是,TDengine要求每个节点在配置集群时使用相同的FQDN,并且这个FQDN必须能够解析到对应的IP。因此,我们可以设置每个容器的hostname为对应的节点名(如taos1, taos2, taos3),然后在docker-compose.yml中配置网络别名(aliases)或者直接使用服务名作为网络标识。 然而,更简单的方法是在每个容器中通过extra_hosts手动添加其他节点的IP和主机名映射。但是,由于我们无法预先知道IP,所以我们可以使用DockerCompose的network配置,让容器在同一个网段,然后使用固定的容器名(container_name)作为主机名,然后在每个容器中通过extra_hosts将其他容器的主机名指向其容器名(因为同一自定义网络中,容器名可以解析为容器的IP)。但是,这样其实不需要extra_hosts,因为Docker网络会自动解析容器名。 因此,我们可以在docker-compose.yml中这样配置: -创建一个自定义网络。 -每个容器设置container_name(作为主机名)和hostname(也设为相同值),这样在容器内部,hostname就是设定的值,并且其他容器可以通过这个hostname(即container_name)解析到该容器的IP。但是,注意:TDengine要求每个节点在启动时能够通过FQDN解析到其他节点的IP。因此,我们只需要确保每个容器中,其他节点的FQDN(即hostname)能够解析到正确的IP即可。而Docker自定义网络会自动将容器名(container_name)和hostname解析为容器的IP,所以我们可以直接使用。步骤: 1.编写docker-compose.yml文件,定义三个服务:td1(主节点)、td2、td3。2.每个服务使用相同的镜像:tdengine/tdengine(可以使用特定版本,如tdengine/tdengine:3.0.0.0) 3.每个服务设置container_name和hostname(例如,td1、td2、td3)。 4.每个服务暴露必要的端口(6030-6049,以及UDP端口6043-6049)。5.创建一个自定义网络,让三个容器都连接在这个网络上,这样它们可以通过hostname互相访问。 6.启动主节点(td1),然后启动从节点(td2、td3)并加入集群。但是,TDengine集群的配置需要在启动容器后执行命令来配置。我们可以通过环境变量或者启动脚本来完成。 根据TDengine官方文档,在启动容器时,可以通过环境变量来配置集群。例如:-对于主节点,设置环境变量`TAOS_FIRST_EP`为空(因为它是第一个节点) -对于从节点,设置环境变量`TAOS_FIRST_EP`为主节点的FQDN(即td1:6030)另外,每个节点需要设置`TAOS_SERVER_PORT`为6030(默认端口)。但是,实际上,TDengine在容器启动时会根据环境变量自动配置。具体可参考官方文档:https://www.taosdata.com/docs/cn/v3.0/management#container环境变量:- `TAOS_FQDN`:节点的FQDN(必须与hostname一致)- `TAOS_FIRST_EP`:第一个节点的FQDN:端口(主节点)- `TAOS_SERVER_PORT`:节点监听的端口(默认6030)注意:在集群中,每个节点的`TAOS_FQDN`必须不同,并且必须能够被其他节点解析。 因此,我们可以在docker-compose.yml中为每个节点设置环境变量。主节点(td1):- TAOS_FQDN: td1-TAOS_FIRST_EP:td1:6030#也可以是空,因为它是第一个节点,但官方示例中设置为主节点的FQDN-TAOS_SERVER_PORT:6030从节点(td2):- TAOS_FQDN: td2-TAOS_FIRST_EP:td1:6030#指向主节点-TAOS_SERVER_PORT:6030从节点(td3)同理。但是,注意:官方文档提到,如果使用Docker,主节点(第一个节点)的`TAOS_FIRST_EP`应该设置为自己的FQDN,而其他节点设置为第一个节点的FQDN。因此,主节点设置`TAOS_FIRST_EP=td1:6030`,从节点设置`TAOS_FIRST_EP=td1:6030`。另外,每个节点还需要设置`TAOS_DISABLE_ADMIN`为0(以启用管理接口)?这个根据版本,可能需要设置。 我们按照官方推荐,使用环境变量配置。 同时,我们需要将数据目录挂载到宿主机,以便持久化数据。因此,我们编写docker-compose.yml如下:```yamlversion:'3'services:td1:image: tdengine/tdengine:latestcontainer_name: td1hostname:td1environment:-TAOS_FQDN=td1- TAOS_FIRST_EP=td1:6030- TAOS_SERVER_PORT=6030ports:- "6030:6030"-"6041:6041"- "6043-6049:6043-6049"-"6043-6049:6043-6049/udp"volumes:- ./data/td1/data:/var/lib/taos- ./data/td1/log:/var/log/taosnetworks:- taos-nettd2:image:tdengine/tdengine:latestcontainer_name:td2hostname: td2environment:- TAOS_FQDN=td2-TAOS_FIRST_EP=td1:6030-TAOS_SERVER_PORT=6030volumes:-./data/td2/data:/var/lib/taos- ./data/td2/log:/var/log/taosnetworks:- taos-nettd3:image: tdengine/tdengine:latestcontainer_name: td3hostname:td3environment:-TAOS_FQDN=td3- TAOS_FIRST_EP=td1:6030- TAOS_SERVER_PORT=6030volumes:- ./data/td3/data:/var/lib/taos-./data/td3/log:/var/log/taosnetworks:-taos-netnetworks:taos-net:driver: bridge```注意:这里我们只暴露了主节点(td1)的端口,因为通常我们通过主节点来访问集群。从节点不需要暴露端口给宿主机(除非有特殊需求),因为它们之间通过内部网络通信。但是,如果我们希望通过宿主机访问每个节点,也可以暴露从节点的端口,但需要映射到不同的宿主机端口(避免冲突)。例如,td2的6030端口可以映射到宿主机6031,但这样配置较复杂,通常只需要访问主节点即可。另外,我们使用了volumes将数据目录和日志目录挂载到宿主机当前目录下的data子目录中,这样即使容器删除,数据也能保留。启动步骤:1.创建docker-compose.yml文件。2.在终端中执行:`docker-composeup -d`3.等待容器启动后,进入主节点容器:`docker exec-ittd1bash`4.在容器内,执行`taos`进入命令行,然后执行`SHOW DNODES;`查看集群节点状态,应该能看到三个节点。注意:由于从节点启动后会自动向主节点注册,所以集群会自动组建。 但是,根据TDengine的版本,可能需要手动添加节点。在较新的版本中(3.0+),通过环境变量配置,节点会自动加入集群。 如果自动加入失败,可能需要手动添加: 在taos命令行中,执行:```sqlCREATEDNODE"td2:6030"; CREATEDNODE"td3:6030"; ```但上述docker-compose.yml配置的环境变量应该可以自动完成集群配置。 引用[3]提到社区版无法使用delete命令,这是企业版功能,所以我们在部署时注意避免使用delete操作。 以上步骤即可完成TDengine集群的部署。 相关问题: 1.如何验证TDengine集群是否正常工作?2.TDengine集群的节点故障如何处理?3.TDengine集群的数据如何备份和恢复?</think>### 使用 Docker 部署 TDengine 数据库集群 以下是基于 Docker 部署 TDengine 集群的完整步骤,支持单机多节点或多主机集群两种模式: --- #### **一、单机多节点部署(Docker Compose)** **适用场景**:本地开发/测试环境 **配置文件**:`docker-compose.yml` ```yaml version: '3' services: td-node1: image: tdengine/tdengine:3.3.2.0 hostname: td-node1 container_name: td-node1 environment: TAOS_FQDN: td-node1 TAOS_FIRST_EP: td-node1:6030 # 主节点地址 ports: - "6030:6030" - "6041:6041" volumes: - ./node1/data:/var/lib/taos - ./node1/log:/var/log/taos networks: taos-net: aliases: [td-node1] td-node2: image: tdengine/tdengine:3.3.2.0 hostname: td-node2 container_name: td-node2 environment: TAOS_FQDN: td-node2 TAOS_FIRST_EP: td-node1:6030 # 指向主节点 volumes: - ./node2/data:/var/lib/taos - ./node2/log:/var/log/taos networks: taos-net: aliases: [td-node2] networks: taos-net: driver: bridge ``` **部署步骤**: 1. 创建配置文件并启动: ```bash mkdir -p {node1,node2}/{data,log} docker-compose up -d ``` 2. 进入主节点配置集群: ```bash docker exec -it td-node1 bash taos # 进入TDengine CLI ``` ```sql CREATE DNODE "td-node2:6030"; -- 添加从节点 SHOW DNODES; -- 查看集群状态 ``` --- #### **二、多主机集群部署(Docker Swarm)** **适用场景**:生产环境分布式部署 **节点规划**: | 主机 | IP | 角色 | |---------|--------------|--------| | taos1 | 192.168.1.10 | Leader | | taos2 | 192.168.1.11 | Follower | | taos3 | 192.168.1.12 | Follower | **部署步骤**: 1. **始化 Swarm 集群**(在 Leader 节点执行): ```bash docker swarm init --advertise-addr 192.168.1.10 ``` 2. **添加工作节点**: ```bash # 在 taos2 和 taos3 执行返回的加入命令 docker swarm join --token <TOKEN> 192.168.1.10:2377 ``` 3. **创建集群配置文件**:`taos-cluster.yml` ```yaml version: '3.8' services: tdengine: image: tdengine/tdengine:3.3.2.0 deploy: replicas: 3 placement: constraints: [node.role == worker] environment: TAOS_FQDN: "{{.Service.Name}}.{{.Task.Slot}}" TAOS_FIRST_EP: "tdengine.1" # 主节点 volumes: - taos-data:/var/lib/taos - taos-log:/var/log/taos networks: - taos-net networks: taos-net: driver: overlay volumes: taos-data: taos-log: ``` 4. **部署集群**: ```bash docker stack deploy -c taos-cluster.yml tdengine ``` --- #### **三、关键配置说明** 1. **环境变量**: - `TAOS_FQDN`:节点唯一域名(需匹配主机名) - `TAOS_FIRST_EP`:主节点地址(格式:`<主机名>:6030`) 2. **端口映射**: - `6030`:TDengine 客户端端口 - `6041`:REST API 端口 - `6043-6049`:分布式通信端口(需暴露 UDP) 3. **数据持久化**: ```yaml volumes: - /host/path:/var/lib/taos # 数据目录 - /host/log:/var/log/taos # 日志目录 ``` --- #### **四、验证集群状态** ```bash # 进入任意容器 docker exec -it td-node1 bash # 在TDengine CLI中执行 taos> SHOW DNODES; ``` **预期输出**: ``` id | endpoint | vnodes | ... ---+-------------+--------+----- 1 | td-node1:6030 | 1 | ... 2 | td-node2:6030 | 1 | ... ``` --- #### **注意事项** 1. **社区版限制**:社区版不支持 `DELETE` 操作(仅企业版支持)[^3] 2. **网络要求**: - 节点间需开放 `6030-6049` TCP/UDP 端口 - 跨主机部署时配置 `/etc/hosts` 解析: ``` 192.168.1.10 td-node1 192.168.1.11 td-node2 ``` 3. **版本兼容性**:所有节点必须使用相同版本的 TDengine 镜像 > 部署问题参考:[TDengine 官方文档](https://www.taosdata.com/docs/cn/v3.0/management#container) [^1][^2] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knight-Key

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值