背景
公司容器环境,device微服务需要访问tdengine server(下面简称td数据库),该server在k8s集群外,和k8s在同一个vpc下面。
经开发测试,JNI经过client访问td数据库要比通过RESTful api性能高出23.5%-48%,所以微服务通过client连接,以下是部署过程及遇到的一些问题。
创建Dockerfile
经过测试tdengine不支持alpine发行版构建,同时Java微服务用alpine的访问报错,出现问题。通过下载安装包,执行 install_client.sh
的形式安装,如下所示,此dockerfile为新构建的基础镜像。
FROM openjdk:8
LABEL maintainer novice
ADD TDengine-client-2.6.0.8-Linux-x64.tar.gz /opt/
WORKDIR /opt/TDengine-client-2.6.0.8
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \
echo 'Asia/Shanghai' >/etc/timezone && \
/bin/bash install_client.sh
上面的ADD命令拷贝的同时解压缩。
假设上面创建的基础镜像名字为:openjdk8_taos:1,用上面的基础镜像创建微服务镜像,如下所示:
FROM harbor.shop.com/library/openjdk8_taos:1
LABEL maintainer Novice
COPY ./target/shop-modules-device.jar /opt/
EXPOSE 9230
CMD java -Dspring.profiles.active=stage -jar /opt/shop-modules-device.jar
注意事项
-
之前有尝试通过自建通过COPY libtaos.so到镜像/usr/lib或者/usr/lib64的形式创建dockerfile,但是出现连接超时,所以放弃了;
-
tdengine client连接td server时,用到fqdn,如果没有用到dns解析,上面需要通配置/etc/hosts,指定解析,同时,hosts解析在镜像里面配置后,每次会被覆盖掉,关于这个问题,可以参考其他文章的解决办法,这里不再赘述;
-
本次实验中使用的版本是2.6.0.8,尝试在
/etc/taos/taos.cfg
中修改fqdn为ip时,taos启动不了,应该是不支持。另外,如果之前默认使用hostname作为fqdn,运行起来之后。当想要修改fqdn时,需要将/var/lib/taos
删掉,特别注意,这里把数据库也都删除了,如果不想删除,这里我用grep命令搜到所包含旧的hostname,然后手动修改为新的,操作步骤如下所示:
之后即可正常restart taosd。