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