InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案

qixiaozai · · 1467 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

# InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案 InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 集群的开源替代方案 - GitHub:[chengshiwen/influxdb-cluster](https://github.com/chengshiwen/influxdb-cluster) - Wiki 文档:[chengshiwen/influxdb-cluster/wiki](https://github.com/chengshiwen/influxdb-cluster/wiki) - 下载地址:[chengshiwen/influxdb-cluster/releases](https://github.com/chengshiwen/influxdb-cluster/releases) ## 目录 - [简介](#简介) - [特性](#特性) - [架构](#架构) - [概念](#概念) - [Docker 快速开始](#docker-快速开始) - [Kubernetes & Helm Chart](#kubernetes--helm-chart) - [安装](#安装) - [配置](#配置) - [HTTP 接口](#http-接口) - [管理指南](#管理指南) ## 简介 InfluxDB Cluster 是一个开源的 **时间序列数据库**,**没有外部依赖**。它对于记录指标、事件和执行分析很有用。 InfluxDB Cluster 启发于 [InfluxDB Enterprise](https://docs.influxdata.com/enterprise_influxdb/v1.8/)、[InfluxDB v1.8.10](https://github.com/influxdata/influxdb/tree/v1.8.10) 和 [InfluxDB v0.11.1](https://github.com/influxdata/influxdb/tree/v0.11.1),旨在替代 InfluxDB Enterprise。 InfluxDB Cluster 易于维护,可以与上游 [InfluxDB 1.x](https://github.com/influxdata/influxdb/tree/master-1.x) 保持实时更新。 ## 特性 - 内置 [HTTP API](https://docs.influxdata.com/influxdb/latest/guides/writing_data/),无需编写任何服务器端代码即可启动和运行。 - 数据可以被标记 tag,允许非常灵活的查询。 - 类似 SQL 的查询语言。 - 集群支持开箱即用,因此处理数据可以水平扩展以。**集群目前处于生产就绪状态**。 - 易于安装和管理,数据写入查询速度快。 - 旨在实时应答查询。这意味着每个数据点在到来时都会被计算索引,并且在 < 100 毫秒内返回的查询中立即可用。 ## 架构 InfluxDB Cluster 安装由两组独立的进程组成:Data 节点和 Meta 节点。集群内的通信如下所示: ![集群架构及通信](https://static.golangjob.cn/221022/d3e24421a3600e3b82e039c17eb70947.png) 网络架构图: ![网络架构图](https://static.golangjob.cn/221022/eb64126fb0fc6e23d2478b869229c462.png) Meta 节点通过 TCP 协议和 Raft 共识协议相互通信,默认都使用端口 `8089`,此端口必须在 Meta 节点之间是可访问的。默认 Meta 节点还将公开绑定到端口 `8091` 的 HTTP API,`influxd-ctl` 命令使用该 API。 Data 节点通过绑定到端口 `8088` 的 TCP 协议相互通信。Data 节点通过绑定到 `8091` 的 HTTP API 与 Meta 节点通信。这些端口必须在 Meta 节点和 Data 节点之间是可访问的。 在集群内,所有 Meta 节点都必须与所有其它 Meta 节点通信。所有 Data 节点必须与所有其它 Data 节点和所有 Meta 节点通信。 ## 概念 ### 集群 请参考: [集群 / Clustering](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/)。特别地,注意 - [数据存储位置 / Where data lives](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#where-data-lives) - [最佳服务器数量 / Optimal server counts](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#optimal-server-counts) - [在集群中写入 / Writes in a cluster](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#writes-in-a-cluster): [Shard groups](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#shard-groups), [Write consistency](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#write-consistency), [Hinted handoff](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#hinted-handoff) - [在集群中查询 / Queries in a cluster](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#queries-in-a-cluster) ### 术语 请参考: [术语 / Glossary](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/glossary/)。特别地,注意 - [副本因子 / replication factor](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/glossary/#replication-factor) ## Docker 快速开始 ### 使用 docker compose 启动集群 下载 [docker-compose.yml](https://github.com/chengshiwen/influxdb-cluster/tree/master/docker/quick/docker-compose.yml),然后通过 `docker-compose` 启动 3 个 Meta 节点和 2 个 Data 节点: ``` docker-compose up -d docker exec -it influxdb-meta-01 bash influxd-ctl add-meta influxdb-meta-01:8091 influxd-ctl add-meta influxdb-meta-02:8091 influxd-ctl add-meta influxdb-meta-03:8091 influxd-ctl add-data influxdb-data-01:8088 influxd-ctl add-data influxdb-data-02:8088 influxd-ctl show ``` 停止并移除它们,当它们不再被使用时: ``` docker-compose down -v ``` > **注**: 要持久化容器中的数据,请务必挂载所有 Meta 和 Data 节点的 `/etc/influxdb` 和 `/var/lib/influxdb` 目录。 ### 创建 database ``` curl -XPOST "http://influxdb-data-01:8086/query" --data-urlencode "q=CREATE DATABASE mydb WITH REPLICATION 2" ``` ### 写入一些数据 ``` curl -XPOST "http://influxdb-data-01:8086/write?db=mydb" \ -d 'cpu,host=server01,region=uswest load=42 1434055562000000000' curl -XPOST "http://influxdb-data-02:8086/write?db=mydb&consistency=all" \ -d 'cpu,host=server02,region=uswest load=78 1434055562000000000' curl -XPOST "http://influxdb-data-02:8086/write?db=mydb&consistency=quorum" \ -d 'cpu,host=server03,region=useast load=15.4 1434055562000000000' ``` > **注**: `consistency=[any,one,quorum,all]` 设置点的写一致性。如果没有指定,`consistency` 默认为 `one`。有关每个一致性选项的详细说明,请参阅 [写一致性 / Write consistency](https://docs.influxdata.com/enterprise_influxdb/v1.8/concepts/clustering/#write-consistency)。 > > `any`: 一旦任何节点写入成功,或者接收节点已将数据写入其 hinted handoff 队列,就立即向客户端返回成功。 > > `one`: 一旦任何节点写入成功,则立即向客户端返回成功,如果只是写入到 hinted handoff 队列中则不会返回。 > > `quorum`: 当大多数节点(大于副本因子半数)返回成功时返回成功。此选项仅在副本因子大于 2 时才有用,否则等效于 `all`。 > > `all`: 仅当所有节点都返回成功时才返回成功。 ### 查询数据 ``` curl -G "http://influxdb-data-02:8086/query?pretty=true" --data-urlencode "db=mydb" \ --data-urlencode "q=SELECT * FROM cpu WHERE host='server01' AND time < now() - 1d" ``` ### 分析数据 ``` curl -G "http://influxdb-data-02:8086/query?pretty=true" --data-urlencode "db=mydb" \ --data-urlencode "q=SELECT mean(load) FROM cpu WHERE region='uswest'" ``` ## Kubernetes & Helm Chart 访问:https://github.com/influxtsdb/helm-charts/tree/master/charts/influxdb-cluster 下载 InfluxDB Cluster Helm chart,执行: ``` helm install influxdb-cluster ./influxdb-cluster ``` 将会启动 1 个名为 influxdb-cluster 的 release。 > **注**: 要持久化容器中的数据,请务必挂载所有 Meta 和 Data 节点的 `/var/lib/influxdb` 目录至 PVCs。 ## 安装 我们建议使用 [预构建版本](https://github.com/chengshiwen/influxdb-cluster/releases) 中的一个来安装 InfluxDB Cluster。 完成以下步骤以在您自己的环境中安装 InfluxDB 集群: > **注**: InfluxDB Cluster 的安装与 InfluxDB Enterprise 的安装完全相同,可以参考 [安装 InfluxDB Enterprise 集群 / Install an InfluxDB Enterprise cluster](https://docs.influxdata.com/enterprise_influxdb/v1.8/install-and-deploy/production_installation/)。 ### Meta 节点设置 #### 0. 要求 生产环境安装过程设置三个 Meta 节点,每个 Meta 节点在自己的服务器上运行。 InfluxDB Cluster 需要 **至少三个 Meta 节点** 和 **奇数个 Meta 节点** 以实现高可用和冗余。 > **注 1**:InfluxDB Cluster 不建议超过三个 Meta 节点,除非您的服务器之间的通信存在长期可靠性问题。 > > **注 2**:强烈建议不要在同一服务器上部署多个 Meta 节点,因为如果该特定服务器无响应,它会产生更大的潜在故障。InfluxDB Cluster 建议在占用空间相对较小的服务器上部署 Meta 节点。 > > **注 3**:要使用单个 Meta 节点启动集群,请在启动单个 Meta 节点时传递 `-single-server` 标志。 > > 假设有三台服务器:`influxdb-meta-01`, `influxdb-meta-02` 和 `influxdb-meta-03`。 **端口**: Meta 节点通过端口 `8088`、`8089` 和 `8091` 进行通信。 #### 1. 为每个服务器添加适当的 DNS 条目 > **注**: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。 确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。 > **验证步骤**: > > 在继续安装之前,请在每台服务器上验证其他服务器是否可解析。下面是一组使用 `ping` 的 shell 命令示例: > ``` > ping -qc 1 influxdb-meta-01 > ping -qc 1 influxdb-meta-02 > ping -qc 1 influxdb-meta-03 > ``` #### 2. 编辑配置文件 在 `/etc/influxdb/influxdb-meta.conf`: * 取消注释 `hostname` 并设置为 Meta 节点的完整主机名。 ``` hostname="influxdb-meta-0x" ``` > **注意**: 如果您只想使用 IP 地址而不是主机名,必须将 `hostname` 设置为 IP 地址。 #### 3. 启动 Meta 服务 分别在服务器 `influxdb-meta-01`、`influxdb-meta-02` 和 `influxdb-meta-03` 上启动 Meta 服务 ``` /usr/bin/influxd-meta -config /etc/influxdb/influxdb-meta.conf ``` #### 4. 将 Meta 节点加入集群 在一个且仅一个 Meta 节点上,加入所有 Meta 节点,包括它自己。在我们的示例中,从 `influxdb-meta-01` 运行: ``` influxd-ctl add-meta influxdb-meta-01:8091 influxd-ctl add-meta influxdb-meta-02:8091 influxd-ctl add-meta influxdb-meta-03:8091 ``` 预期的输出是: ``` Added meta node x at influxdb-meta-0x:8091 ``` > **验证步骤**: > > 在任何 Meta 节点上发出以下命令: > ``` > influxd-ctl show > ``` > 预期的输出是: > ``` > Data Nodes > ========== > ID TCP Address Version > > Meta Nodes > ========== > ID TCP Address Version > 1 influxdb-meta-01:8091 1.8.10-c1.1.1 > 2 influxdb-meta-02:8091 1.8.10-c1.1.1 > 3 influxdb-meta-03:8091 1.8.10-c1.1.1 > ``` ### Data 节点设置 #### 0. 要求 生产环境安装过程设置两个 Data 节点,每个 Data 节点在自己的服务器上运行。 InfluxDB Cluster 需要 **至少两个 Data 节点** 才能实现高可用性和冗余。 > **注 1**:没有要求每个 Data 节点都运行在自己的服务器上。但是,最佳实践是将每个 Data 节点部署在专用服务器上。 > > **注 2**:InfluxDB Cluster 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口 `8086`([HTTP API](https://docs.influxdata.com/influxdb/v1.8/tools/api/) 的默认端口)。 > > 假设有两台服务器:`influxdb-data-01` 和 `influxdb-data-02`。 **端口**: Data 节点通过端口 `8088`、`8089` 和 `8091` 进行通信。 #### 1. 为每个服务器添加适当的 DNS 条目 > **注**: 如果您只想使用 IP 地址而不是主机名,请跳过当前步骤并转到步骤 2。 确保将服务器的主机名和 IP 地址添加到网络的 DNS 环境中。 > **验证步骤**: > > 在继续安装之前,请在每台服务器上验证其他服务器是否可解析。下面是一组使用 `ping` 的 shell 命令示例: > ``` > ping -qc 1 influxdb-data-01 > ping -qc 1 influxdb-data-02 > ``` #### 2. 编辑配置文件 在 `/etc/influxdb/influxdb.conf`: * 取消注释 `hostname` 并设置为 Data 节点的完整主机名。 ``` hostname="influxdb-data-0x" ``` > **注意**: 如果您只想使用 IP 地址而不是主机名,必须将 `hostname` 设置为 IP 地址。 #### 3. 启动 Data 服务 分别在服务器 `influxdb-data-01` 和 `influxdb-data-02` 上启动 Data 服务 ``` /usr/bin/influxd -config /etc/influxdb/influxdb.conf ``` > **注**: Data 节点在未被加入集群之前,出现 `Failed to create storage`,`failed to store statistics` 或 `meta service unavailable` 日志是正常情况。 #### 4. 将 Data 节点加入集群 > 只有在添加全新节点时才应将 Data 节点加入集群,无论是在集群的初始创建期间还是在增加 Data 节点数量时。 > 如果您要使用 `influxd-ctl update-data` 替换现有 Data 节点,请跳过本步骤的其余部分。 对要加入集群的每个 Data 节点运行一次且仅一次的 `add-data` 命令: ``` influxd-ctl add-data influxdb-data-01:8088 influxd-ctl add-data influxdb-data-02:8088 ``` 预期的输出是: ``` Added data node y at influxdb-data-0x:8088 ``` > **验证步骤**: > > 在任何 Meta 节点上发出以下命令: > ``` > influxd-ctl show > ``` > 预期的输出是: > ``` > Data Nodes > ========== > ID TCP Address Version > 4 influxdb-data-01:8088 1.8.10-c1.1.1 > 5 influxdb-data-02:8088 1.8.10-c1.1.1 > > Meta Nodes > ========== > ID TCP Address Version > 1 influxdb-meta-01:8091 1.8.10-c1.1.1 > 2 influxdb-meta-02:8091 1.8.10-c1.1.1 > 3 influxdb-meta-03:8091 1.8.10-c1.1.1 > ``` ## 配置 ### 配置集群 请参考 - [配置 InfluxDB 集群](https://github.com/chengshiwen/influxdb-cluster/wiki/Configure-Clusters) - [配置 InfluxDB 集群 Data 节点](https://github.com/chengshiwen/influxdb-cluster/wiki/Configure-Data-Nodes) - [配置 InfluxDB 集群 Meta 节点](https://github.com/chengshiwen/influxdb-cluster/wiki/Configure-Meta-Nodes) > **注**: InfluxDB Cluster 的配置项几乎和 InfluxDB Enterprise 完全一样, > 唯一的差别是,InfluxDB Cluster 使用 `[coordinator]` 配置项, 而 InfluxDB Enterprise 使用 `[cluster]`。 ### 尚未支持的配置项 相比于 InfluxDB Enterprise,下列配置项目前尚未支持,未来将逐渐得到支持。 Data 节点: ``` [coordinator] shard-reader-timeout [monitor] remote-collect-interval [hinted-handoff] retry-concurrency batch-size [anti-entropy] max-fetch max-sync auto-repair-missing ``` Meta 节点: ``` [meta] ldap-allowed consensus-timeout ``` ## HTTP 接口 ### Data 节点 HTTP 接口 #### /query HTTP 接口 请参考: [/query HTTP endpoint](https://docs.influxdata.com/influxdb/v1.8/tools/api/#query-http-endpoint) #### /write HTTP 接口 请参考: [/write HTTP endpoint](https://docs.influxdata.com/influxdb/v1.8/tools/api/#write-http-endpoint) #### /api/v2/query HTTP 接口 请参考: [/api/v2/query/ HTTP endpoint](https://docs.influxdata.com/influxdb/v1.8/tools/api/#apiv2query-http-endpoint) #### /api/v2/write HTTP 接口 请参考: [/api/v2/write/ HTTP endpoint](https://docs.influxdata.com/influxdb/v1.8/tools/api/#apiv2write-http-endpoint) ## 管理指南 ### 迁移 InfluxDB OSS 到 InfluxDB Cluster 请参考: [迁移 InfluxDB OSS 到 InfluxDB Cluster / Migrate InfluxDB OSS instances to InfluxDB Cluster clusters](https://docs.influxdata.com/enterprise_influxdb/v1.8/guides/migration/) ### 更换集群节点 请参考: [更换集群节点 / Replace InfluxDB Cluster cluster meta nodes and data nodes](https://docs.influxdata.com/enterprise_influxdb/v1.8/guides/replacing-nodes/) ### 重新平衡集群 请参考: [重新平衡集群 / Rebalance InfluxDB Cluster clusters](https://docs.influxdata.com/enterprise_influxdb/v1.8/guides/rebalance/) ### 硬件数量评估指南 请参考: [硬件数量评估指南 / Hardware sizing guidelines](https://docs.influxdata.com/enterprise_influxdb/v1.8/guides/hardware_sizing/) ### 开启 HTTPS 请参考: [开启 HTTPS / Enable HTTPS for InfluxDB Cluster](https://docs.influxdata.com/enterprise_influxdb/v1.8/guides/https_setup/) ### 管理安全 请参考: [管理安全 / Manage security in InfluxDB Cluster](https://docs.influxdata.com/enterprise_influxdb/v1.8/administration/security/) ### 管理集群 > **注意:有限支持**,`influxd-ctl` 已经支持 13 个命令,剩余 6 个命令 `backup`, `restore`, `copy-shard-status`, `kill-copy-shard`, `entropy`, `ldap` 尚不支持 请参考: [管理集群](https://github.com/chengshiwen/influxdb-cluster/wiki/Manage-Clusters) ### 使用反熵(Anti-entropy)服务 > **注意:尚不支持** 请参考: [使用反熵(Anti-entropy)服务 / Use Anti-Entropy service in InfluxDB Cluster](https://docs.influxdata.com/enterprise_influxdb/v1.8/administration/anti-entropy/) ### 备份和还原 > **注意:有限支持**,备份和还原 (`influxd-ctl backup`, `influxd-ctl restore`) 尚不支持 请参考: [备份和还原 / Back up and restore InfluxDB Cluster clusters](https://docs.influxdata.com/enterprise_influxdb/v1.8/administration/backup-and-restore/) > **注意:导出和导入已支持** (`influx_inspect export`, `influx -import`) 请参考: [导出和导入数据 / Exporting and importing data](https://docs.influxdata.com/enterprise_influxdb/v1.8/administration/backup-and-restore/#exporting-and-importing-data) ### 日志和跟踪 请参考: [日志和跟踪 / Log and trace InfluxDB Cluster operations](https://docs.influxdata.com/enterprise_influxdb/v1.8/administration/logs/) ### 重命名主机 请参考: [重命名主机 / Rename hosts in InfluxDB Cluster](https://docs.influxdata.com/enterprise_influxdb/v1.8/administration/renaming/)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1467 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传