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

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

InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 的开源替代方案

目录

简介

InfluxDB Cluster 是一个开源的 时间序列数据库没有外部依赖。它对于记录指标、事件和执行分析很有用。

InfluxDB Cluster 启发于 InfluxDB EnterpriseInfluxDB v1.8.10InfluxDB v0.11.1,旨在替代 InfluxDB Enterprise。

InfluxDB Cluster 易于维护,可以与上游 InfluxDB 1.x 保持实时更新。

特性

  • 内置 HTTP API,无需编写任何服务器端代码即可启动和运行。
  • 数据可以被标记 tag,允许非常灵活的查询。
  • 类似 SQL 的查询语言。
  • 集群支持开箱即用,因此处理数据可以水平扩展以。集群目前处于生产就绪状态
  • 易于安装和管理,数据写入查询速度快。
  • 旨在实时应答查询。这意味着每个数据点在到来时都会被计算索引,并且在 < 100 毫秒内返回的查询中立即可用。

架构

InfluxDB Cluster 安装由两组独立的进程组成:Data 节点和 Meta 节点。集群内的通信如下所示:

集群架构及通信

网络架构图:

网络架构图

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。特别地,注意

术语

请参考: 术语 / Glossary。特别地,注意

Docker 快速开始

使用 docker compose 启动集群

下载 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

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。

安装

我们建议使用 预构建版本 中的一个来安装 InfluxDB Cluster。

完成以下步骤以在您自己的环境中安装 InfluxDB 集群:

: InfluxDB Cluster 的安装与 InfluxDB Enterprise 的安装完全相同,可以参考 安装 InfluxDB Enterprise 集群 / Install an InfluxDB Enterprise cluster

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-02influxdb-meta-03

端口: Meta 节点通过端口 808880898091 进行通信。

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-01influxdb-meta-02influxdb-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.11-c1.2.0
2   influxdb-meta-02:8091  1.8.11-c1.2.0
3   influxdb-meta-03:8091  1.8.11-c1.2.0

Data 节点设置

0. 要求

生产环境安装过程设置两个 Data 节点,每个 Data 节点在自己的服务器上运行。

InfluxDB Cluster 需要 至少两个 Data 节点 才能实现高可用性和冗余。

注 1:没有要求每个 Data 节点都运行在自己的服务器上。但是,最佳实践是将每个 Data 节点部署在专用服务器上。

注 2:InfluxDB Cluster 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口 8086HTTP API 的默认端口)。

假设有两台服务器:influxdb-data-01influxdb-data-02

端口: Data 节点通过端口 808880898091 进行通信。

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-01influxdb-data-02 上启动 Data 服务

/usr/bin/influxd -config /etc/influxdb/influxdb.conf

: Data 节点在未被加入集群之前,出现 Failed to create storagefailed to store statisticsmeta 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.11-c1.2.0
5   influxdb-data-02:8088  1.8.11-c1.2.0

Meta Nodes
==========
ID  TCP Address            Version
1   influxdb-meta-01:8091  1.8.11-c1.2.0
2   influxdb-meta-02:8091  1.8.11-c1.2.0
3   influxdb-meta-03:8091  1.8.11-c1.2.0

配置

配置集群

请参考

: InfluxDB Cluster 的配置项几乎和 InfluxDB Enterprise 完全一样,
唯一的差别是,InfluxDB Cluster 使用 [coordinator] 配置项, 而 InfluxDB Enterprise 使用 [cluster]

尚未支持的配置项

相比于 InfluxDB Enterprise,下列配置项目前尚未支持,未来将逐渐得到支持。

Data 节点:

[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

/write HTTP 接口

请参考: /write HTTP endpoint

/api/v2/query HTTP 接口

请参考: /api/v2/query/ HTTP endpoint

/api/v2/write HTTP 接口

请参考: /api/v2/write/ HTTP endpoint

管理指南

迁移 InfluxDB OSS 到 InfluxDB Cluster

请参考: 迁移 InfluxDB OSS 到 InfluxDB Cluster / Migrate InfluxDB OSS instances to InfluxDB Cluster clusters

更换集群节点

请参考: 更换集群节点 / Replace InfluxDB Cluster cluster meta nodes and data nodes

重新平衡集群

请参考: 重新平衡集群 / Rebalance InfluxDB Cluster clusters

硬件数量评估指南

请参考: 硬件数量评估指南 / Hardware sizing guidelines

开启 HTTPS

请参考: 开启 HTTPS / Enable HTTPS for InfluxDB Cluster

管理安全

请参考: 管理安全 / Manage security in InfluxDB Cluster

管理集群

注意:有限支持influxd-ctl 已经支持 13 个命令,剩余 6 个命令 backup, restore, copy-shard-status, kill-copy-shard, entropy, ldap 尚不支持

请参考: 管理集群

使用反熵(Anti-entropy)服务

注意:尚不支持

请参考: 使用反熵(Anti-entropy)服务 / Use Anti-Entropy service in InfluxDB Cluster

备份和还原

注意:有限支持,备份和还原 (influxd-ctl backup, influxd-ctl restore) 尚不支持

请参考: 备份和还原 / Back up and restore InfluxDB Cluster clusters

注意:导出和导入已支持 (influx_inspect export, influx -import)

请参考: 导出和导入数据 / Exporting and importing data

日志和跟踪

请参考: 日志和跟踪 / Log and trace InfluxDB Cluster operations

重命名主机

请参考: 重命名主机 / Rename hosts in InfluxDB Cluster

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容