文档文档

扩展您的 InfluxDB 集群

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

扩展策略

以下扩展策略可以应用于 InfluxDB 集群中的组件。

垂直扩展

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

水平扩展

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

扩展集群中的组件

InfluxDB 集群的以下组件通过修改 AppInstance 资源中的属性进行扩展

  • Ingester(数据写入器)
  • Querier(查询器)
  • Compactor(压缩器)
  • Router(路由器)
  • Garbage collector(垃圾回收器)

扩展您的 Catalog(目录)和 Object store(对象存储)

您的 InfluxDB Catalog(目录)Object 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: 分配给 Garbage collector(垃圾回收器)的最小 CPU 资源单位
        • memory: 分配给 Garbage collector(垃圾回收器)的最小内存资源单位
      • limits
        • cpu: 分配给 Garbage collector(垃圾回收器)的最大 CPU 资源单位
        • memory: 分配给 Garbage collector(垃圾回收器)的最大内存资源单位

查看带有资源请求和限制的 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: 分配给 Garbage collector(垃圾回收器)的最小 CPU 资源单位
        • memory: 分配给 Garbage collector(垃圾回收器)的最小内存资源单位
      • limits
        • cpu: 分配给 Garbage collector(垃圾回收器)的最大 CPU 资源单位
        • memory: 分配给 Garbage collector(垃圾回收器)的最大内存资源单位

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

将资源限制应用于 pod 是可选的,但可以提供更好的资源隔离,并防止 pod 使用超出预期的资源。有关信息,请参阅 Kubernetes 资源请求和限制

水平扩展组件

要水平扩展 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 自动扩展 来根据需要自动扩展您的集群。

Router(路由器)

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

Ingester(数据写入器)

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

Ingester(数据写入器)存储卷

Ingester(数据写入器)使用附加的存储卷来存储 Write-Ahead Log (WAL)(预写式日志)。通过提供更多可用存储空间,Ingester(数据写入器)可以保留更大的 WAL 缓冲区,从而提高查询性能并减少 Compactor(压缩器)的压力。存储速度也有助于提高查询性能。

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

查看 Ingester(数据写入器)存储配置示例

Querier(查询器)

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

Compactor(压缩器)

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

Garbage collector(垃圾回收器)

Garbage collector(垃圾回收器)可以进行垂直扩展。它是一个轻量级进程,通常不需要太多系统资源,但是如果您开始看到垃圾回收器上的资源消耗很高,则可以对其进行垂直扩展以解决增加的工作负载。

Catalog(目录)

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

Object store(对象存储)

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


此页是否对您有帮助?

感谢您的反馈!


Flux 的未来

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

阅读更多

InfluxDB 3 开源版本现已公开发布 Alpha 版

InfluxDB 3 开源版本现已可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 Alpha 版本的一部分。

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

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