V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chengshiwen0103
V2EX  ›  InfluxDB

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

  •  
  •   chengshiwen0103 · 2022-10-22 16:56:35 +08:00 · 962 次点击
    这是一个创建于 786 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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.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 不能用作负载均衡器。您需要配置自己的负载均衡器以将客户端流量发送到端口 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.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 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

    /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

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2168 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 15:55 · PVG 23:55 · LAX 07:55 · JFK 10:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.