
influxdb
influxdb
悟世者
希望用技术改变世界的程序员,资深数据库内核架构师,长期在一线从事数据库核心模块开发。有希望咨询和交流的问题可以直接私信或者留言,看到后会及时回复。
展开
-
2022-03-09 influxdb-数据安全-tsm存储引擎写入失败导致内存cache遗留脏数据
目录摘要:tsm引擎写入函数:关键点:摘要:influxdb的tsm存储引擎先写入cache, 再写入wal. wal写入失败没有清理cache中的数据, 造成写入失败时依然会被从内存中读到.一旦influxd进程未将cache写入tsm文件的情况下重启, 将导致已查出的数据丢失.tsm引擎写入函数: // WritePoints writes metadata and point data into the engine.// It r..原创 2022-03-09 12:37:33 · 643 阅读 · 0 评论 -
2022-03-08 influxdb高可用raft-三个raft节点内部自动转发客户端无感知-功能校验
目录摘要:环境准备:三节点的influxdb高可用部署raft集群信息:leader:功能校验:在任意一个节点上创建数据库:在其他节点查看:在任意节点创建用户:在其他节点查看用户:在任意节点写入数据:在任意节点查询数据:摘要:组建influxdb三节点的主从关系高可用部署架构, 为了增强读写性能, 简化客户端保持leader的繁琐操作, 在内部由张世龙亲自实现自动转发逻辑.本文校验是否可实现客户端无感知功能环境准备:三节原创 2022-03-08 17:16:43 · 739 阅读 · 0 评论 -
2022-03-07 influxdb引入raft时遇到的问题
目录摘要:遇到的问题:摘要:当前influxdb引入raft日志复制做主从数据同步, 本文记录所遇到的问题和收获.遇到的问题:不知道将哪些数据序列化后放入raft日志 写接口, 出现试验的情况, 存在反复 最初将point_writer接口替换写入, 后发现sharedID和nodeID和业务相关, 寻找上层模块 将最上层的写入接口的数据写入 数据的序列化和反序列化耗费大量时间 对于要将哪些数据进行序列化存在盲区, 导致反复的试探 序列化和反序列化编写原创 2022-03-07 19:13:08 · 241 阅读 · 0 评论 -
2022-03-07 Influxdb创建用户接口与raft日志交互封装
目录摘要:创建用户命令:核心处理:关键点:解决办法:在替换为[REDACTED]之前, 将请求保存写入raft日志复制在本节点执行时, 将请求发送给raft日志复制:摘要:influxdb接口可以创建用户, 但是内部直接将密码设置为[REDACTED], 导致需要额外处理.创建用户命令:# 显示用户SHOW USERS# 创建用户CREATE USER "username" WITH PASSWORD 'password'# 创建管理..原创 2022-03-07 17:07:13 · 1109 阅读 · 0 评论 -
2022-03-07 influxdb高可用raft集群读写基本功能校验
摘要:使用raft协议将influxdb组建三节点的raft集群, 1个leader2个follow.在leader上写, 然后在三个节点上分别读取,测试数据是否正常.三节点raft的influxdb集群:root@localhost:~/work/ndb-influxdb-instance/src/influxdb/influxdb-1.8.4# raftadmin 192.168.58.128:50051 leader2022/03/07 11:21:07 Invok..原创 2022-03-07 11:43:02 · 1905 阅读 · 1 评论 -
2022-03-04 influxdb组建raft高可用集群操作记录
摘要:influxdb组建raft高可用集群操作记录, 主要是操作性的, 目的在于避免以后忘记预备三台机器:192.168.58.128 192.168.58.131 192.168.58.132在每台机器上分别启动meta和data:启动meta:#!/bin/bashecho `date` influxd-meta -config ./conf/influxd-meta.conf > ./logs/influxd-meta.log &...原创 2022-03-04 21:16:45 · 472 阅读 · 0 评论 -
2022-03-04 influxdb与raft交互-query接口相关数据序列化与反序列化规则
摘要:Influxdb将创建库/measurement/user/策略等相关接口的实现, 放在了对外的query中.为保证能将query接口相关的数据写入raft的日志, 本文记录如何将其序列化与反序列化核心函数:序列化:func (s *Service) MarshalQuery(qr io.Reader, uid string, opts query.ExecutionOptions) ([]byte, error) { b := make([]byte, 8)..原创 2022-03-04 20:21:03 · 361 阅读 · 0 评论 -
2022-03-04 Influxdb高可用模式下follow节点崩溃记录
目录摘要:follow节点宕机时信息:崩溃的堆栈:奔溃的原因:核心函数:service:influxql:reader:read摘要:目前将raft引入influxdb组建成高可用的raft集群, 但是在日志复制的时候follow宕机, 本文记录该问题.follow节点宕机时信息:崩溃的堆栈:(gdb) bt#0 0x0000000000620a70 in bufio.(*Reader).fill (b=0xc00009d140) a原创 2022-03-04 19:55:12 · 316 阅读 · 0 评论 -
2022-03-03 influxdb与raft交互-向raft日志序列化与反序列化规则
目录摘要:兼容上层接口:序列化:反序列化:接口封装:序列化反序列化测试:摘要:将influxdb中写入的数据向raft日志中发送, 需要进行序列化.从raft的FSM中读出日志后, 需要反序列化为influxdb中的数据才能写入.本文记录序列化与反序列化规则兼容上层接口: func (w *PointsWriter) writeToShard(shard *meta.ShardInfo, database, retent原创 2022-03-03 15:00:11 · 416 阅读 · 0 评论 -
2022-03-02 Influxdb存储引擎tsm读数跟踪
摘要:influxdb存储引擎tsm读数跟踪, 本文暂时不涉及集群分片的逻辑, 仅关注从请求到引擎查询中间的流程.核心函数:StatementExecutor::executeExplainStatementfunc (e *StatementExecutor) executeExplainStatement(q *influxql.ExplainStatement, ctx *query.ExecutionContext) (models.Rows, error) {..原创 2022-03-02 17:23:37 · 461 阅读 · 0 评论 -
2022-03-01 influxdb高可用设计-使用raft共识协议
目录摘要:主体思想:raft协议说明:主要流程:实例孵化:主从切换:加入新从:raft协议核心流程:leader写数据处理:主从数据同步处理函数:写流程修改:摘要:记录influxdb的HA的处理. 引入raft协议主体思想:仅限于高可用 使用raft协议组件集群与日志复制 使用三个数据节点组成raft集群 修改raft协议实现, 将日志的异步复制, 修改为写数据时的同步复制follow, 修改为强一致性....原创 2022-03-01 21:25:46 · 847 阅读 · 0 评论 -
2022-03-01 influxdb会议讨论无法达成一致分析
目录摘要:商榷:问题:下次会议要考虑的点:功能需求:性能需求:摘要:influxdb每次临时提出问题, 否决之前会议决议, 导致不断进行. 本文记录问题.方案讨论, 每次会议都会新增需求, 要么就是改变之前的需求.需要解析出到底为何反复发生.商榷:会议一: 上周二, 抛出几个方案, 下次会议选择 会议二: 上周三, 选择集群化方案, 引入消息队列, 采取最终一致性, 提出key均衡问题 会议三: 上周五, 阐明key均衡问题, 提出乱序..原创 2022-03-01 11:57:42 · 223 阅读 · 0 评论 -
2022-02-28 influxdb主从同步使用raft实现需考虑的问题
摘要:记录influxdb主从同步使用raft实现需考虑的问题主从同步与raft:使用raft的日志复制, 实现主从间的数据同步需调研的raft的要点:raft日志复制的网络模型是什么? 同步? 异步? raft从leader向follower复制日志, 需要经过全部从节点确认, 还是只需要quarum? raft的leader切换时如何保证cli继续写入数据不丢失? raft新加入follower节点, 如果在同步日志的时候保证cli继续写入数据不丢失...原创 2022-02-28 20:14:42 · 1216 阅读 · 0 评论 -
2022-02-28 influxdb高可用方案会议讨论的问题
目录摘要:讨论事项:下一步进展方向:场景一: 实例孵化场景二: 主从切换场景三: 备库重建摘要:记录influxdb高可用方案会议讨论高可用的问题讨论事项:下一步进展方向:场景一: 实例孵化场景二: 主从切换场景三: 备库重建...原创 2022-02-28 13:07:30 · 309 阅读 · 0 评论 -
2022-02-28 influxdb高可用规划
目录摘要:问题点:受TSM存储引擎实现影响:工作量:摘要:influxdb预先实现高可用, 本文详细规划如何处理高可用问题点:新加入的数据节点同步数据, 存在重复写的数据, 是否会造成问题? 向其他数据节点同步数据, 存在乱序写的数据, 是否会造成问题? key重散列后, 迁移槽位时不中断业务, 如何设计? 参考ceph?受TSM存储引擎实现影响:在写入tsm文件前, 会对内存中的cache做排序 wal为顺序写结构 cache为map结构原创 2022-02-28 10:38:36 · 773 阅读 · 0 评论 -
2022-02-27 周回顾反思
目录摘要:核心事项:发生的问题:摘要:记录本周回顾反思核心事项:influxdb集群如何处理key散列 influxdb集群如何迁移key 迁移时不停止服务 自动平衡key influxdb集群写时如何保证数据安全性 influxdb集群读时如何提高性能发生的问题:influxdb集群的设计未细化 influxdb集群未考虑key均衡 influxdb集群的key均衡未考虑不能中断业务 influxdb集群key的槽...原创 2022-02-27 19:12:16 · 168 阅读 · 0 评论 -
2022-02-25 influxdb存储引擎tsm写数据时候对wal和cache的处理
摘要:记录influxdb存储引擎tsm写数据时候对wal和cache的处理核心函数:// WritePoints writes metadata and point data into the engine.// It returns an error if new points are added to an existing key.func (e *Engine) WritePoints(points []models.Point) error { values :=..原创 2022-02-25 17:40:04 · 477 阅读 · 0 评论 -
2022-02-25 influxdb存储引擎tsm创建的shardGroup
摘要:influxdb的最小存储单元为shard, shard归属于tsm, 本文记录如何创建shard核心函数数据结构:// ShardGroupInfo represents metadata about a shard group. The DeletedAt field is important// because it makes it clear that a ShardGroup has been marked as deleted, and allow the..原创 2022-02-25 17:25:36 · 480 阅读 · 0 评论 -
2022-02-25 influxdb的存储引擎tsm写tsm快照文件前排序数据
摘要:记录influxdb的存储引擎tsm写tsm快照文件时的关键操作核心函数:WriteSnapshot// WriteSnapshot will snapshot the cache and write a new TSM file with its contents, releasing the snapshot when done.func (e *Engine) WriteSnapshot() (err error) { // Lock and grab t..原创 2022-02-25 16:44:22 · 461 阅读 · 0 评论 -
2022-02-24 influxdb集群的网络连接结构
摘要:通过influxdb端口的连接状态, 分析influxdb集群的网络拓扑结构集群节点分布:192.168.58.128 192.168.58.131 192.168.58.132root@localhost:~/work/influxdb-1.8.4# influxd-ctl showData Nodes:2 192.168.58.128:80885 192.168.58.132:80886 192.168.58.131:80...原创 2022-02-24 21:21:31 · 1123 阅读 · 0 评论 -
2022-02-24 influxdb集群数据节点心跳更新meta数据
摘要:记录influxdb集群数据节点心跳更新meta数据核心函数:services:meta:client:// Open a connection to a meta service cluster.func (c *Client) Open() error { c.changed = make(chan struct{}) c.closing = make(chan struct{}) c.cacheData = c.retryUntilSnapshot(0..原创 2022-02-24 18:18:23 · 415 阅读 · 0 评论 -
2022-02-24 influxdb集群数据节点HA后读流程处理
摘要:influxdb集群给数据节点做HA之后, 研究如何做读处理处理流程:原创 2022-02-24 15:00:28 · 500 阅读 · 0 评论 -
2022-02-24 influxdb集群数据节点HA后写流程处理
摘要:influxdb集群给数据节点做HA之后, 研究如何做写处理处理流程:原创 2022-02-24 14:48:57 · 460 阅读 · 0 评论 -
2022-02-24 influxdb集群key重散列及槽位迁移
摘要:influxdb集群当前实现的key散列为硬取模, 无法迁移槽位, 重新设计key的散列实现.key的重散列:采取类似redis的槽位散列机制, 利用迁移槽位的策略来迁移key.key散列规则:key =>> uint64 =>> hash->slot => node迁移slot的操作流程:...原创 2022-02-24 14:08:16 · 748 阅读 · 0 评论 -
2022-02-23 influxdb集群待解决的问题
摘要:influxdb现有的集群方案中存在对于HA和数据分散集群待解决的问题.待解决问题:key是如何hash到整个集群的 如何避免会导致单个数据节点数据过多 考虑使用一致性hash与节点key数量结合, 减少单个节点的key数量 单个数据节点的数据过多, 如何做reblance 解决key倾斜问题 如何自动化扩容集群 调研开源实现 如何自动化缩容集群 调研开源实现 修改meta节点中数据节点的记录类型, 可以执行同一个sha...原创 2022-02-23 19:39:52 · 414 阅读 · 0 评论 -
2022-02-23 influxdb单节点查询数据调用流程
摘要:跟踪influxdb单节点模式下查询数据的调用流程调用流程:(gdb) bt#0 influxdb.cluster/coordinator.(*StatementExecutor).createIterators (e=0xc00020ec00, ctx=..., stmt=0xc0000c4100, opt=..., ~r3=..., ~r4=...) at /root/work/ndb-influxdb-instance/src/influxdb/influx..原创 2022-02-23 17:13:10 · 507 阅读 · 0 评论 -
2022-02-23 influxdb单节点写数据的调用流程
摘要:在研究influxdb集群写数据前, 先研究单节点的写数据流程写数据的函数调用栈:(gdb) b points_writer.go:345Breakpoint 1 at 0xdb321b: file /root/work/ndb-influxdb-instance/src/influxdb/influxdb-1.8.4/coordinator/points_writer.go, line 345.(gdb) cContinuing.Thread 1 "influxd..原创 2022-02-23 13:35:56 · 484 阅读 · 0 评论 -
2022-02-22 influxdb集群数据节点HA分析
摘要:influxdb集群的数据节点没有从节点或副本的概念, 单个data节点故障, 即使使用handoff在其他节点记录写, 但是该节点的数据是无法读取出的.本文研究使数据节点HA的策略.influxdb集群架构:2022-02-09 influxdb集群调研_曳光弹-CSDN博客data节点HA:HA的思路是冗余节点, 关键点有以下几个方面:同一个分片的节点间的数据一致性 同一个分片其中一个节点写入数据失败, 该节点如何处理 同一分片的各个节点写入时...原创 2022-02-22 15:28:59 · 1027 阅读 · 0 评论 -
2022-02-17 influxdb缺省配置记录
摘要:记录influxdb缺省配置, 目的一方面是为了记录配置的解释, 一方面是为了以后修改配置的核对.influxdb缺省配置:生成缺省配置文件命令:influxd config > influxdb.conf文件内容:### Welcome to the InfluxDB configuration file.# The values in this file override the default values used by the sys..原创 2022-02-17 14:07:49 · 948 阅读 · 0 评论 -
2022-02-16 freetsdb(influxdb)编译及运行实战
摘要:记录freetsdb编译及运行.freetsdb版本:采用最新的release版本v0.1.2, 改造自influxdb1.9.4https://github.com/freetsdb/freetsdb/releases/tag/v0.1.2编译:进入根目录下载依赖的go模块:go env -w GOPROXY=https://goproxy.cn,directgo mod verifygo mod downloadgo mod vendor进..原创 2022-02-16 15:56:50 · 963 阅读 · 0 评论 -
2022-02-15 读influxdb集群的meta模块启发
摘要:influxdb集群的meta模块可以看作一个精简的服务器, 这两天阅读时获得一些关于开发的启发思考.设计模式中的依赖倒置比较粗浅的说法是上层的实现依赖于下层, 但是重点在于, 何为下层.meta模块的依赖层可以简单概括过:-> service层处理网络通信-> handle层解析网络数据, 做接口分发-> 接口层依赖于store存储封装-> store层依赖于raft接口-> raft接口依赖于raft实现-> ..原创 2022-02-15 10:49:30 · 313 阅读 · 0 评论 -
2022-02-14 influxdb集群coordinator启动及请求处理流程解析
目录摘要:时序图:可以看出流程如下:源码处理:启动服务:对每个新连接开辟新的协程:读取数据并解析请求:以executeSelectStatement为例的源码:摘要:解析influxdb集群启动及请求处理流程时序图:可以看出流程如下:启动服务后监听对应端口 有请求连接后, 建立新协程处理该连接的数据 每个连接单独一个协程处理数据 读取连接发送的数据, 解析请求 根据请求的类型做不同的接口分发源码处理:启动...原创 2022-02-14 14:52:03 · 1238 阅读 · 0 评论 -
2022-02-14 influxdb集群写数据writeToShard解析
摘要:解析influxdb集群写数据writeToShard, 分析出influxdb集群如何处理数据.writeToShard源码:// writeToShards writes points to a shard and ensures a write consistency level has been met. If the write// partially succeeds, ErrPartialWrite is returned.func (w *Poin..原创 2022-02-14 13:15:57 · 603 阅读 · 0 评论 -
2022-02-14 influxdb调研-思维导图
摘要:用脑图形式展现对influxdb的调研, 用树结构将相关模块予以关联,目的在于便于大脑理解和存储脑图:Influxdb调研 存储 1. 存储引擎技术路线 1. LSM 1. levelDB 1. 无法热备份 2. 打开文件句柄超过上限 2. rocksDB 1. 修复热备份 2. 打开文件句柄超过上限 2. B+树 ...原创 2022-02-14 11:09:25 · 488 阅读 · 0 评论 -
2022-02-11 使用freetsdb组建influxdb集群实战
摘要:记录使用freetsdb组建集群.环境准备:至少三台独立的虚拟机 编译安装freetsdbfreetsdb组建集群官方说明:## 部署FreeTSDB原生支持分布式集群能力,FreeTSDB集群的部署主要涉及到META节点和DATA节点,META节点存放的是系统运行所必须的元数据,DATA节点存放的是实际的时序数据。本文档将以3 META节点、2 DATA节点的集群为例演示如何搭建FreeTSDB集群。### 部署META节点基于可用性和资源成本的考虑,...原创 2022-02-11 17:50:07 · 2347 阅读 · 1 评论 -
2022-02-10 influxdb存储引擎tsm设计介绍
File StructureA TSM file is composed for four sections: header, blocks, index and the footer.┌────────┬────────────────────────────────────┬─────────────┬──────────────┐│ Header │ Blocks │ Index │ Footer ││5 byte原创 2022-02-10 16:03:37 · 301 阅读 · 0 评论 -
2022-02-09 influxdb集群调研
摘要:调研influxdb的集群, 研究如何做集群模式.influxdb官方集群说明:InfluxDB Clustering Design - neither strictly CP or AP | InfluxData翻译后是这样的:警告!请注意,此博客已有 1 年多的历史,请查看最新的InfluxDB Clustering并阅读有关InfluxDB Enterprise的更多信息。几周前,我暗示 InfluxDB 集群设计将发生一些重大变化。这些更改是由于我们在过去 3..原创 2022-02-09 17:48:31 · 4200 阅读 · 1 评论 -
2022-01-26 centos8使用influxdb
摘要:记录在centos8上如何快速安装使用influxdb加入influxdb的软件源:touch /etc/yum.repos.d/influxdb.repo内容为:[influxdb]name = InfluxDB Repository - RHEL $releaseverbaseurl = https://repos.influxdata.com/rhel/$releasever/$basearch/stableenabled = 1gpgcheck = 1g..原创 2022-01-26 16:52:52 · 1354 阅读 · 0 评论