1 TDengine简介
TDengine 是一款开源、高性能、云原生的时序数据库,且针对物联网、车联网、工业互联网、金融、IT 运维等场景进行了优化。TDengine 的代码,包括集群功能,都在 GNU AGPL v3.0 下开源。除核心的时序数据库功能外,TDengine 还提供缓存、数据订阅、流式计算等其它功能以降低系统复杂度及研发和运维成本。
1.1 参考地址
https://docs.taosdata.com/get-started/package/
2 docker部署
2.1 安装docker
2.1.1 设置docker下载的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.1.2 添加缓存
yum makecache fast
2.1.3 安装docker
yum install docker-ce docker-ce-cli containerd.io
2.1.4 启动docker并设置开机自启
systemctl start docker
systemctl enable docker
2.2 docker安装TDengine
2.2.1 下载tdengine
docker pull tdengine/tdengine:latest
2.2.2 映射端口
docker run -d -p 6030:6030 -p 6041:6041 -p 6043-6049:6043-6049 -p 6043-6049:6043-6049/udp tdengine/tdengine
注意:TDengine 3.0 服务端仅使用 6030 TCP 端口。6041 为 taosAdapter 所使用提供 REST 服务端口。6043-6049 为 taosAdapter 提供第三方应用接入所使用端口,可根据需要选择是否打开。
2.2.3 查看docker容器
docker ps
2.2.4 进入该容器并执行
docker exec -it 【容器id】6f87d240b428 bash
2.2.5 运行 TDengine CLI
taos
2.2.6 检测
2.2.6.1 使用 taosBenchmark 体验写入速度
taosBenchmark
2.2.6.2 使用 TDengine CLI 体验查询速度
SELECT COUNT(*) FROM test.meters;
3 k8s 上部署 TDengine 集群
3.1 搭建k8s集群
满足条件:
- 适用 Kubernetes v1.5 以上版本
- Kubernetes 已经安装部署并能正常访问使用或更新必要的容器仓库或其他服务
3.2 配置service
3.2.1 taosd-service.yaml
---
apiVersion: v1
kind: Service
metadata:
name: "taosd"
labels:
app: "tdengine"
spec:
ports:
- name: tcp6030
protocol: "TCP"
port: 6030
- name: tcp6041
protocol: "TCP"
port: 6041
selector:
app: "tdengine"
3.2.2 tdengine.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: "tdengine"
labels:
app: "tdengine"
spec:
serviceName: "taosd"
replicas: 3
updateStrategy:
type: RollingUpdate
selector:
matchLabels:
app: "tdengine"
template:
metadata:
name: "tdengine"
labels:
app: "tdengine"
spec:
containers:
- name: "tdengine"
image: "tdengine/tdengine:3.0.0.0"
imagePullPolicy: "IfNotPresent"
ports:
- name: tcp6030
protocol: "TCP"
containerPort: 6030
- name: tcp6041
protocol: "TCP"
containerPort: 6041
env:
# POD_NAME for FQDN config
- name: POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
# SERVICE_NAME and NAMESPACE for fqdn resolve
- name: SERVICE_NAME
value: "taosd"
- name: STS_NAME
value: "tdengine"
- name: STS_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
# TZ for timezone settings, we recommend to always set it.
- name: TZ
value: "Asia/Shanghai"
# TAOS_ prefix will configured in taos.cfg, strip prefix and camelCase.
- name: TAOS_SERVER_PORT
value: "6030"
# Must set if you want a cluster.
- name: TAOS_FIRST_EP
value: "$(STS_NAME)-0.$(SERVICE_NAME).$(STS_NAMESPACE).svc.cluster.local:$(TAOS_SERVER_PORT)"
# TAOS_FQND should always be setted in k8s env.
- name: TAOS_FQDN
value: "$(POD_NAME).$(SERVICE_NAME).$(STS_NAMESPACE).svc.cluster.local"
volumeMounts:
- name: taosdata
mountPath: /var/lib/taos
readinessProbe:
exec:
command:
- taos-check
initialDelaySeconds: 5
timeoutSeconds: 5000
livenessProbe:
exec:
command:
- taos-check
initialDelaySeconds: 15
periodSeconds: 20
volumeClaimTemplates:
- metadata:
name: taosdata
spec:
accessModes:
- "ReadWriteOnce"
storageClassName: "standard"
resources:
requests:
storage: "10Gi"
3.2.3 创建集群
kubectl apply -f taosd-service.yaml
kubectl apply -f tdengine.yaml
- 使用 show dnodes 命令查看当前集群的节点
kubectl exec -i -t tdengine-0 -- taos -s "show dnodes"
kubectl exec -i -t tdengine-1 -- taos -s "show dnodes"
kubectl exec -i -t tdengine-2 -- taos -s "show dnodes"
3.2.4 dashboard 进行图形化管理
- minikube 提供 dashboard 命令支持图形化管理界面
minikube dashboard
- minikube 绑定在 127.0.0.1 IP 地址上无法通过远程访问,需要使用 kubectl proxy 命令将端口映射到
0.0.0.0 IP 地址上,再通过浏览器访问虚拟机公网 IP 和端口以及相同的 dashboard URL 路径即可远程访问 dashboard
$ kubectl proxy --accept-hosts='^.*$' --address='0.0.0.0'
3.2.5 集群扩容
kubectl scale statefulsets tdengine --replicas=4
上面命令行中参数 --replica=4 表示要将 TDengine 集群扩容到 4 个节点,执行后首先检查 POD 的状态:
kubectl get pods -l app=tdengine
3.2.6 集群缩容
- 由于 Kubernetes Statefulset 中 Pod 的只能按创建顺序逆序移除,所以 TDengine drop dnode
也需要按照创建顺序逆序移除,否则会导致 Pod 处于错误状态。
kubectl exec -i -t tdengine-0 -- taos -s "drop dnode 4"
kubectl exec -it tdengine-0 -- taos -s "show dnodes"
kubectl scale statefulsets tdengine --replicas=3
kubectl get pods -l app=tdengine
- POD删除后,需要手动删除PVC,否则下次扩容时会继续使用以前的数据导致无法正常加入集群
kubectl delete pvc taosdata-tdengine-3
3.2.7 清理 TDengine 集群
- 完整移除 TDengine 集群,需要分别清理 statefulset、svc、configmap、pvc。
kubectl delete statefulset -l app=tdengine
kubectl delete svc -l app=tdengine
kubectl delete pvc -l app=tdengine
kubectl delete configmap taoscfg