0%

下载服务端对应版本的客户端

windows客户端使用

  1. 安装TDengine-client-2.2.1.1-Windows-x64.exe
  2. 默认安装目录C:\TDengine
  3. 修改C:\TDengine\cfg\taos.cfgfirstEp
  4. window机器修改C:\Windows\System32\drivers\etc\hosts,添加集群节点的hostname.
  5. 桌面双击运行Taos shell,执行taos.exe进入终端.

准备工作

  • 准备3台服务器,搭建3节点集群
  • 所有节点准备RPM安装包
  • 建议关闭所有物理节点的防火墙,至少保证端口:6030 - 6042的TCP和UDP端口都是开放的
  • 每台服务器执行hostname -f,获取机器名,在各个节点都配置好/etc/hosts
  • 节点保证时区一致,时间相差不大

所有节点安装服务端(注意不要启动taosd服务)

# 安装命令
rpm -vi TDengine-server-2.2.1.1-Linux-x64.rpm
# 卸载命令
rpm -e tdengine

注意关键步骤:Enter FQDN:port (like h1.taosdata.com:6030) of an existing TDengine cluster node to join OR leave it blank to build one :

  1. 第一台节点可以一路回车,也可以输入自己的hostname:6030
  2. 之后的节点到这一步时输入第一台节点的hostname:6030

自动生成配置文件目录、数据库目录、日志目录。

  • 配置文件缺省目录:/etc/taos/taos.cfg, 软链接到/usr/local/taos/cfg/taos.cfg
  • 数据库缺省目录:/var/lib/taos, 软链接到/usr/local/taos/data
  • 日志缺省目录:/var/log/taos, 软链接到/usr/local/taos/log
  • /usr/local/taos/bin目录下的可执行文件,会软链接到/usr/bin目录下;
  • /usr/local/taos/driver目录下的动态库文件,会软链接到/usr/lib目录下;
  • /usr/local/taos/include目录下的头文件,会软链接到到/usr/include目录下;

修改TDengine的配置文件(所有节点的文件/etc/taos/taos.cfg都需要修改)

// firstEp 是每个数据节点首次启动后连接的第一个数据节点
firstEp               h1.taosdata.com:6030
// 必须配置为本数据节点的FQDN,如果本机只有一个hostname, 可注释掉本项
fqdn                  h1.taosdata.com  
// 配置本数据节点的端口号,缺省是6030
serverPort            6030
// 副本数为偶数的时候,需要配置,请参考《Arbitrator的使用》的部分
arbitrator            ha.taosdata.com:6042

注意:一定要修改的参数是firstEpfqdn。在每个数据节点,firstEp需全部配置成一样,但fqdn一定要配置成其所在数据节点的值。

启动集群

# 启动服务命令
systemctl start taosd
systemctl status taosd
  1. 在第一台节点执行taos命令进入控制台:
[root@data1 tdengine]# taos
Welcome to the TDengine shell from Linux, Client Version:2.2.1.1
Copyright (c) 2020 by TAOS Data, Inc. All rights reserved.
-- 查看节点列表
taos> show dnodes;
   id   |           end_point            | vnodes | cores  |   status   | role  |       create_time       |      offline reason      |
======================================================================================================================================
      1 | data1:6030                     |      1 |      4 | ready      | any   | 2021-10-29 09:50:55.154 |                          |
Query OK, 1 row(s) in set (0.000985s)
  1. 启动第二、三台节点的服务

  2. 在第一台节点控制台执行加入节点的命令

-- 加入节点2
taos> create dnode "data2:6030";
Query OK, 0 of 0 row(s) in database (0.000578s)
-- 加入节点3
taos> create dnode "data2:6030";
Query OK, 0 of 0 row(s) in database (0.000578s)
-- 查看节点列表
taos> show dnodes;
   id   |           end_point            | vnodes | cores  |   status   | role  |       create_time       |      offline reason      |
======================================================================================================================================
      1 | data1:6030                     |      1 |      4 | ready      | any   | 2021-10-29 09:50:55.154 |                          |
      2 | data2:6030                     |      1 |      4 | ready      | any   | 2021-10-29 09:52:37.821 |                          |
      3 | data3:6030                     |      0 |      4 | ready      | any   | 2021-10-29 09:52:58.892 |                          |

# docker安装
docker run -d --name tdengine tdengine/tdengine
# 进入容器
docker exec -it tdengine /bin/bash
# 容器内执行命令
taosdemo
# 上述命令运行结束,进入tdengine终端
taos

taosdemo命令将在数据库 test 下面自动创建一张超级表 meters,该超级表下有 1 万张表,表名为 “d0” 到 “d9999”,每张表有 1 万条记录,每条记录有 (ts, current, voltage, phase) 四个字段,时间戳从 “2017-07-14 10:40:00 000” 到 “2017-07-14 10:40:09 999”,每张表带有标签 location 和 groupId,groupId 被设置为 1 到 10, location 被设置为 “beijing” 或者 “shanghai”。

taosdemo命令本身带有很多选项,配置表的数目、记录条数等等,请执行 taosdemo –help详细列出

-- 查看数据库。
show databases;
-- 查看超级表
use test;
show stables;
-- 查看表,限制输出十条
select * from test.t0 limit 10;
-- 查看 d0 表的标签值
select groupid, location from test.d0;
-- 查询超级表下记录总条数
select count(*) from test.meters;
-- 查询1亿条记录的平均值、最大值、最小值等
select avg(current), max(voltage), min(phase) from test.meters;
-- 查询location="beijing"的记录总条数
select count(*) from test.meters where location="beijing";
-- 查询groupId=10的所有记录的平均值、最大值、最小值等
select avg(current), max(voltage), min(phase) from test.meters where groupId=10;
-- 对表d10按10s进行平均值、最大值和最小值聚合统计
select avg(current), max(voltage), min(phase) from test.d10 interval(10s);

引入依赖

<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger2</artifactId>
    <version>2.9.2</version>
</dependency>
<dependency>
    <groupId>io.springfox</groupId>
    <artifactId>springfox-swagger-ui</artifactId>
    <version>2.9.2</version>
</dependency>

配置

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket createRestApi(){
        return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any()).build();
    }

    private ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("Demo API Doc")
                .description("This is a restful api document of Demo.")
                .version("1.0")
                .build();
    }
}

访问UI

常用注解:

  • @Api()用于类;
    表示标识这个类是swagger的资源
  • @ApiOperation()用于方法;
    表示一个http请求的操作
    - @ApiParam()用于方法,参数,字段说明;
    表示对参数的添加元数据(说明或是否必填等)
    - @ApiModel()用于类
    表示对类进行说明,用于参数用实体类接收
  • @ApiModelProperty()用于方法,字段
    表示对model属性的说明或者数据操作更改
  • @ApiIgnore()用于类,方法,方法参数
    表示这个方法或者类被忽略
  • @ApiImplicitParam() 用于方法
    表示单独的请求参数
  • @ApiImplicitParams()用于方法,包含多个 @ApiImplicitParam

示例

@RestController
@RequestMapping("/xxtest")
@Api(tags = "这里修改大类的名字", description = "这里修改大类的描述")
public class SysRoleController {

    @ApiImplicitParams({
        @ApiImplicitParam(name = "Authorization", value = "请求Header的名称", required = true, dataType = "String",paramType = "header"),
    })
    @ApiOperation(value = "修改接口的描述")
    @PostMapping("/test")
    public Response add(@RequestParam(value = "name") @ApiParam(value = "这里写参数名字") String name) {
        return roleService.add(name);
    }

    @ApiImplicitParams({
        @ApiImplicitParam(name = "Authorization", value = "认证Token", required = true, dataType = "String",paramType = "header"),
        @ApiImplicitParam(name = "name", value = "也可以在这里写参数的名称", dataType = "integer",paramType = "query"),
    })
    @ApiOperation(value = "修改接口的描述")
    @PostMapping("/test")
    public Response add(@RequestParam(value = "name") String name) {
        return roleService.add(name);
    }
}

@ApiModel(description = "测试实体")
public class TestEntity {
    @ApiModelProperty(value = "名称")
    private String name;
    @ApiModelProperty(value = "ID")
    private Integer id;
}

// influxdb客户端超时是由于http超时导致.
// 1. 声明 OkHttpClient 设置超时时间
static OkHttpClient.Builder build = new OkHttpClient.Builder()
            .readTimeout(20, TimeUnit.SECONDS);

// 2. 
InfluxDB influxDB = InfluxDBFactory.connect("http://127.0.0.1:8086", build);

  • 创建一个能运行docker命令的基础镜像
FROM hub.deri.org.cn/library/openjdk:8-jdk-alpine
MAINTAINER wuzhiyong Docker Maintainers "wuzhiyong@deri.energy"
RUN echo "Asia/shanghai" > /etc/timezone
RUN apk add docker
ENV LANG C.UTF-8
  • 创建java镜像
FROM hub.deri.org.cn/library/openjdk:8-jdk-alpine-docker
MAINTAINER wuzhiyong Docker Maintainers "wuzhiyong@deri.energy"
ADD route-1.0.0-SNAPSHOT.jar /root
EXPOSE 8080
ENV LANG C.UTF-8
CMD cd /root  && java -jar route-1.0.0-SNAPSHOT.jar
  • 启动容器必须携带的
 -v /var/run/docker.sock:/var/run/docker.sock

这样启动起来的java容器内,可以直接执行docker命令,如docker ps获取宿主机所有运行的容器列表.