Administrator
发布于 2025-10-16 / 3 阅读
0
0

集群部署

docker多主机部署

TAOS_FIRST_EP=h1.taosdata.com

docker run -d --name tdengine  \
  -e TAOS_FQDN=h1.taosdata.com \
  --hostname h1.taosdata.com   \
  --add-host h1.taosdata.com:192.168.100.146 \
  --add-host h2.taosdata.com:192.168.100.147 \
  --add-host h3.taosdata.com:192.168.100.148 \
  -p 6030:6030 -p 6041:6041 \
  tdengine/tdengine:3.3.6.0
docker run -d --name tdengine \
  -e TAOS_FQDN=h2.taosdata.com \
  -e TAOS_FIRST_EP=h1.taosdata.com \
  --hostname h2.taosdata.com \
  --add-host h1.taosdata.com:192.168.100.146 \
  --add-host h2.taosdata.com:192.168.100.147 \
  --add-host h3.taosdata.com:192.168.100.148 \
  -p 6030:6030 -p 6041:6041 \
  tdengine/tdengine:3.3.6.0
docker run -d --name tdengine \
  -e TAOS_FQDN=h3.taosdata.com \
  -e TAOS_FIRST_EP=h1.taosdata.com \
  --hostname h3.taosdata.com \
  --add-host h1.taosdata.com:192.168.100.146 \
  --add-host h2.taosdata.com:192.168.100.147 \
  --add-host h3.taosdata.com:192.168.100.148 \
  -p 6030:6030 -p 6041:6041 \
  tdengine/tdengine:3.3.6.0

创建 mnode

docker exec tdengine taos -s "create mnode on dnode 2"
docker exec tdengine taos -s "create mnode on dnode 3"

使用 docker compose 方式启动集群

services:
  td1:
    image: tdengine/tdengine
    environment:
      - TAOS_FQDN=td1
 
  td2:
    image: tdengine/tdengine
    environment:
      - TAOS_FQDN=td2
      - TAOS_FIRST_EP=td1:6030

  td3:
    image: tdengine/tdengine
    environment:
      - TAOS_FQDN=td3
      - TAOS_FIRST_EP=td1:6030

Kubernetes 部署

有状态服务 StatefulSet

---
apiVersion: v1
kind: Service
metadata:
  name: "tdengine"
  labels:
    app: "tdengine"
spec:
  ports:
    - name: tcp6030
      protocol: "TCP"
      port: 6030
    - name: tcp6041
      protocol: "TCP"
      port: 6041
  selector:
    app: "tdengine"
---
apiVersion: v1
kind: Service
metadata:
  name: "tdengine-iot"
  labels:
    app: "tdengine"
spec:
  ports:
    - name: tcp6030
      protocol: "TCP"
      port: 6030
    - name: tcp6041
      protocol: "TCP"
      port: 6041
  selector:
    app: "tdengine"
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: "tdengine"
  labels:
    app: "tdengine"
spec:
  serviceName: "tdengine"
  replicas: 3
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: "tdengine"
  template:
    metadata:
      name: "tdengine"
      labels:
        app: "tdengine"
    spec:
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 100
              podAffinityTerm:
                labelSelector:
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - tdengine
                topologyKey: kubernetes.io/hostname
      containers:
        - name: "tdengine"
          image: "tdengine/tdengine:3.3.6.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: "tdengine"
            - 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"
            # Environment variables with prefix TAOS_ will be parsed and converted into corresponding parameter in taos.cfg. For example, serverPort in taos.cfg should be configured by TAOS_SERVER_PORT when using K8S to deploy
            - 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 set in k8s env.
            - name: TAOS_FQDN
              value: "$(POD_NAME).$(SERVICE_NAME).$(STS_NAMESPACE).svc.cluster.local"
          volumeMounts:
            - name: taosdata
              mountPath: /var/lib/taos
          startupProbe:
            exec:
              command:
                - taos-check
            failureThreshold: 360
            periodSeconds: 10
          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: "longhorn"
        resources:
          requests:
            storage: "20Gi"

使用 kubectl 命令部署 TDengine TSDB 集群

kubectl apply -f taosd-service.yaml -n tdengine-test

检查当前集群的节点

kubectl exec -it tdengine-0 -n tdengine -- taos -s "show dnodes"
kubectl exec -it tdengine-1 -n tdengine -- taos -s "show dnodes"
kubectl exec -it tdengine-2 -n tdengine -- taos -s "show dnodes"

创建 mnode

kubectl exec -it tdengine-0 -n tdengine -- taos -s "create mnode on dnode 2"
kubectl exec -it tdengine-0 -n tdengine -- taos -s "create mnode on dnode 3"

查看 mnode

kubectl exec -it tdengine-1 -n tdengine -- taos -s "show mnodes\G"
kubectl exec -it tdengine-2 -n tdengine -- taos -s "show mnodes\G"
kubectl exec -it tdengine-3 -n tdengine -- taos -s "show mnodes\G"

参考文档

集群部署 td官网


评论