【四】k8s部署 TDengine集群

k8s部署 TDengine集群

目录

[k8s部署 TDengine集群](#k8s部署 TDengine集群)

[一、在 Kubernetes 上部署 TDengine 集群](#一、在 Kubernetes 上部署 TDengine 集群)

第一步:创建命名空间

[第二步:从yaml创建有状态服务 StatefulSet](#第二步:从yaml创建有状态服务 StatefulSet)

[第三步:配置 Service 服务](#第三步:配置 Service 服务)

二、集群测试


一、在 Kubernetes 上部署 TDengine 集群

本文适用 Kubernetes v1.19 以上版本

为了满足高可用的需求,集群需要满足如下要求:

3个及以上 dnode :TDengine 的同一个 vgroup 中的多个 vnode ,不允许同时分布在一个 dnode ,所以如果创建3副本的数据库,则 dnode 数大于等于3

3个 mnode :mnode 负责整个集群的管理工作,TDengine 默认是一个 mnode。如果这个 mnode 所在的 dnode 掉线,则整个集群不可用。

数据库的3副本:TDengine 的副本配置是数据库级别,所以数据库3副本可满足在3个 dnode 的集群中,任意一个 dnode 下线,都不影响集群的正常使用。如果下线 dnode 个数为2时,此时集群不可用,因为RAFT无法完成选举**

请特别注意startupProbe的配置,在 dnode 的 Pod 掉线一段时间后,再重新启动,这个时候新上线的 dnode 会短暂不可用。如果startupProbe配置过小,Kubernetes 会认为该 Pod 处于不正常的状态,并尝试重启该 Pod,该 dnode 的 Pod 会频繁重启,始终无法恢复到正常状态。

这里我们使用 kuboard 平台部署 TDengine 集群。

第一步:创建命名空间

第二步:从yaml创建有状态服务 StatefulSet

其中创建文件 tdengine.yaml,其中 replicas 定义集群节点的数量为 3。节点时区为中国(Asia/Shanghai),每个节点分配 5G 标准(standard)存储,你也可以根据实际情况进行相应修改。

复制代码
---
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.2.3.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"
            # 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: "standard"
        resources:
          requests:
            storage: "5Gi"

可以看到部署成功如下图所示:

第三步:配置 Service 服务

其中创建了一个 Service 配置文件: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"

部署成功如下图所示:

二、集群测试

输出如下:

taos> show dnodes

id | endpoint | vnodes | support_vnodes | status | create_time | reboot_time | note | active_code | c_active_code |

=============================================================================================================================================================================================================================================

1 | tdengine-0.ta... | 0 | 16 | ready | 2023-07-19 17:54:18.552 | 2023-07-19 17:54:18.469 | | | |

2 | tdengine-1.ta... | 0 | 16 | ready | 2023-07-19 17:54:37.828 | 2023-07-19 17:54:38.698 | | | |

3 | tdengine-2.ta... | 0 | 16 | ready | 2023-07-19 17:55:01.141 | 2023-07-19 17:55:02.039 | | | |

Query OK, 3 row(s) in set (0.001853s)

查看当前mnode

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

taos> show mnodes\G

*************************** 1.row ***************************

id: 1

endpoint: tdengine-0.taosd.tdengine-test.svc.cluster.local:6030

role: leader

status: ready

create_time: 2023-07-19 17:54:18.559

reboot_time: 2023-07-19 17:54:19.520

Query OK, 1 row(s) in set (0.001282s)

创建mnode

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

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

查看mnode

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

taos> show mnodes\G

*************************** 1.row ***************************

id: 1

endpoint: tdengine-0.taosd.tdengine-test.svc.cluster.local:6030

role: leader

status: ready

create_time: 2023-07-19 17:54:18.559

reboot_time: 2023-07-20 09:19:36.060

*************************** 2.row ***************************

id: 2

endpoint: tdengine-1.taosd.tdengine-test.svc.cluster.local:6030

role: follower

status: ready

create_time: 2023-07-20 09:22:05.600

reboot_time: 2023-07-20 09:22:12.838

*************************** 3.row ***************************

id: 3

endpoint: tdengine-2.taosd.tdengine-test.svc.cluster.local:6030

role: follower

status: ready

create_time: 2023-07-20 09:22:20.042

reboot_time: 2023-07-20 09:22:23.271

Query OK, 3 row(s) in set (0.003108s)

相关推荐
abcnull4 小时前
用javaparser做精准测试
java·ast·静态代码分析·精准测试·javaparser
叶小鸡4 小时前
Java 篇-项目实战-苍穹外卖-笔记汇总
java·开发语言·笔记
AI人工智能+电脑小能手4 小时前
【大白话说Java面试题】【Java基础篇】第22题:HashMap 和 HashSet 有哪些区别
java·开发语言·哈希算法·散列表·hash
juniperhan5 小时前
Flink 系列第21篇:Flink SQL 函数与 UDF 全解读:类型推导、开发要点与 Module 扩展
java·大数据·数据仓库·分布式·sql·flink
ID_180079054735 小时前
Python 实现亚马逊商品详情 API 数据准确性校验(极简可用 + JSON 参考)
java·python·json
c++之路5 小时前
C++23概述
java·c++·c++23
专注API从业者6 小时前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠6 小时前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY7 小时前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克37 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信