跳到主要内容
版本:1.0

GreptimeDB 企业版部署指南

环境准备​

前言​

GreptimeDB 企业版部署包括以下组件:

  1. GreptimeDB Operator:用于和 Kubernetes 集群交互。
  2. KV 存储:用于存储数据库元数据信息(支持云服务或自建),推荐使用云服务中的 RDS,例如 AWS RDS PostgreSQL。可选以下存储设施:
  • PostgreSQL
  • MySQL
  • ETCD
  1. GreptimeDB 数据库集群,包含以下组件:
  • Meta:数据库集群元数据信息管理组件
  • Datanode:数据节点
  • Frontend:入口和协议解析节点
  • Flownode(可选): 流计算节点
  • Vector Sidecar:指标采集 agent
  • GreptimeDB Standalone: 集群自监控存储节点
  1. GreptimeDB Enterprise Dashboard
  2. Kafka(可选): 为 GreptimeDB 提供 Remote WAL
  3. MinIO(可选): 为 GreptimeDB 提供对象存储,推荐使用云服务中的对象存储(例如:AWS S3)

其中打*的为可选安装:

Pod 组件名称副本数量CPU (Core)内存 (GB)磁盘 (Gi)
ETCD*32410
GreptimeDB Operator111
Meta
Datanode
Frontend
Flownode*
Vector Sidecar
GreptimeDB Standalone148
GreptimeDB Enterprise Dashboard1
Kafka*3
MinIO*4

部署 GreptimeDB Operator​

参考 GreptimeDB Operator 的管理文档获取详细的安装步骤。

部署 ETCD (可选)​

参考 管理 ETCD获取详细的安装步骤。

部署 Kafka (可选)​

参考 部署 Kafka 集群获取详细的安装步骤。

部署 MinIO (可选)​

参考 部署 MinIO 集群获取详细的安装步骤。

部署 GreptimeDB 基础设施测试​

参考 部署 GreptimeDB 基础设施测试 获取详细的安装步骤,将测试结果告诉 Greptimeteam。

安装及启动 GreptimeDB​

获取 GreptimeDB 企业版镜像​

GreptimeDB 企业版以 docker 镜像发布。我们为每位客户提供了一个单独的、托管在阿里云上的私有 docker 仓库,你可以使用 docker pull 命令直接拉取,或在 helm chart 中配置。

你需要在 helm chart 的 values.yaml 文件中配置镜像信息以获得专属的 GreptimeDB 企业版,例如:

customImageRegistry:
enabled: true
# -- pull secret 名称,可自定义,需要和 `image.pullSecrets` 保持一致
secretName: greptimedb-custom-image-pull-secret
registry: <registry>
username: <username>
password: <password>

image:
registry: <registry>
repository: <repository>
tag: <tag>
pullSecrets:
- greptimedb-custom-image-pull-secret

上述配置中, customImageRegistry 中的 registry、username 和 password 用于创建 k8s 的 pull secret, image 中的 registry、repository 和 tag 用于指定 GreptimeDB 企业版镜像, 因此 customImageRegistry.secretName 和 image.pullSecrets 需要保持一致以保证拉取镜像时能够找到正确的认证信息。

请联系 Greptime 工作人员获取上述配置项的具体值。 Greptime 工作人员在首次交付给你 GreptimeDB 企业版时,会通过邮件或其他方式告知你镜像仓库地址和用户名密码。请妥善保存,并切勿分享给外部人员!

配置管理​

以下为有助于帮助配置的工具和文档:

在安装之前,你需要创建一个文件来配置 GreptimeDB 集群,请根据你的 Kubernetes 环境调整,以下是 greptimedb-cluster-values.yaml 的参考配置:

customImageRegistry:
enabled: true
# -- pull secret 名称,可自定义,需要和 `image.pullSecrets` 保持一致
secretName: greptimedb-custom-image-pull-secret
registry: <registry>
username: <username>
password: <password>

image:
registry: <registry>
repository: <repository>
tag: <tag>
pullSecrets:
- greptimedb-custom-image-pull-secret

additionalLabels: {}

initializer:
registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com
repository: greptime/greptimedb-initializer
tag: "v0.6.1"

# -- Meta 配置
meta:
# -- Meta 副本数
replicas: 2

backendStorage:
# 可选
# KV 存储配置,本配置连接到 ETCD
etcd:
endpoints: ["etcd.etcd-cluster.svc.cluster.local:2379"]

# 以下是一个使用 PostgreSQL 作为 KV 存储的示例
# postgresql:
# host: "postgres.default.svc.cluster.local"
# port: 5432
# database: "metasrv"
# table: "greptime_metakv"
# electionLockID: 1
# credentials:
# secretName: "meta-postgresql-credentials"
# username: "root"
# password: "root"

# 以下是一个使用 MySQL 作为 KV 存储的示例
# mysql:
# host: "mysql.default.svc.cluster.local"
# port: 3306
# database: "metasrv"
# table: "greptime_metakv"
# electionLockID: 1
# credentials:
# secretName: "meta-mysql-credentials"
# username: "root"
# password: "root"

rbac:
create: true

podTemplate:
serviceAccount:
create: true

main:
# Meta 资源配置
resources:
requests:
cpu: '2'
memory: 4Gi
limits:
cpu: '2'
memory: 4Gi
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app.greptime.io/component: greptimedb-meta
topologyKey: kubernetes.io/hostname
weight: 1

# -- Datanode 配置
datanode:
# -- Datanode 副本数量
replicas: 3

# -- Datanode 配置
configData: |-
[[region_engine]]
[region_engine.mito]
write_cache_size = "20G"
write_cache_ttl = "7d"

podTemplate:
# serviceAccount:
# # 是否创建 service account
# create: false
# # 添加 service account 注释
# annotations: {}

main:
# -- Datanode 资源设置
resources:
requests:
cpu: '8'
memory: 16Gi
limits:
cpu: '8'
memory: 16Gi
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app.greptime.io/component: greptimedb-datanode
topologyKey: kubernetes.io/hostname
weight: 1
# -- Datanode 本地磁盘配置
storage:
storageClassName: null
# -- 本地磁盘大小
storageSize: 100Gi
# -- Storage retain policy for datanode persistent volume
storageRetainPolicy: Retain

# -- Frontend 配置
frontend:
# -- Frontend 副本数
replicas: 3

podTemplate:
main:
# Frontend 资源配置
resources:
requests:
cpu: '8'
memory: 16Gi
limits:
cpu: '8'
memory: 16Gi
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- podAffinityTerm:
labelSelector:
matchLabels:
app.greptime.io/component: greptimedb-frontend
topologyKey: kubernetes.io/hostname
weight: 1

# -- Flownode 配置
flownode:
# -- 是否部署 flownode
enabled: false
# -- Flownode 副本数
replicas: 1

podTemplate:
main:
resources:
requests:
cpu: '8'
memory: 16Gi
limits:
cpu: '8'
memory: 16Gi

# -- 数据库自监控配置
monitoring:
# -- 打开自监控
enabled: true

# -- 监控数据的默认保留时间
ttl: 30d

standalone:
base:
# serviceAccountName: "greptimedb-datanode"
imagePullSecrets:
- name: "greptimedb-custom-image-pull-secret"
main:
# 自监控资源配置
resources:
requests:
cpu: '4'
memory: 8Gi
limits:
cpu: '4'
memory: 8Gi
# 自监控 standalone 存储位置,可按需打开存放至对象存储
# objectStorage:
# cache:
# cacheCapacity: "50GiB"
# s3:
# secretName: "storage-credentials"
# bucket: "greptimedb-bucket"
# region: "ap-southeast-1"
# root: "greptimedb-monitor-data"
# endpoint: "http://minio.minio:9000"
# 自监控本地磁盘大小
datanodeStorage:
fs:
storageClassName: null
storageSize: 100Gi
# sidecar vector 配置
vector:
registry: greptime-registry.cn-hangzhou.cr.aliyuncs.com
repository: timberio/vector
tag: "0.49.0-debian"
# sidecar vector 资源配置
resources:
requests:
cpu: '1'
memory: "1Gi"
limits:
cpu: '1'
memory: "1Gi"

# 对象存储相关配置,按需打开
# 使用 MinIO
# objectStorage:
# cache:
# cacheCapacity: "50GiB"
# s3:
# bucket: "greptimedb-bucket"
# region: "ap-southeast-1"
# root: "greptimedb-data"
# endpoint: "http://minio.minio:9000"

# 打开企业版用户和权限配置
auth:
enabled: true
useBuiltIn: true
mountPath: "/etc/greptimedb/auth"
fileName: "passwd"
users:
# 默认的 admin 用户名,按需修改
- username: "superuser"
# 初始化 admin 账户的密码,按需修改
password: "1fa44bbc-5ded-42bd-a3f1-c3621affce63"
permission: "admin"

# 审计日志配置(仅企业版)
# 审计日志记录在数据库上执行的操作,帮助监控用户活动、检测可疑操作并确保合规。
# 参见 https://docs.greptime.cn/enterprise/deployments-administration/monitoring/audit-logging/
auditLog:
# 启用审计日志插件。默认:false。
enabled: true

# 允许审计的来源。该选项作为过滤器使用。
# 多个来源用逗号(",")分隔。
# 可用来源:"unknown"、"http"、"grpc"、"mysql"、"postgres"。
# 特殊值 "all"(默认)表示所有来源。
sources: "all"

# 允许审计的语句类别。该选项作为过滤器使用。
# 多个类别用逗号(",")分隔。
# 可用类别:"read"、"write"、"admin"、"ddl"、"misc"。
# 特殊值 "all" 表示所有类别。默认:"ddl,admin"。
classes: "ddl,admin"

# 允许审计的语句命令。该选项作为过滤器使用。
# 多个命令用逗号(",")分隔。
# 可用命令:"promql"、"select"、"copy"、"insert"、"delete"、"create"、
# "alter"、"truncate"、"drop"、"admin"、"misc"。
# 特殊值 "all"(默认)表示所有命令。
commands: "all"

# 允许审计的对象类型。该选项作为过滤器使用。
# 多个对象类型用逗号(",")分隔。
# 可用对象类型:"database"、"table"、"view"、"flow"、"index"、"misc"、"trigger"。
# 特殊值 "all"(默认)表示所有对象类型。
objectTypes: "all"

# 最多保留的审计日志文件数量。默认:30。
maxLogFiles: 30

# Remote WAL相关配置,按需打开
# remoteWal:
# enabled: true
# kafka:
# brokerEndpoints:
# - "kafka-broker-0.kafka-broker-headless.kafka.svc.cluster.local:9092"
# - "kafka-broker-1.kafka-broker-headless.kafka.svc.cluster.local:9092"
# - "kafka-broker-2.kafka-broker-headless.kafka.svc.cluster.local:9092"

启动 GreptimeDB​

在 greptimedb 命名空间中安装 GreptimeDB 集群:

helm upgrade --install greptimedb \
--create-namespace \
oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-cluster \
-n greptimedb --values greptimedb-cluster-values.yaml

验证 GreptimeDB 安装:

kubectl get pod -n greptimedb
预期输出
NAME                                   READY   STATUS    RESTARTS   AGE
greptimedb-datanode-0 2/2 Running 0 2m33s
greptimedb-datanode-1 2/2 Running 0 2m33s
greptimedb-datanode-2 2/2 Running 0 2m33s
greptimedb-frontend-74999c79cc-pzj8w 2/2 Running 0 17s
greptimedb-frontend-74999c79cc-rm2fb 2/2 Running 0 17s
greptimedb-frontend-74999c79cc-zbtdg 2/2 Running 0 17s
greptimedb-meta-56dc894867-jpt5c 2/2 Running 0 4m29s
greptimedb-meta-56dc894867-tpw4c 2/2 Running 0 4m29s
greptimedb-meta-56dc894867-wmh1t 2/2 Running 0 4m29s
greptimedb-monitor-standalone-0 1/1 Running 0 4m42s

部署 Enterprise Dashboard​

配置管理​

在安装之前,你需要创建一个文件 dashboard-values.yaml 来配置 dashboard,以下是配置示例:

replicaCount: 1

image:
# 请咨询 Greptime 工作人员获取
repository: <repository>
tag: <tag>
pullPolicy: IfNotPresent

imagePullSecrets:
- name: greptimedb-custom-image-pull-secret

nameOverride: ""
fullnameOverride: ""

config: |
servicePort: 19095
logLevel: info
enableLicenseManager: true
enableUserAuthentication: true
backendStore:
type: sqlite
sqlite:
dataDir: /data
provisionedInstances:
- name: greptimedb
namespace: greptimedb
type: cluster
settings:
basic:
url: http://greptimedb-frontend.greptimedb.svc.cluster.local:4000
meta_url: http://greptimedb-meta.greptimedb.svc.cluster.local:4000
monitoring:
greptimedb:
url: http://greptimedb-monitor-standalone.greptimedb.svc.cluster.local:4000
license:
secret_name: greptimedb-license
secret_namespace: greptimedb

servicePort: 19095

serviceAccount:
create: true
annotations: {}
name: ""

podAnnotations: {}

podSecurityContext: {}
# fsGroup: 2000

securityContext: {}

service:
type: ClusterIP
port: 19095
annotations: {}

# dashboard 资源配置
resources:
requests:
cpu: '1'
memory: 1Gi
limits:
cpu: '1'
memory: 1Gi

nodeSelector: {}
tolerations: []
affinity: {}

安装​

helm upgrade --install greptimedb-enterprise-dashboard \
oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-enterprise-dashboard \
-n greptimedb \
--values dashboard-values.yaml

验证 Enterprise Dashboard 安装:

kubectl get pod -n greptimedb | grep enterprise-dashboard
预期输出
greptimedb-enterprise-dashboard-67f498d6f9-n89z5   1/1   Running   0   27s
kubectl get svc -n greptimedb | grep enterprise-dashboard
预期输出
greptimedb-enterprise-dashboard   ClusterIP   10.96.80.175   <none>   19095/TCP    89s

登录​

访问 dashboard service 的 19095 端口进行登录

Enterprise Dashboard Login

使用数据库部署配置中的 auth.users[0].username 和 auth.users[0].password 登录。有关更多控制台操作的参考文档。