美文网首页
TDEngine2.0在Docker集群网络环境中的使用

TDEngine2.0在Docker集群网络环境中的使用

作者: Well_9a07 | 来源:发表于2020-09-21 10:16 被阅读0次

背景场景

自TDEngine从1.0开始我们就一直试图使TDEngine容器化来适配我们现有的微服务场景。TDEngine容器化之后有诸多好处:①方便部署升级运维不依赖宿主环境情况  ②安全,在容器网络中,不做端口映射外部无法获取数据 ③方便迁移和备份。在1.0版本由于诸多原因没有利用容器化的方式使用TDEngine,这次2.0升级通过我们多方共同努力,最终使TDEngine2.0不仅可以满足于生产集群化部署,也方便本地调试和测试。

Docker集群创建

Docker集群网络这一块,我们使用的是Docker Swarm来作为网络搭建的基础。先创建Docker集群。

docker swarm init

docker swarm join-token manager

集群创建示意

其他Docker节点根据令牌加入Docker集群。

已经创建的集群

这个节点全部加入集群后的效果。我们的方案是在集群网络的3台云主机上部署TDEngine以及配套的服务。

集群网络搭建

预先创建集群网络,使TDEngine各个Docker节点能够跨主机组网。

docker network create -d overlay --attachable --subnet 10.10.68.0/24  tdengine_v2_net

创建后的集群网络

TDEngine数据库集群创建

创建TDEngine数据库集群之前我们需要先做几个准备工作:

① 构造TDEngine版本镜像。(目前官方提供了开源版的镜像,企业版需要自己编译)

② 确定各个节点的网络信息(包括IP分配、主机名称等)。

③ 创建TDEngine各个节点的配置文件信息。

④ 节点docker-compose.yml启动信息。

针对①的镜像构造Dockerfile:

FROM centos:8 as builder

ARG PACKAGE=TDengine-enterprise-server-1.6.5.10-Linux-x64.tar.gz

ARG EXTRACTDIR=TDengine-enterprise-server

ARG CONTENT=taos.tar.gz

WORKDIR /root

COPY ${PACKAGE} .

RUN tar -zxf ${PACKAGE} && \

mv ${EXTRACTDIR}/driver ./lib && \

tar -zxf ${EXTRACTDIR}/${CONTENT}

FROM centos:8

WORKDIR /root

RUN yum install -y glibc-langpack-en dmidecode gdb

COPY --from=builder /root/bin/taosd /usr/bin

COPY --from=builder /root/bin/taos /usr/bin

COPY --from=builder /root/cfg/taos.cfg /etc/taos/

COPY --from=builder /root/lib/libtaos.so.* /usr/lib/libtaos.so.1

ENV LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib"

ENV LC_CTYPE=en_US.UTF-8

ENV LANG=en_US.UTF-8

EXPOSE 6030-6041/tcp 6060/tcp 6030-6039/udp

VOLUME [ "/var/lib/taos", "/var/log/taos", "/etc/taos" ]

CMD [ "taosd" ]

针对②网络信息:

tdengine_v2_node1 -> 10.10.68.10

tdengine_v2_node2 -> 10.10.68.11

tdengine_v2_node3 -> 10.10.68.12

针对③各节点配置信息:

taos1.cfg

firstEp  10.10.68.10:6030

secondEp 10.10.68.11:6030

fqdn     10.10.68.10

balance  0

taos2.cfg

firstEp  10.10.68.10:6030

secondEp 10.10.68.11:6030

fqdn     10.10.68.11

balance  0 

taos3.cfg

firstEp  10.10.68.10:6030

secondEp 10.10.68.11:6030

fqdn     10.10.68.11

balance  0  

针对④的启动信息

version: '3.7'

networks:

  tdengine_v2_net:

    external: true

services: 

  tdengine-node1:

    build:

      context: .

      args:

        - PACKAGE=TDengine-enterprise-server-2.0.3.1-Linux-x64.tar.gz

    image: tdengine_ee

    container_name: tdengine_v2_node1

    hostname: tdengine_v2_node1

    cap_add:

      - ALL

    stdin_open: true

    tty: true

    environment:

      TZ: "Asia/Shanghai"

    command: >

      sh -c "ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && 

      echo $TZ > /etc/timezone &&

      exec my-main-application"

    volumes: 

      # bind data directory

   - type: bind

        source: /mydata/node1/data

        target: /var/lib/taos

      # bind log directory

      - type: bind

        source: /mydata/node1/log

        target: /var/log/taos

      # bind configuration

      - type: bind

        source: /mydata/node1/cfg

        target: /etc/taos

      - type: bind

        source: /root/tdengine

        target: /root/tdengine

    networks:

        tdengine_v2_net:

            ipv4_address: 10.10.68.10

    restart: always

    command: taosd

其他几个节点配置信息和上述节点类似,修改对应的名称即可。

TDEngine集群启动以及动态配置

集群中的每个节点分别启动之后,需要进入主节点中打开taos shell,在里面手动创建集群节点。使用命令

 create dnode “tdengine_v2_node2”; 

create dnode “tdengine_v2_node3”;

创建集群节点 从上图演示实例中可以看出集群已经成功创建并且运行了


业务服务访问TDEngine数据库以及使用

目前TDEngine数据库已经正式支持了JDBC和MyBatis,利用SpringBoot框架可以很轻松的访问。目前服务也都是容器化,需要容器做3出修改就可以访问TDEngine集群:

① 使业务服务和TDEngine处于同一docker网络。就是之前配置的:tdengine_v2_net

② 配置taos.cfg到/etc/taos/taos.cfg(从主节点复制一份即可)

③ 配置与服务端配套的libtaos.so到/usr/lib/libtaos.so(一定得是相同版本,否则会无法访问)

数据库连接状态

通过show connections;客户端已经成功连接!至此本次分享已经都结束了,当然通过这个案例读者还可以将集成程度做的更高,最终思想和流程就是以上分享中所描述的。

相关文章

网友评论

      本文标题:TDEngine2.0在Docker集群网络环境中的使用

      本文链接:https://www.haomeiwen.com/subject/ldamyktx.html