GreptimeDB 企业版部署指南
环境准备
- Docker >= v23.0.0
- kubectl >= v1.21.0
- Helm >= v3.0.0
- kubernetes >= 1.21
前言
GreptimeDB 企业版部署包括以下组件:
- GreptimeDB Operator:用于和 Kubernetes 集群交互。
- KV 存储:用于存储数据库元数据信息(支持云服务或自建),推荐使用云服务中的 RDS,例如 AWS RDS PostgreSQL。可选以下存储设施:
- PostgreSQL
- MySQL
- ETCD
- GreptimeDB 数据库集群,包含以下组件:
- Meta:数据库集群元数据信息管理组件
- Datanode:数据节点
- Frontend:入口和协议解析节点
- Flownode(可选): 面向持续聚合 workload 的 Flow 计算节点
- Vector Sidecar:指标采集 agent
- GreptimeDB Standalone: 集群自监控存储节点
- GreptimeDB Enterprise Dashboard
- Kafka(可选): 为 GreptimeDB 提供 Remote WAL
- MinIO(可选): 为 GreptimeDB 提供对象存储,推荐使用云服务中的对象存储(例如:AWS S3)
其中打*的为可选安装:
| Pod 组件名称 | 副本数量 | CPU (Core) | 内存 (GB) | 磁盘 (Gi) |
|---|---|---|---|---|
ETCD* | 3 | 2 | 4 | 10 |
| GreptimeDB Operator | 1 | 1 | 1 | |
| Meta | ||||
| Datanode | ||||
| Frontend | ||||
Flownode* | ||||
| Vector Sidecar | ||||
| GreptimeDB Standalone | 1 | 4 | 8 | |
| GreptimeDB Enterprise Dashboard | 1 | |||
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 端口进行登录

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