背景場(chǎng)景
自TDEngine從1.0開(kāi)始我們就一直試圖使TDEngine容器化來(lái)適配我們現(xiàn)有的微服務(wù)場(chǎng)景扁耐。TDEngine容器化之后有諸多好處:①方便部署升級(jí)運(yùn)維不依賴宿主環(huán)境情況 ?②安全,在容器網(wǎng)絡(luò)中用踩,不做端口映射外部無(wú)法獲取數(shù)據(jù) ③方便遷移和備份。在1.0版本由于諸多原因沒(méi)有利用容器化的方式使用TDEngine忙迁,這次2.0升級(jí)通過(guò)我們多方共同努力脐彩,最終使TDEngine2.0不僅可以滿足于生產(chǎn)集群化部署,也方便本地調(diào)試和測(cè)試姊扔。
Docker集群創(chuàng)建
Docker集群網(wǎng)絡(luò)這一塊惠奸,我們使用的是Docker Swarm來(lái)作為網(wǎng)絡(luò)搭建的基礎(chǔ)。先創(chuàng)建Docker集群恰梢。
docker?swarm?init
docker?swarm?join-token?manager
其他Docker節(jié)點(diǎn)根據(jù)令牌加入Docker集群佛南。
這個(gè)節(jié)點(diǎn)全部加入集群后的效果梗掰。我們的方案是在集群網(wǎng)絡(luò)的3臺(tái)云主機(jī)上部署TDEngine以及配套的服務(wù)。
集群網(wǎng)絡(luò)搭建
預(yù)先創(chuàng)建集群網(wǎng)絡(luò)嗅回,使TDEngine各個(gè)Docker節(jié)點(diǎn)能夠跨主機(jī)組網(wǎng)及穗。
docker?network?create?-d?overlay?--attachable?--subnet?10.10.68.0/24??tdengine_v2_net
TDEngine數(shù)據(jù)庫(kù)集群創(chuàng)建
創(chuàng)建TDEngine數(shù)據(jù)庫(kù)集群之前我們需要先做幾個(gè)準(zhǔn)備工作:
① 構(gòu)造TDEngine版本鏡像。(目前官方提供了開(kāi)源版的鏡像绵载,企業(yè)版需要自己編譯)
② 確定各個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)信息(包括IP分配埂陆、主機(jī)名稱等)。
③ 創(chuàng)建TDEngine各個(gè)節(jié)點(diǎn)的配置文件信息娃豹。
④ 節(jié)點(diǎn)docker-compose.yml啟動(dòng)信息焚虱。
針對(duì)①的鏡像構(gòu)造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"?]
針對(duì)②網(wǎng)絡(luò)信息:
tdengine_v2_node1 -> 10.10.68.10
tdengine_v2_node2?-> 10.10.68.11
tdengine_v2_node3 -> 10.10.68.12
針對(duì)③各節(jié)點(diǎn)配置信息:
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??
針對(duì)④的啟動(dòng)信息
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
其他幾個(gè)節(jié)點(diǎn)配置信息和上述節(jié)點(diǎn)類似,修改對(duì)應(yīng)的名稱即可培愁。
TDEngine集群?jiǎn)?dòng)以及動(dòng)態(tài)配置
集群中的每個(gè)節(jié)點(diǎn)分別啟動(dòng)之后著摔,需要進(jìn)入主節(jié)點(diǎn)中打開(kāi)taos shell,在里面手動(dòng)創(chuàng)建集群節(jié)點(diǎn)定续。使用命令
?create dnode “tdengine_v2_node2”;?
create dnode “tdengine_v2_node3”;
業(yè)務(wù)服務(wù)訪問(wèn)TDEngine數(shù)據(jù)庫(kù)以及使用
目前TDEngine數(shù)據(jù)庫(kù)已經(jīng)正式支持了JDBC和MyBatis谍咆,利用SpringBoot框架可以很輕松的訪問(wèn)。目前服務(wù)也都是容器化私股,需要容器做3出修改就可以訪問(wèn)TDEngine集群:
① 使業(yè)務(wù)服務(wù)和TDEngine處于同一docker網(wǎng)絡(luò)摹察。就是之前配置的:tdengine_v2_net
② 配置taos.cfg到/etc/taos/taos.cfg(從主節(jié)點(diǎn)復(fù)制一份即可)
③ 配置與服務(wù)端配套的libtaos.so到/usr/lib/libtaos.so(一定得是相同版本,否則會(huì)無(wú)法訪問(wèn))
通過(guò)show connections;客戶端已經(jīng)成功連接倡鲸!至此本次分享已經(jīng)都結(jié)束了供嚎,當(dāng)然通過(guò)這個(gè)案例讀者還可以將集成程度做的更高,最終思想和流程就是以上分享中所描述的峭状。