InfluxDB 集群 - 高可用性和可扩展性
作者:Paul Dix / 用例, 产品, 开发者
2020 年 9 月 10 日
导航至
InfluxDB 集群是 InfluxData 商业产品的一部分,以托管和自 управля式 两种方式提供。
架构概述
InfluxDB Enterprise 安装(撰写本文时最新的版本是 v.1.8.2)允许集群化的 InfluxDB 安装,它由两个独立的软件进程组成:数据节点 和 元数据节点。要运行 InfluxDB 集群,元数据节点和数据节点都是必需的。
元数据节点公开了 influxd-ctl
命令使用的 HTTP API。系统操作员使用此命令对集群执行操作,例如添加和删除服务器、在集群周围移动分片(大型数据块)以及其他管理任务。它们通过 TCP Protobuf 协议和 Raft 共识组相互通信。
数据节点通过 TCP 和 Protobuf 协议相互通信。在集群中,所有元数据节点必须与所有其他元数据节点通信。所有数据节点必须与所有其他数据节点和所有元数据节点通信。
元数据节点保持描述集群的元数据的一致视图。元集群使用 Raft 的 HashiCorp 实现 作为底层共识协议。这与 Consul 中使用的实现相同。元数据节点可以在非常小型的虚拟机 (VM) 上运行(在大多数情况下,t2-micro 就足够了)。
数据节点通过 TCP 上的 Protobuf 协议复制数据并相互查询。有关复制和查询的详细信息,请参阅文档。数据节点负责处理所有写入和查询。大小调整取决于您的模式以及您的写入和查询负载。
最佳服务器计数
为了获得最佳的 InfluxDB 集群,您需要选择要配置和连接的元数据节点和数据节点的数量。您可以将 InfluxDB Enterprise 视为相互通信的两个独立集群:一个元数据节点集群和一个数据节点集群。
元数据节点:神奇数字是 3!
元数据节点的数量取决于它们需要能够处理的元数据节点故障的数量,而数据节点的数量则根据您的存储和查询需求进行扩展。
共识协议需要法定人数才能执行任何操作,因此元数据节点的数量应始终为奇数。对于几乎所有用例,3 个元数据节点是正确的数量,这样的集群即使在丢失 1 个元数据节点的情况下也能正常运行。丢失第二个节点意味着剩余的两个节点只能从可能的四个节点中获得两票,这无法达成多数共识。由于 3 个元数据节点的集群也可以在丢失单个元数据节点的情况下幸存下来,因此添加第四个节点不会实现额外的冗余,只会使集群维护复杂化。在更高数量的元数据节点下,通信开销呈指数级增长,因此 5 个元数据节点的配置可能是您想要拥有的最大数量。
数据节点:基于可扩展性要求
数据节点保存实际的时间序列数据。运行的数据节点的最少数量为 1 个,并且可以从那里向上扩展。您始终希望运行的数据节点数量可以被您的复制因子整除。例如,如果您的复制因子为 2,您将希望运行的节点计数为 2、4、6、8、10 等。
作为经验法则:InfluxDB 集群应具有 3 个元数据节点和偶数个数据节点。
InfluxDB 集群以及数据存储位置
元数据节点和数据节点各自负责数据库的不同部分。
元数据节点:元数据节点保存以下所有元数据
- 集群中的所有节点及其角色
- 集群中存在的所有数据库和保留策略
- 所有分片和分片组,以及它们存在的节点
- 集群用户及其权限
- 所有连续查询
数据节点:数据节点保存所有原始时间序列数据和元数据,包括
- 测量值
- 标签键和值
- 字段键和值
后续步骤
- 通过启动 InfluxDB Cloud 或 InfluxDB Enterprise 试用版来试用我们的 InfluxDB 集群解决方案。
- 阅读有关集群的文档
- 了解 InfluxDB Cloud 和 InfluxDB Enterprise 的功能和用法。