Documentation

扩展您的InfluxDB集群

InfluxDB 集群让您可以根据特定工作负载,垂直和水平地扩展集群的各个组件。 使用在您的 influxdb.yml 中定义的 AppInstance 资源来管理 每个组件可用的资源。

扩展策略

以下缩放策略可以应用于您的 InfluxDB 集群中的组件。

垂直扩展

垂直扩展(也称为“向上扩展”)涉及增加可用于进程或系统的资源(例如RAM或CPU)。垂直扩展通常用于处理需要更多处理能力的资源密集型任务。

水平扩展

横向扩展(也称为“扩展”)涉及增加可用于执行特定任务的节点或进程的数量。横向扩展通常用于增加系统可以管理的工作负载或吞吐量,但也提供额外的冗余和故障转移。

在您的集群中缩放组件

通过修改您AppInstance资源中的属性,可以扩展您的InfluxDB集群的以下组件:

  • 摄取者
  • 查询器
  • 压实机
  • 路由器
  • 垃圾收集器

扩展您的目录和对象存储

您的 InfluxDB CatalogObject store 在您的 AppInstance 资源之外管理。这些组件的扩展机制取决于所使用的技术和基础提供者。

在您的 influxdb.yml 中定义的 AppInstance 资源中使用 spec.package.spec.resources 属性来定义每个 pod 的系统资源最小值和限制,以及每个组件的副本数。requests 是 Kubernetes 调度器应该为 pod 保留的最小值。limits 是 pod 应该被允许使用的最大值。

您的 AppInstance 资源可以包括以下属性,以定义每个 pod 的资源最小值和限制以及每个组件的副本:

  • spec.package.spec.resources
    • ingester
      • requests
        • cpu: 指定给ingester的最小CPU资源单位
        • memory: 指定给ingester的最小内存资源单位
        • replicas: 提供的ingester副本数量
      • limits
        • cpu: 指定给ingester的最大CPU资源单位
        • memory: 指定给ingester的最大内存资源单位
    • compactor
      • requests
        • cpu: 指定给compactor的最小CPU资源单位
        • memory: 指定给compactor的最小内存资源单位
        • replicas: 提供的compactor副本数量
      • limits
        • cpu: 指定给compactor的最大CPU资源单位
        • memory: 指定给compactor的最大内存资源单位
    • querier
      • requests
        • cpu: 指定给querier的最小CPU资源单位
        • memory: 指定给querier的最小内存资源单位
        • replicas: 提供的querier副本数量
      • limits
        • cpu: 指定给querier的最大CPU资源单位
        • memory: 指定给querier的最大内存资源单位
    • router
      • requests
        • cpu: 指定给router的最小CPU资源单位
        • memory: 指定给router的最小内存资源单位
        • replicas: 提供的router副本数量
      • limits
        • cpu: 指定给router的最大CPU资源单位
        • memory: 指定给router的最大内存资源单位
    • garbage-collector
      • requests
        • cpu: 指定给垃圾收集器的最小CPU资源单位
        • memory: 指定给垃圾收集器的最小内存资源单位
      • limits
        • cpu: 指定给垃圾收集器的最大CPU资源单位
        • memory: 指定给垃圾收集器的最大内存资源单位

查看带有资源请求和限制的示例 AppInstance

在您的 values.yaml 中使用 resources 属性来定义每个 pod 的系统资源最低值和限制以及每个组件的副本数量。requests 是 Kubernetes 调度器应该为 pod 保留的最小值。limits 是 pod 允许使用的最大值。

使用以下属性来定义每个pod的资源最小值和限制以及每个组件的副本数量:

  • resources
    • ingester
      • requests
        • cpu: 分配给ingester的最小CPU资源单位
        • memory: 分配给ingester的最小内存资源单位
        • replicas: 需要提供的ingester副本数量
      • limits
        • cpu: 分配给ingester的最大CPU资源单位
        • memory: 分配给ingester的最大内存资源单位
    • compactor
      • requests
        • cpu: 分配给compactor的最小CPU资源单位
        • memory: 分配给compactor的最小内存资源单位
        • replicas: 需要提供的compactor副本数量
      • limits
        • cpu: 分配给compactor的最大CPU资源单位
        • memory: 分配给compactor的最大内存资源单位
    • querier
      • requests
        • cpu: 分配给querier的最小CPU资源单位
        • memory: 分配给querier的最小内存资源单位
        • replicas: 需要提供的querier副本数量
      • limits
        • cpu: 分配给querier的最大CPU资源单位
        • memory: 分配给querier的最大内存资源单位
    • router
      • requests
        • cpu: 分配给router的最小CPU资源单位
        • memory: 分配给router的最小内存资源单位
        • replicas: 需要提供的router副本数量
      • limits
        • cpu: 分配给router的最大CPU资源单位
        • memory: 分配给router的最大内存资源单位
    • garbage-collector
      • requests
        • cpu: 分配给垃圾收集器的最小CPU资源单位
        • memory: 分配给垃圾收集器的最小内存资源单位
      • limits
        • cpu: 分配给垃圾收集器的最大CPU资源单位
        • memory: 分配给垃圾收集器的最大内存资源单位

查看示例 values.yaml 资源请求和限制

对 Pods 应用资源限制是可选的,但可以提供更好的资源隔离,并防止 Pods 使用超过预期的资源。有关信息,请参见 Kubernetes resource requests and limits

水平扩展组件

要在您的 InfluxDB 集群中水平扩展组件,请增加或减少该组件的副本数量,然后 应用更改

仅使用 AppInstance 来扩展组件副本

仅使用 AppInstance 资源来缩放组件副本。手动缩放副本可能会导致错误。

例如–水平扩展你的 Ingester:

apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      resources:
        ingester:
          requests:
            # ...
            replicas: 6
# ...
resources:
  ingester:
    requests:
      # ...
      replicas: 6

垂直缩放组件

要在您的 InfluxDB 集群中垂直扩展组件,请增加或减少分配给组件 Pod 的 CPU 和内存资源单位,并应用更改

apiVersion: kubecfg.dev/v1alpha1
kind: AppInstance
# ...
spec:
  package:
    spec:
      resources:
        ingester:
          requests:
            cpu: "500m"
            memory: "512MiB"
            # ...
          limits:
            cpu: "1000m"
            memory: "1024MiB"
# ...
resources:
  ingester:
    requests:
      cpu: "500m"
      memory: "512MiB"
      # ...
    limits:
      cpu: "1000m"
      memory: "1024MiB"

应用您的更改

在修改了 AppInstance 资源后,使用 kubectl apply 将配置更改应用到你的集群并扩展更新的组件。

kubectl apply \
  --filename myinfluxdb.yml \
  --namespace influxdb
helm upgrade \
  influxdata/influxdb3-clustered \
  -f ./values.yml \
  --namespace influxdb

整体扩展您的集群

扩展整个 InfluxDB 集群是通过扩展您的 Kubernetes 集群来完成的,并且在 InfluxDB 之外进行管理。扩展整个 Kubernetes 集群的过程取决于您所使用的 Kubernetes 提供商。您还可以使用 Kubernetes 自动扩展 根据需要自动扩展您的集群。

路由器

路由器可以进行垂直水平扩展。水平扩展增加写入吞吐量,通常是路由器最有效的扩展策略。垂直扩展(特别是增加CPU)提高了路由器以更低延迟解析传入线路协议的能力。

引入器

Ingester 可以进行 垂直水平 扩展。垂直扩展提高写入吞吐量,通常是 Ingester 最有效的扩展策略。

摄取者存储卷

摄取器使用附加的存储卷来存储 写前日志 (WAL)。 随着可用存储的增加,摄取器可以保留更大的WAL缓冲区,这 提高了查询性能并减少了对压缩器的压力。 存储速度也有助于提高查询性能。

配置附加到 Ingester pod 的存储卷在你的 AppInstance 资源的 spec.package.spec.ingesterStorage 属性中,或如果使用 Helm,则在你的 values.yamlingesterStorage 属性中。

查看示例 Ingester 存储配置

查询器

查询器可以进行垂直水平扩展。水平扩展增加查询吞吐量,以处理更多的并发查询。垂直扩展提高了查询器处理计算密集型查询的能力。

压实机

压缩器可以进行垂直水平扩展。由于压缩是一个计算密集型的过程,垂直扩展(尤其是增加可用的CPU)是压缩器最有效的扩展策略。水平扩展可以提高压缩吞吐量,但效率不如垂直扩展。

垃圾收集器

垃圾回收器可以进行 垂直 扩展。它是一个轻量级的进程,通常不需要占用许多系统资源,但如果你开始看到垃圾回收器消耗高资源,你可以垂直扩展它以应对增加的工作负载。

目录

可用于目录的扩展策略取决于用于运行目录的PostgreSQL兼容数据库。所有支持 垂直扩展。大多数支持 水平扩展 以实现冗余和故障转移。

对象存储

对象存储的可用扩展策略取决于用于运行对象存储的底层对象存储服务。大多数支持水平扩展以实现冗余、故障转移和增加容量。



Flux的未来

Flux 正在进入维护模式。您可以像现在一样继续使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源版本现已公开Alpha测试

InfluxDB 3 Open Source is now available for alpha testing, licensed under MIT or Apache 2 licensing.

我们将发布两个产品作为测试版的一部分。

InfluxDB 3 核心,是我们新的开源产品。 它是一个用于时间序列和事件数据的实时数据引擎。 InfluxDB 3 企业版是建立在核心基础之上的商业版本,增加了历史查询能力、读取副本、高可用性、可扩展性和细粒度安全性。

有关如何开始的更多信息,请查看: