背景场景
自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;客户端已经成功连接!至此本次分享已经都结束了,当然通过这个案例读者还可以将集成程度做的更高,最终思想和流程就是以上分享中所描述的。
网友评论