当前位置: 首页 > article >正文

【四】k8s部署 TDengine集群

k8s部署 TDengine集群

目录

k8s部署 TDengine集群

一、在 Kubernetes 上部署 TDengine 集群

第一步:创建命名空间

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

第三步:配置 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)


http://www.kler.cn/a/307504.html

相关文章:

  • 记录使用documents4j来将word文件转化为pdf文件
  • HTTP常见的请求头有哪些?都有什么作用?在 Web 应用中使用这些请求头?
  • 从社交媒体到元宇宙:Facebook未来发展新方向
  • SHELL脚本(Linux)
  • 大语言模型:解锁自然语言处理的无限可能
  • HelloMeme 上手即用教程
  • 如何用 Scrapy 爬取网站数据并在 Easysearch 中进行存储检索分析
  • 一个简约的uniapp登录界面,基于uniapp+vue3+uview-plus
  • 华为地图服务 - 如何开启和展示“我的位置”? -- HarmonyOS自学10
  • Docker 无法拉取雷池 WAF 的解决方法
  • vue2基础系列教程之todo的实现及面试高频问题
  • 切线空间:unity中shader切线空间,切线矩阵,TBN矩阵 ,法线贴图深度剖析
  • LSS如何做Voxel Pooling
  • springBoot整合easyexcel实现导入、导出功能
  • 刷题DAY38
  • python 使用seleniumwire获取响应数据以及请求参数
  • 力扣100题——贪心算法
  • 【HarmonyOS NEXT】实现网络图片保存到手机相册
  • node.js+Koa框架+MySQL实现注册登录
  • Golang | Leetcode Golang题解之第412题Fizz Buzz
  • [创业之路-147] :国际标准化产品的研发与非标自动化产品研发的比较?
  • Linux进阶 修改文件权限
  • 2024年9月HarmonyOS鸿蒙应用开发者高级认证全新题库(覆盖99%考题)
  • 微软Copilot将集成到新加坡的法律科技平台中
  • electron-updater实现electron全量版本更新
  • 营收同比大增215%,联想x86服务器夯实市场前三