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


相关文章
|
存储 SQL Prometheus
盘点市面上主流的时序数据库
万物互联时代,工业物联网产生的数据量比传统的信息化要多数千倍甚至数万倍,并且是实时采集、高频度、高密度,动态数据模型随时可变。传统数据库在对这些数据进行存储、查询、分析等处理操作时捉襟见肘,迫切需要一种专门针对时序数据来做优化的数据库系统,即时间序列数据库。
9481 0
盘点市面上主流的时序数据库
|
搜索推荐 Ubuntu 测试技术
记录一次我做的influxDB性能测试
2018年做了一次influxDB测试,这里记录一下
2516 0
|
存储 NoSQL 关系型数据库
InfluxDB 通识篇
InfluxDB 通识篇
2824 0
|
存储 监控 关系型数据库
InfluxDB 时序数据的高效解决方案
InfluxDB 是一种专为时间序列数据优化的开源数据库,支持高效存储、检索和分析大量时序数据。它采用 Tag-Key-Value 模型,提供高性能写入与查询能力,适合监控系统、物联网设备数据及实时分析等场景。相比传统关系型数据库(如 MySQL),InfluxDB 针对时序数据进行了架构优化,具备无模式设计、自动数据管理及灵活扩展性等优势。本文通过 Go 语言代码实战展示了如何连接、写入和查询 InfluxDB 数据,并介绍了其核心概念与应用场景,助力开发者快速上手时序数据库开发。
1712 0
InfluxDB 时序数据的高效解决方案
|
SQL JSON 数据库
influxdb 端点使用http进行sql查询,写数据
influxdb 端点使用http进行sql查询,写数据
1329 0
|
存储 负载均衡 物联网
InfluxDB集群与扩展性解析
【4月更文挑战第30天】InfluxDB集群利用分片和复制技术实现水平扩展,提升性能和可靠性。集群包含元数据、数据和(可选)代理节点,其中元数据节点管理集群信息,数据节点存储时间序列数据,代理节点转发查询请求。扩展性策略包括:水平扩展增加数据节点,负载均衡优化资源使用,数据分片实现并行处理,以及通过多副本保证容错和高可用性。这些特性使InfluxDB能有效处理大量时间序列数据。
1136 0
|
SQL 时序数据库
influxdb 进行数据删除和修改
influxdb 进行数据删除和修改
3474 5
|
存储 传感器 SQL
influxdb 中得 fields 与 tag 区别总结
influxdb 中得 fields 与 tag 区别总结
1558 1
|
存储 数据库 时序数据库
influxdb得导出与导入
influxdb得导出与导入
1308 1