跳到主要内容
版本:nightly

部署 GreptimeDB 集群

本指南将引导您在 Kubernetes 环境中部署 GreptimeDB 集群。在继续之前,请确保您的集群已安装 GreptimeDB Operator。我们将涵盖从设置 etcd 集群(可选)到配置选项和连接数据库的所有步骤。

前提条件

  • Helm(使用与 Kubernetes API 版本匹配的版本)
  • GreptimeDB Operator(假设本地主机已安装匹配版本的 GreptimeDB Operator)

创建 etcd 集群

要安装 etcd 集群,运行以下 helm install 命令。该命令还为安装创建了一个名为 etcd-cluster 的专用命名空间。

helm install etcd oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/etcd \
--set image.registry="greptime-registry.cn-hangzhou.cr.aliyuncs.com" \
--set image.repository="bitnami/etcd" \
--set image.tag="3.5.11" \
--set replicaCount=3 \
--set auth.rbac.create=false \
--set auth.rbac.token.enabled=false \
--create-namespace \
-n etcd-cluster

验证 etcd 集群的安装

安装完成后,通过列出 etcd-cluster 命名空间中的 Pod 来验证 etcd 集群的状态:

kubectl get pods -n etcd-cluster

您应该看到类似以下的输出:

NAME     READY   STATUS    RESTARTS     AGE
etcd-0 1/1 Running 0 80s
etcd-1 1/1 Running 0 80s
etcd-2 1/1 Running 0 80s

部署最小化的 GreptimeDB 集群

接下来,部署一个最小化的 GreptimeDB 集群。此部署将依赖 etcd 集群进行协调。如果您已有一个正在运行的 etcd 集群,可以使用其端点。如果您按照上面的步骤操作,则使用 etcd.etcd-cluster.svc.cluster.local:2379 作为 etcd 端点。

运行此命令安装 GreptimeDB 集群:

helm install greptimedb oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-cluster \
--set image.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set initializer.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set meta.etcdEndpoints=etcd.etcd-cluster.svc.cluster.local:2379 \
--create-namespace \
-n greptimedb-cluster

验证 GreptimeDB 集群的安装

检查 greptimedb-cluster 命名空间中的所有 Pod 是否正常运行:

kubectl get pods -n greptimedb-cluster

您应该看到类似以下的输出:

NAME                                      READY   STATUS    RESTARTS   AGE
greptimedb-datanode-0 1/1 Running 0 30s
greptimedb-datanode-2 1/1 Running 0 30s
greptimedb-datanode-1 1/1 Running 0 30s
greptimedb-frontend-7476dcf45f-tw7mx 1/1 Running 0 16s
greptimedb-meta-689cb867cd-cwsr5 1/1 Running 0 31s

高级配置选项

使用对象存储作为后端存储

要将数据存储在对象存储中(例如,存储到 Amazon S3),在 Helm 命令中添加以下配置:

helm install greptimedb oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-cluster \
--set image.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set initializer.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set meta.etcdEndpoints=etcd.etcd-cluster.svc.cluster.local:2379 \
--set objectStorage.s3.bucket=<your-bucket> \
--set objectStorage.s3.region=<region-of-bucket> \
--set objectStorage.s3.root=<root-directory-of-data> \
--set objectStorage.credentials.accessKeyId=<your-access-key-id> \
--set objectStorage.credentials.secretAccessKey=<your-secret-access-key> \
greptime/greptimedb-cluster \
--create-namespace \
-n greptimedb-cluster

使用 RemoteWAL 并启用 Region 故障切换

如果您希望启用 RemoteWAL 和 region 故障切换,请遵循以下配置。您需要一个正在运行的 Kafka 集群,并可以使用其端点,例如 kafka.kafka-cluster.svc.cluster.local:9092

helm install greptimedb oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-cluster \
--set image.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set initializer.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set meta.etcdEndpoints=etcd.etcd-cluster.svc.cluster.local:2379 \
--set meta.enableRegionFailover=true \
--set objectStorage.s3.bucket=<your-bucket> \
--set objectStorage.s3.region=<region-of-bucket> \
--set objectStorage.s3.root=<root-directory-of-data> \
--set objectStorage.credentials.accessKeyId=<your-access-key-id> \
--set objectStorage.credentials.secretAccessKey=<your-secret-access-key> \
--set remoteWal.enable=true \
--set remoteWal.kafka.brokerEndpoints[0]=kafka.kafka-cluster.svc.cluster.local:9092 \
greptime/greptimedb-cluster \
--create-namespace \
-n greptimedb-cluster

鉴权认证

要为 GreptimeDB 集群启用鉴权认证,您可以在安装期间通过 auth 设置配置用户凭据。以下是示例:

helm install greptimedb oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-cluster \
--set image.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set initializer.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set meta.etcdEndpoints=etcd.etcd-cluster.svc.cluster.local:2379 \
--set auth.enabled=true \
--set auth.users[0].username=admin \
--set auth.users[0].password=admin \
greptime/greptimedb-cluster \
--create-namespace \
-n greptimedb-cluster

资源用量与限制

要控制资源分配(CPU 和内存),请修改 Helm 安装命令,如下所示:

helm install greptimedb oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-cluster \
--set image.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set initializer.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set meta.etcdEndpoints=etcd.etcd-cluster.svc.cluster.local:2379 \
--set meta.podTemplate.main.resources.requests.cpu=<cpu-resource> \
--set meta.podTemplate.main.resources.requests.memory=<mem-resource> \
--set datanode.podTemplate.main.resources.requests.cpu=<cpu-resource> \
--set datanode.podTemplate.main.resources.requests.memory=<mem-resource> \
--set frontend.podTemplate.main.resources.requests.cpu=<cpu-resource> \
--set frontend.podTemplate.main.resources.requests.memory=<mem-resource> \
greptime/greptimedb-cluster \
--create-namespace \
-n greptimedb-cluster

使用 values.yaml 进行复杂配置

对于更复杂的配置,首先下载默认的 values.yaml 文件并在本地修改。

curl -sLo values.yaml https://raw.githubusercontent.com/GreptimeTeam/helm-charts/main/charts/greptimedb-cluster/values.yaml

您可以通过在 configData 字段中指定自定义设置来配置各个组件。更多详细信息,请参阅配置文档。

以下是如何修改 values.yaml 文件设置的示例。此示例展示了如何配置 GreptimeDB 中的特定组件。它将 metasrv 的 selector 类型设置为 round_robin,通过将 datanode 的 Mito 引擎的 global_write_buffer_size 设置为 4GB 来调整配置,并将 frontend 的 meta 客户端 ddl_timeout 设置为 60s

meta:
configData: |-
selector = "round_robin"
datanode:
configData: |-
[[region_engine]]
[region_engine.mito]
global_write_buffer_size = "4GB"
frontend:
configData: |-
[meta_client]
ddl_timeout = "60s"

然后,使用修改后的 values.yaml 文件进行部署:

helm install greptimedb oci://greptime-registry.cn-hangzhou.cr.aliyuncs.com/charts/greptimedb-cluster \
--set image.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--set initializer.registry=greptime-registry.cn-hangzhou.cr.aliyuncs.com \
--values values.yaml

有关通过 Helm 配置的详细值列表,请参阅配置value配置。

连接到集群

安装完成后,使用 kubectl port-forward 命令暴露服务端口,便可以本地连接到集群:

# 您可以使用 MySQL 或 PostgreSQL 客户端连接集群,例如: 'mysql -h 127.0.0.1 -P 4002'。
# HTTP 端口:4000
# gRPC 端口:4001
# MySQL 端口:4002
# PostgreSQL 端口:4003
kubectl port-forward -n greptimedb-cluster svc/greptimedb-frontend 4000:4000 4001:4001 4002:4002 4003:4003 > connections.out &

然后就可以使用 MySQL 客户端来连接到集群