InfluxDB集群

简介: InfluxDB集群


参考: https://github.com/chengshiwen/influxdb-cluster/wiki

简介

特性

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

架构

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

Meta 节点

元节点持有以下所有的元数据:

  • 集群中的所有节点和它们的角色。
  • 集群中存在的所有数据库和保留策略。
  • 所有分片和分片组,以及它们存在于哪些节点上。
  • 集群用户和他们的权限。
  • 所有的连续查询。

Data 节点

数据节点持有所有的原始时间序列数据和元数据,包括:

  • 测量值
  • 标签键和值
  • 字段键和值

说明

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 节点通信。

集群搭建

集群要求

Meta 要求

生产环境安装过程设置三个 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 进行通信。

Data 要求

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

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

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

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

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

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

集群配置文件

下载 docker-compose.yml 集群配置文件

下载地址:https://github.com/chengshiwen/influxdb-cluster/blob/master/docker/quick/docker-compose.yml

version: "3.9"
services:
  influxdb-meta-01:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-01
    hostname: influxdb-meta-01
    restart: unless-stopped
    networks:
      - influxdb-cluster
  influxdb-meta-02:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-02
    hostname: influxdb-meta-02
    restart: unless-stopped
    networks:
      - influxdb-cluster
  influxdb-meta-03:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-meta
    container_name: influxdb-meta-03
    hostname: influxdb-meta-03
    restart: unless-stopped
    networks:
      - influxdb-cluster
  influxdb-data-01:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-data
    container_name: influxdb-data-01
    hostname: influxdb-data-01
    ports:
      - 8186:8086
    restart: unless-stopped
    networks:
      - influxdb-cluster
  influxdb-data-02:
    image: chengshiwen/influxdb:1.8.10-c1.1.1-data
    container_name: influxdb-data-02
    hostname: influxdb-data-02
    ports:
      - 8286:8086
    restart: unless-stopped
    networks:
      - influxdb-cluster
      
networks:
  influxdb-cluster:

启动集群

docker-compose up -d

注:要持久化容器中的数据,请务必挂载所有 Meta 和 Data 节点的 /etc/influxdb 和 /var/lib/influxdb 目录。

关闭集群并清理相关数据

# 关闭集群
docker-compose down
# 关闭集群,并清除数据
docker-compose down -v

初始化集群

使用 docker exec 进入任意一个 **meta容器(必须是 meta 容器,不能使用 data 容器)**中执行如下命令即可:

# 添加 meta 节点
influxd-ctl add-meta influxdb-meta-01:8091
influxd-ctl add-meta influxdb-meta-02:8091
influxd-ctl add-meta influxdb-meta-03:8091

# 添加 data 节点
influxd-ctl add-data influxdb-data-01:8088
influxd-ctl add-data influxdb-data-02:8088

# 查看集群节点
influxd-ctl show

进入任意 data 节点执行测试:

# 创建库
$ create database history 
# 写入数据
$ insert cpu,name=m1 year=2022
# 查询数据
$ select * from cpu


相关文章
|
Prometheus 监控 Cloud Native
Prometheus VS InfluxDB
前言 除了传统的监控系统如 Nagios,Zabbix,Sensu 以外,基于时间序列数据库的监控系统随着微服务的兴起越来越受欢迎,比如 Prometheus,比如 InfluxDB。gtt 也尝试了一下这两个系统,希望能找到两者的差别,为以后选型提供一些帮助。
9133 0
|
4月前
|
存储 Prometheus Cloud Native
[prometheus]基于influxdb2实现远端存储
[prometheus]基于influxdb2实现远端存储
235 2
|
7月前
|
存储 Prometheus 监控
InfluxDB和 Prometheus
【5月更文挑战第13天】InfluxDB和 Prometheus
485 10
|
7月前
|
存储 监控 Java
InfluxDB时序数据库安装和使用
InfluxDB时序数据库安装和使用
178 2
|
7月前
|
存储 负载均衡 物联网
InfluxDB集群与扩展性解析
【4月更文挑战第30天】InfluxDB集群利用分片和复制技术实现水平扩展,提升性能和可靠性。集群包含元数据、数据和(可选)代理节点,其中元数据节点管理集群信息,数据节点存储时间序列数据,代理节点转发查询请求。扩展性策略包括:水平扩展增加数据节点,负载均衡优化资源使用,数据分片实现并行处理,以及通过多副本保证容错和高可用性。这些特性使InfluxDB能有效处理大量时间序列数据。
|
7月前
|
Prometheus 监控 Cloud Native
Prometheus实战篇:Prometheus监控mongodb
Prometheus实战篇:Prometheus监控mongodb
|
存储 缓存 Prometheus
Prometheus 存储和集群|学习笔记(二)
快速学习 Prometheus 存储和集群
905 0
Prometheus 存储和集群|学习笔记(二)
|
存储 Prometheus 监控
Prometheus 存储和集群|学习笔记(三)
快速学习 Prometheus 存储和集群
453 0
Prometheus 存储和集群|学习笔记(三)
|
存储 Prometheus 监控
Prometheus 存储和集群|学习笔记(一)
快速学习 Prometheus 存储和集群
258 0
Prometheus 存储和集群|学习笔记(一)
|
网络协议 安全 API
InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案
InfluxDB Cluster - 一个开源分布式时间序列数据库,InfluxDB Enterprise 集群的开源替代方案。完全依照 InfluxDB Enterprise 实现,基于 InfluxDB v1.8.10 开发,支持集群(数据分片)、高可用(容错)、数据一致性(Raft,Hinted Handoff)、配套工具(扩缩容、数据同步等)等特性,Telegraf、Chronograf、Kapacitor 也完全支持,生产环境已就绪
1824 0
InfluxDB Cluster - InfluxDB Enterprise 集群的开源替代方案