콘텐츠로 이동

TDengine 고가용성 배포

1. 개요

TDengine은 고성능 분산형 SQL 지원 시계열 데이터베이스(Time-Series Database)로, 핵심 코드에는 클러스터 기능을 포함한 모든 기능이 오픈소스(라이선스: AGPL v3.0)로 제공됩니다. TDengine은 IoT, 산업 인터넷, 커넥티드 카, IT 운영, 금융 등 다양한 분야에서 널리 사용됩니다. 핵심 시계열 데이터베이스 기능 외에도 캐시, 데이터 구독, 스트림 컴퓨팅 등 빅데이터 플랫폼에 필요한 다양한 기능을 제공하여 개발 및 운영 복잡성을 최대한 줄여줍니다.

2. 사전 조건

  • Kubernetes 클러스터가 배포되어 있어야 합니다.
  • OpenEBS 스토리지 플러그인 드라이버가 배포되어 있어야 합니다.
root@k8s-node01 ]# kubectl  get pods -n kube-system|grep openebs
openebs-localpv-provisioner-6b56b5567c-k5r9l   1/1     Running   0          23h
openebs-ndm-jqxtr                              1/1     Running   0          23h
openebs-ndm-operator-5df6ffc98-cplgp           1/1     Running   0          23h
openebs-ndm-qtjxm                              1/1     Running   0          23h
openebs-ndm-vlcrv                              1/1     Running   0          23h

3. 설치 준비

TDengine은 리소스를 많이 소모하므로 클러스터 리소스를 전용으로 사용해야 하므로 사전에 클러스터 스케줄링을 구성해야 합니다.

4. 클러스터 레이블 설정

다음 명령을 실행하여 클러스터에 레이블을 지정합니다.

# 클러스터 계획에 따라 TDengine 서비스를 배포할 k8s 노드에 레이블을 지정합니다. 3개 노드를 사용하는 것이 좋습니다.
# xxx는 실제 클러스터 노드를 나타내며, 여러 노드는 공백으로 구분합니다.
kubectl label nodes xxx tdengine=true

레이블 확인

kubectl get nodes --show-labels  | grep 'tdengine'

5. 클러스터 테인트 설정

다음 명령을 실행하여 클러스터 테인트를 설정합니다.

TDengine 서비스 실행을 위한 전용 노드를 계획하지 않은 경우 노드에 테인트를 설정할 필요가 없으며 이 단계는 생략할 수 있습니다.

kubectl taint node  xxxx infrastructure=middleware:NoExecute

6. StorageClass 구성

TDengine 전용 스토리지 클래스를 구성합니다.

# 다음 yaml 내용을 k8s 클러스터에 sc-td.yaml로 저장하고 실제 상황에 맞게 수정한 후 배포합니다.
apiVersion: storage.k8s.io/v1
allowVolumeExpansion: true
kind: StorageClass
metadata:
  annotations:
    cas.openebs.io/config: |
      - name: StorageType
        value: "hostpath"
      - name: BasePath
        value: "/data/tdengine"  # 이 경로는 실제 상황에 따라 수정 가능하며, 저장 공간이 충분하고 경로가 존재하는지 확인하세요.
  name: openebs-tdengine   # 이름은 클러스터 내에서 고유해야 하며, 설치 전에 배포 파일 /etc/kubeasz/guance/infrastructure/yaml/taos.yaml 을 함께 수정해야 합니다.
provisioner: openebs.io/local
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer

/data/tdengine 디렉터리의 디스크 용량이 충분한지 확인하세요.

스토리지 공간 크기 구성

volumeClaimTemplates:
  - metadata:
      name: taos-tdengine-taosdata
    spec:
      accessModes:
        - "ReadWriteOnce"
      storageClassName: "openebs-tdengine"
      resources:
        requests:
          storage: "50Gi"  ## 데이터 저장 공간 할당, 실제 필요에 따라 설정
  - metadata:
      name: taos-tdengine-taoslog
    spec:
      accessModes:
        - "ReadWriteOnce"
      storageClassName: "openebs-tdengine"
      resources:
        requests:
          storage: "1Gi"  ## 로그 저장 공간 할당, 실제 필요에 따라 설정

7. 설치

# 네임스페이스 생성
kubectl  create  ns middleware
# TDengine 서비스 배포
kubectl  apply  -f /etc/kubeasz/guance/infrastructure/yaml/taos.yaml  -n middleware

8. 배포 및 구성 확인

8.1 컨테이너 상태 확인

[root@ecs-788c ~]# kubectl  get pods -n middleware  |grep  taos
taos-tdengine-0                                             1/1     Running   0          5m32s
taos-tdengine-arbitrator-5bfd76b7bd-8jtmd                   1/1     Running   0          5m32s

8.2 서비스 확인

TDengine 서비스 가용성 확인
# 설치 후 다음 명령을 사용하여 로그인 확인


[root@ecs-788c ~]# kubectl  exec -it -n middleware taos-tdengine-0  -- taos

Welcome to the TDengine shell from Linux, Client Version:2.6.0.18
Copyright (c) 2022 by TAOS Data, Inc. All rights reserved.

  *********************  How to Use TAB in TAOS Shell ******************************
  *   Taos shell supports pressing TAB key to complete word. You can try it.       *
  *   Press TAB key anywhere, You'll get surprise.                                 *
  *   KEYBOARD SHORTCUT:                                                           *
  *    [ TAB ]        ......  Complete the word or show help if no input           *
  *    [ Ctrl + A ]   ......  move cursor to [A]head of line                       *
  *    [ Ctrl + E ]   ......  move cursor to [E]nd of line                         *
  *    [ Ctrl + W ]   ......  move cursor to line of middle                        *
  *    [ Ctrl + L ]   ......  clean screen                                         *
  *    [ Ctrl + K ]   ......  clean after cursor                                   *
  *    [ Ctrl + U ]   ......  clean before cursor                                  *
  *                                                                                *
  **********************************************************************************

taos> show mnodes;
  id   |           end_point            |     role     |        role_time        |       create_time       |
=============================================================================================================
      1 | taos-tdengine-0.taos-tdengi... | leader       | 2022-11-03 08:52:13.219 | 2022-11-03 08:52:13.219 |
Query OK, 1 row(s) in set (0.000748s)

taos> show dnodes;
  id   |           end_point            | vnodes | cores  |   status   | role  |       create_time       |      offline reason      |
======================================================================================================================================
      1 | taos-tdengine-0.taos-tdengi... |      1 |      8 | ready      | any   | 2022-11-03 08:52:13.219 |                          |
      0 | taos-tdengine-arbitrator       |      0 |      0 | ready      | arb   | 2022-11-03 08:52:14.044 | -                        |
Query OK, 2 row(s) in set (0.000451s)

taos> show databases;
              name              |      created_time       |   ntables   |   vgroups   | replica | quorum |  days  |           keep           |  cache(MB)  |   blocks    |   minrows   |   maxrows   | wallevel |    fsync    | comp | cachelast | precision | update |   status   |
====================================================================================================================================================================================================================================================================================
log                            | 2022-11-03 08:52:14.221 |          12 |           1 |       1 |      1 |     10 | 30                       |           1 |           3 |         100 |        4096 |        1 |        3000 |    2 |         0 | us        |      0 | ready      |
Query OK, 1 row(s) in set (0.000493s)

taos> show users;
          name           | privilege |       create_time       |         account          |           tags           |
=======================================================================================================================
_root                    | writable  | 2022-11-03 08:52:13.219 | root                     |                          |
monitor                  | writable  | 2022-11-03 08:52:13.219 | root                     |                          |
root                     | super     | 2022-11-03 08:52:13.219 | root                     |                          |
Query OK, 3 row(s) in set (0.000691s)

8.3 클러스터 확장

참고

선택 사항이며, 실제 리소스 계획에 따라 확장 여부를 결정합니다.

[root@ecs-788c ~]# kubectl  scale --replicas=3 -n middleware  statefulset taos-tdengine
statefulset.apps/taos-tdengine scaled

확장 성공 확인
[root@ecs-788c ~]# kubectl  exec -it -n middleware taos-tdengine-0  -- taos -uroot

Welcome to the TDengine shell from Linux, Client Version:2.6.0.18
Copyright (c) 2022 by TAOS Data, Inc. All rights reserved.

  *********************  How to Use TAB in TAOS Shell ******************************
  *   Taos shell supports pressing TAB key to complete word. You can try it.       *
  *   Press TAB key anywhere, You'll get surprise.                                 *
  *   KEYBOARD SHORTCUT:                                                           *
  *    [ TAB ]        ......  Complete the word or show help if no input           *
  *    [ Ctrl + A ]   ......  move cursor to [A]head of line                       *
  *    [ Ctrl + E ]   ......  move cursor to [E]nd of line                         *
  *    [ Ctrl + W ]   ......  move cursor to line of middle                        *
  *    [ Ctrl + L ]   ......  clean screen                                         *
  *    [ Ctrl + K ]   ......  clean after cursor                                   *
  *    [ Ctrl + U ]   ......  clean before cursor                                  *
  *                                                                                *
  **********************************************************************************

taos> show dnodes;
  id   |           end_point            | vnodes | cores  |   status   | role  |       create_time       |      offline reason      |
======================================================================================================================================
      1 | taos-tdengine-0.taos-tdengi... |      0 |      8 | ready      | any   | 2022-11-03 09:46:02.087 |                          |
      2 | taos-tdengine-1.taos-tdengi... |      0 |      8 | ready      | any   | 2022-11-03 09:46:40.592 |                          |
      3 | taos-tdengine-2.taos-tdengi... |      1 |      8 | ready      | any   | 2022-11-03 09:49:44.772 |                          |
      0 | taos-tdengine-arbitrator       |      0 |      0 | ready      | arb   | 2022-11-03 09:46:02.905 | -                        |
Query OK, 4 row(s) in set (0.000708s)

taos> show mnodes;
  id   |           end_point            |     role     |        role_time        |       create_time       |
=============================================================================================================
      1 | taos-tdengine-0.taos-tdengi... | leader       | 2022-11-03 09:46:02.087 | 2022-11-03 09:46:02.087 |
      2 | taos-tdengine-1.taos-tdengi... | follower     | 2022-11-03 09:47:02.166 | 2022-11-03 09:46:53.208 |
      3 | taos-tdengine-2.taos-tdengi... | follower     | 2022-11-03 09:50:02.214 | 2022-11-03 09:49:57.378 |
Query OK, 3 row(s) in set (0.000542s)

taos> show databases;
              name              |      created_time       |   ntables   |   vgroups   | replica | quorum |  days  |           keep           |  cache(MB)  |   blocks    |   minrows   |   maxrows   | wallevel |    fsync    | comp | cachelast | precision | update |   status   |
====================================================================================================================================================================================================================================================================================
log                            | 2022-11-03 09:46:03.089 |          24 |           1 |       1 |      1 |     10 | 30                       |           1 |           3 |         100 |        4096 |        1 |        3000 |    2 |         0 | us        |      0 | ready      |
Query OK, 1 row(s) in set (0.000449s)

[root@ecs-788c ~]# kubectl  get pods -n middleware  |grep taos
taos-tdengine-0                                             1/1     Running   0          41m
taos-tdengine-1                                             1/1     Running   0          41m
taos-tdengine-2                                             1/1     Running   0          40m
taos-tdengine-arbitrator-5bfd76b7bd-925wf                   1/1     Running   0          41m

8.4 사용자 관리

시스템 관리자는 CLI 인터페이스에서 사용자를 추가, 삭제하고 비밀번호를 변경할 수 있습니다. CLI에서의 SQL 구문은 다음과 같습니다.

CREATE USER <user_name> PASS <'password'>;

사용자를 생성하고 사용자 이름과 비밀번호를 지정합니다. 비밀번호는 작은따옴표로 묶어야 하며, 작은따옴표는 영문 반각 문자입니다.

DROP USER <user_name>;

사용자를 삭제합니다. root 사용자만 사용할 수 있습니다.

ALTER USER <user_name> PASS <'password'>;

사용자 비밀번호를 변경합니다. 소문자로 변환되는 것을 방지하기 위해 비밀번호는 작은따옴표로 묶어야 하며, 작은따옴표는 영문 반각 문자입니다.

ALTER USER <user_name> PRIVILEGE <write|read>;

사용자 권한을 write 또는 read로 변경합니다. 작은따옴표를 추가할 필요가 없습니다.

참고

시스템에는 super/write/read의 세 가지 권한 수준이 있지만, 현재 alter 명령을 통해 사용자에게 super 권한을 부여할 수는 없습니다.

SHOW USERS;

모든 사용자를 표시합니다.

SQL 구문에서 < >는 사용자가 입력해야 하는 부분을 나타내지만, < > 자체는 입력하지 마십시오.

8.4.1 계정 관리

# 새 계정 생성
taos> CREATE USER zhuyun PASS 'dfjdljf12341@3$';
Query OK, 0 of 0 row(s) in database (0.002040s)

# 계정 권한 변경
taos> ALTER USER zhuyun PRIVILEGE write;

# 계정 비밀번호 변경
taos> ALTER USER zhuyun PASS 'hjdkaGHJH123#';
Query OK, 0 of 0 row(s) in database (0.001996s)

8.4.2 사용자 확인

TDengine 서비스 가용성 확인
[root@ecs-788c ~]# kubectl  exec -it -n middleware taos-tdengine-0  -- taos -u zhuyun -p
Welcome to the TDengine shell from Linux, Client Version:2.6.0.18
Copyright (c) 2022 by TAOS Data, Inc. All rights reserved.

Enter password:
  *********************  How to Use TAB in TAOS Shell ******************************
  *   Taos shell supports pressing TAB key to complete word. You can try it.       *
  *   Press TAB key anywhere, You'll get surprise.                                 *
  *   KEYBOARD SHORTCUT:                                                           *
  *    [ TAB ]        ......  Complete the word or show help if no input           *
  *    [ Ctrl + A ]   ......  move cursor to [A]head of line                       *
  *    [ Ctrl + E ]   ......  move cursor to [E]nd of line                         *
  *    [ Ctrl + W ]   ......  move cursor to line of middle                        *
  *    [ Ctrl + L ]   ......  clean screen                                         *
  *    [ Ctrl + K ]   ......  clean after cursor                                   *
  *    [ Ctrl + U ]   ......  clean before cursor                                  *
  *                                                                                *
  **********************************************************************************

taos> show users;
          name           | privilege |       create_time       |         account          |           tags           |
=======================================================================================================================
_root                    | writable  | 2022-11-03 08:52:13.219 | root                     |                          |
monitor                  | writable  | 2022-11-03 08:52:13.219 | root                     |                          |
zhuyun                   | writable  | 2022-11-03 09:06:41.294 | root                     |                          |
root                     | super     | 2022-11-03 08:52:13.219 | root                     |                          |
Query OK, 4 row(s) in set (0.000730s)

문서 평가

이 페이지가 도움이 되었나요?