influxDB集群模式实践

influxDB数据库以其优秀的时序数据存储和查询能力,在处理和分析类似资源监控等时序数据方面得到了广泛的应用。而influxDB自带的各种特殊函数如求平均值、标准差、随机取数据,使数据分析变得十分方便。本文作者基于360内部对产生的大量时序数据的存储为背景需求,设计了性能优异的influxDB集群,下来就跟随作者一探究竟吧。

1

基础概念

TSDB与传统DB比较

  1. 传统数据库多用于记录数据的当前值。
  2. 时序数据库记录基于时间的一系列数据。

TSDB应用场景

由时序产生,并且需要展现其历史趋势、周期规律、异常性的,进一步对未来做出预测分析的,都是时序数据库适合的场景。具体场景:各类设备的监控数据,医学中的血糖、血压、心率的监控数据,金融业中交易、成交数据等。

为什么选择influxdb

  1. 开发者社区活跃,使用者众多,开源时间较长。性能经过检验;
  2. 类SQL的插入、查询语言,不会增加太大的学习成本;
  3. 原生HTTP接口支持各类语言调用;
  4. 仅仅作为存储方案,可插拔。

influxdb之TSM存储引擎概述

  • TSM 存储引擎主要由几个部分组成:
  • cache。在内存中是一个简单的 map 结构默认配置文件中为1g。
  • wal。记录内容和cache一样,目的是为了持久化cache数据,influxdb启动时会加载wal的数据到内存。
  • tsm file。用于数据存储。
  • compactor。主要进行两类操作:
  1.    cache->snapshot->tsm;
  2.    合并小tsm成为大的   tsm。

Shard——TSM存储引擎之上的概念

  1. 按时间戳所在不同范围创建不同Shard;
  2. 根据时间可以快速定位要查询的数据资源,加快查询的过程;
  3. 让根据时间的批量删除操作变得非常简单且高效。

2

项目由来

  1. influxdb社区版默认并未提供集群解决方案。
  2. 官方开源的influxdb-relay仅仅支持双写功能,并未支持负载均衡能力。
  3. 饿了么开源的influx-proxy集群方案组件众多,安装部署、后期维护成本高、复杂度大。
  4. 360公司内部需求:提供十万台主机的两百个监控项数据的实时出图、访问,基于这些监控项的告警以及故障预测。
  5. 基于上述需求,于是有了influxDB-HA项目。

3

程序架构

官方开源influxdb-relay方案

未解决的问题:

  1.  采用双写仅仅解决了数据备份的问题,并未解决influxdb读写性能的问题;
  2.  只是写入了数据,查询还是需要去读influxdb。增加了配置文件的复杂度不易维护;
  3.  并未对写入失败的数据做任何重试机制的处理。

饿了么influxdb高可用解决方案

优势:

  1. influx-proxy是饿了么在influxdb-relay满足不了其性能要求、配置维护要求痛定思痛后重构的产物;
  2. influxdb机器支持动态扩缩;
  3. 增加了强大的请求失败后的重试机制。

劣势:

  1. 架构中使用的组件较多,增加了使用者的学习成本,且不易于后期的维护;
  2. 请求失败重试本身是双刃剑,试想机器性能达到极限,重试无形中又增加了机器的负载;
  3. 与自身场景需求不相符,我们内部只是做监控数据的持久化存储,应该是最简单的接入和与influxdb最小的架构改造。

360内部influxDB-HA解决方案

优势:

  1. 以measurement为最小拆分单元,从而保证以时序查询influxdb的高效性。
  2. 支持业务层动态的拆库、拆表操作。

4

性能比较

与单机influxdb 磁盘IO对比。

与单机influxdb CPU使用对比。

5

业务方接入influxDB-HA说明

influxDB-HA管理influxdb实例配置。

Grafana接入influxDB-HA说明。

三方程序接入influxDB-HA写入数据说明。

  1. 完全兼容influxdb原生的/write接口方式写入,且支持原生查询接口的所有参数;
  2. 如果您说您以前习惯了使用influxdb的SDK方式写入,那也恭喜您。influxDB-HA支持任何语言的influxdb SDK接入。

6

后期迭代计划

一个优秀的项目需要经历无数的版本迭代和优化,而对于开发者而言,能兼容各类需求、适应各类场景是沉淀、提升技术的不二法门。鉴于此,我们应该不断完善influxDB-HA以支持360内部各类使用场景。接来下,仅提出未来可见的优化点:

  1. 接入kafka、RabbitMQ做写入请求之前的缓冲,降低数据丢失的风险;
  2. influxDB-HA配置文件的热加载(目前已经通过golang的fsnotify库实现,将来更大规模的influxDB-HA集群应该通过etcd等外部的配置统一管理来实现);
  3. 对接业务方分表,以支持更大数据规模场景下的解决方案,measurement始终作为influxDB-HA集群中可拆分的最小单元,避免不同measurement的合并排序问题。

7

influxdb使用注意事项

经过一段时间(近一个多月)的实践和对influxdb性能的综合观察,总结出以下结论供我们大家一起探讨:

1、continuous queries/select:

笔者看见很多对于influxdb的不满来自于对其性能的诟病。然而有目共睹的是其写入性能是极其优秀的,那究竟查询性能如何呢?

实践总结:对于超过10万样本数据的查询操作而言,我们通过索引(即influxdb中的tag)查询将能够节省机器性能,大大降低查询时间。查询操作往往耗死机器的根本原因是:OOM(Out Of Memory)

那么在配置CQ时,应该:

  • 尽可能使用tag;
  • 应该拿写好的CQ充分模拟线上环境的测试,证明性能没问题后再上线。

2、retention policy:

配置数据的留存策略好处是数据持久化,但数据量较大时劣势也非常明显,会占用很大的CPU,造成读写数据异常。所以配置RP时我们必须注意:

  • 尽量在读写并发量较小的时刻去操作;
  • 可以在influxdb slave库中反复设置RP实践出最佳方式再上线。
Image placeholder
uaf
未设置
  97人点赞

没有讨论,发表一下自己的看法吧

推荐文章
从零部署TiDB集群

一前言朋友圈,关注的公众号经常出现各个公司开始用TiDB的案例和各种技术分享。对TiDB蛮有兴趣,这几天终于可以尝试接触TiDB,第一步当然是安装和部署。过程还是蛮曲折的,耗费差不多三个工作日。本文先

InfluxDB 管理工具

配置 vim/etc/influxdb/influxdb.conf[admin] Determineswhethertheadminserviceisenabled. enabled=true The

基于JS的高性能Flutter动态化框架MXFlutter

导语:18年10月份,手机QQ看点团队尝试使用Flutter,做为iOS开发,一接触到Flutter就马上感受到,Flutter虽然强大,但不能像RN一样动态化是阻碍我们使用她的唯一障碍了。看Goog

Flutter路由项目实战之fluro

github:https://github.com/zhengzhuan...关于flutter路由,在小项目中,就按照原生写法,但是在大型项目中,这样的我就不会进行推荐,我这里使用的fluro路由管

美团点评Kubernetes集群管理实践

背景作为国内领先的生活服务平台,美团点评很多业务都具有非常显著、规律的“高峰”和“低谷”特征。尤其遇到节假日或促销活动,流量还会在短时间内出现爆发式的增长。这对集群中心的资源弹性和可用性有非常高的要求

PB级数据实时查询,滴滴Elasticsearch多集群架构实践

Elasticsearch是基于Lucene实现的分布式搜索引擎,提供了海量数据实时检索和分析能力。Elastic 公司开源的一系列产品组成的ElasticStack,可以为日志服务、搜索引擎、系统监

运营商大规模数据集群治理的实践指南

写在开头的话Q: 军哥,你们运营商行业的大规模集群,都有啥特点啊?A: 我们集群主要是承载B域、信令和互联网日志等去标识化数据,简单的说,有三个特点:1)集群规模较大:数千节点规模,近百PB数据量,日

Linux集群

普通服务器:1-1.5w1u式机架式服务器服务器应用举例:端游(客户端游戏):如魔兽世界LOL;页游(网页游戏):如斗地主,偷菜页游占的资源更大,(端游的地图、建模、动画等等都安装在了本机(客户端)上

Spring WebFlux 的设计及工作原理剖析

前言 Spring5发布有两年了,随Spring5一起发布了一个和SpringWebMvc同级的SpringWebFlux。这是一个支持反应式编程模型的新框架体系。反应式模型区别于传统的MVC最大的不

Spring Boot 中的响应式编程和 WebFlux 入门

Spring5.0中发布了重量级组件Webflux,拉起了响应式编程的规模使用序幕。WebFlux使用的场景是异步非阻塞的,使用Webflux作为系统解决方案,在大多数场景下可以提高系统吞吐量。Spr

设计模式: 策略模式

博客主页定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。使用场景: 针对同一类型问题的多种处理方式,仅仅是具体行为有差别

DBA职业发展之路:去“IOE”等挑战之下,DBA将何去何从?

开篇随着近些年来,开源、自动化、云化的兴起,DBA职业也正悄然发生一些变化。经常有朋友咨询我,职业发展规划;特别是近期Oracle的大幅裁员之后,针对DBA这一职业未来该如何发展?本文是个人对此问题的

如何在生产环境中部署Kubernetes集群?

如果把kubernetes集群应用于生产环境中,需要做哪些准备?我们先要弄清楚一个词,什么是“生产就绪”?生产就绪,是我们经常听到的一个专业术语,大概意思是已经准备好并已处于即将生产的状态。但是,到底

深入浅出百亿请求高可用Redis(codis)分布式集群揭秘

摘要:作为noSql中的kv数据库的王者,redis以其高性能,低时延,丰富的数据结构备受开发者青睐,但是由于redis在水平伸缩性上受限,如何做到能够水平扩容,同时对业务无侵入性是很多使用redis

Kafka 集群在马蜂窝大数据平台的优化与应用扩展

马蜂窝技术原创文章,更多干货请订阅公众号:mfwtechKafka是当下热门的消息队列中间件,它可以实时地处理海量数据,具备高吞吐、低延时等特性及可靠的消息异步传递机制,可以很好地解决不同系统间数据的

使用 openvpn 与集群内部服务通信

当我们访问集群内部服务,如postgres,redis,traefikDashboard,gitlab时,如果直接暴露在公网中,会造成很大的安全隐患,而使用BasicAuth,WhiteList等也稍

Redis学习笔记2—缓存、集群、一致性等

缓存淘汰策略为了保证高性能,缓存都保存在内存中,当内存满了之后,需要通过适当的策略淘汰老数据,以便腾出空间存储新数据。数据的淘汰策略,典型的包括FIFO(先进先出,淘汰最老数据),LRU(淘汰最近最少

Redis 6.0 新特性之集群代理

Redis6.0releasenotes ======================= UpgradeurgencyLOW:ThisisthefirstRCofRedis6. Introduct

使用kubei一步部署k8s高可用集群(包含docker安装、k8s组件安装、master初始化和加入nodes节点)

kubei(kubernetesinstaller)是一个go开发的用来部署kubernetes高可用集群的命令行工具,该工具可在Windows、Linux、Mac中运行kubei原理:通过ssh连接

Java 程序员眼中的 Linux_1.0.Linux 介绍

Linux介绍 Linux这个名字 Linux的Wiki介绍:http://zh.wikipedia.org/zh/Linux Linux也称:GNU/Linux,而其中GNU的全称又是:Gnu’sN

[Java 程序员眼中的 Linux] Linux 下常用压缩文件的解压、压缩

Linux下常用压缩文件的解压、压缩 常用压缩包解压命令整理 Linux后缀为.tar.gz格式的文件-解压 命令:tarzxvfXXXXXX.tar.gz Linux后缀为.bz2格式的文件-解压

笨办法 学Linux 安装Linux

Linux学习起步 Windows,VirtualBox虚拟机(.ova格式的预配置映像) 学习Linux你需要什么 VitualBox,虚拟机播放器。 putty,终端模拟器。 预配置的Virtua

Linux/Unix 基础:什么是 Linux?

简单来讲,Linux是一个操作系统(OS)。我们都很熟悉其他操作系统,就像Microsoftwindows,AppleMacOS,iOS,Googleandroid,等等这些,linux就像它们一样,

Linux/Unix 基础:Linux 的历史

Linux的诞生 在1991年,来自芬兰Helsinki大学的学生LinusTorvalds认为市场上应该有一个比较统一的Unix版本,从此他就开始为这个项目奋斗。后来这个项目就成为了Linux操作系

别小瞧了 Linux,安卓、华为的自研系统,均源自 Linux!

众所周知,目前国内已有众多的国产系统,基本上均源自linux,以linux为基础进行二次开发。比如红旗linux、深度等等。但不知道为什么,一说起某系统是基于linux而来,很多网友就瞧不起,并且会觉