influx proxy的路由规则、数据倾斜及 hash 分布
Closed this issue · 8 comments
您好,我们的应用最近发现内存有比较剧烈的波动,如下图所示, 想请教下几个问题
问题描述
最近的改变就是新增加了一些写入 但是也都比较均衡,查询用量和以前也一样
当前版本
- chengshiwen/influx-proxy:2.5.10
- influxdb:1.8.10 - oss
QA
- 图1看起来也是比较规律的波动,这边可能是什么原因呢?
- 据文档说明,proxy会根据database 和measurement 和instance做hash ,这样的话很有可能实例数据量分布不均, 我们的case是两个环每个环3个实例, 其中两个平常用量也就1g,第三个用量有时候可以飙到30多g.. 这个是否可以在哪里指定我的数据就写到某个instance呢?或者说会在哪个新版本中release这种功能嘛?
- 假如没有指定,这边有什么算法可以自己模拟一下我的表会落到哪个instance嘛?
- 适配influx1的 influx-proxy是否还有更新计划呢?
期待您的回复,谢谢!
感谢您的回复!
- 图1是influxdb
- 演进路线这边看到了, 但是留意到您那边最近可能还有v2版本的influx-proxy和cluster的替代品, 不知道v1 是否还会继续如演进路线前行, 有大概的时间线嘛?
QA:
- 问下influxdb-proxy2 也已经prod就绪了吗?
- cluster的替代品和 influxdb-proxy2 哪个您那边更加倾向呢,有一些对比的资料嘛?
演进路线这边看到了, 但是留意到您那边最近可能还有v2版本的influx-proxy和cluster的替代品, 不知道v1 是否还会继续如演进路线前行, 有大概的时间线嘛?
主要还是 influxdb v1 的支持,influxdb v1 对应 influx-proxy v2.x,influxdb v2 是对应 influx-proxy v3.x。没有明确时间线,有时间就支持
问下influxdb-proxy2 也已经prod就绪了吗?
influx-proxy v2.x 早已经生产验证过,多家客户和厂商都在使用
cluster的替代品和 influxdb-proxy2 哪个您那边更加倾向呢,有一些对比的资料嘛?
简单对比如下:
InfluxDB Cluster v1.8.10-c1.1.2 正式发布,完全依照 InfluxDB Enterprise 实现,基于 InfluxDB v1.8.10 开发,支持集群(数据分片)、高可用(容错)、数据一致性(Raft,Hinted Handoff)、InfluxQL 和 Flux 查询、配套工具(扩缩容、数据同步等)等特性,已在生产环境运行数月
https://github.com/chengshiwen/influxdb-cluster
文档:https://github.com/chengshiwen/influxdb-cluster/wiki
关联项目:
Influx Proxy:InfluxDB 代理,18年开始维护,功能简单、稳定可靠(已在很多家金融客户生产环境长期运行达3-4年),与InfluxDB 完全解耦,易于维护,满足大多数场景,代理性能损失不到10%。缺点:只分库不分表(数据量很大时可能导致数据倾斜),部分复杂 InfluxQL 语句不支持,CQ 不支持
地址:https://github.com/chengshiwen/influx-proxy
谢谢!
influxdb v2 是对应 influx-proxy v3.x 的, 这个已经prod就绪了吗?
influxdb v2 是对应 influx-proxy v3.x 的, 这个已经prod就绪了吗?
这个有少部分用户在生产使用,目前没有反馈有任何问题,但因为 influx-proxy v3.x 支持功能有限,所以你可以测试看看
假如没有指定,这边有什么算法可以自己模拟一下我的表会落到哪个instance嘛?
@rainbowwiki 可以使用 influx-tool v0.4.0 的 influx-tool hashdist
命令来进行模拟测试,例如:
单个 database 和 measurement 分布测试:
$ influx-tool hashdist -n 10 -d db1 -m cpu1
node total: 10, hash key: idx, shard key: %db,%mm, database: db1, measurement: cpu1
node index: 4
多个 database 和 measurement 分布测试:
$ head -n 3 table.csv
db1,cpu1
db1,cpu2
db1,cpu3
$ influx-tool hashdist -n 10 -f table.csv -D -
node total: 10, hash key: idx, shard key: %db,%mm, total hits: 40
node index: 0, hits: 4, percent: 10.0%, expect: 10.0%
node index: 1, hits: 5, percent: 12.5%, expect: 10.0%
node index: 2, hits: 6, percent: 15.0%, expect: 10.0%
node index: 3, hits: 4, percent: 10.0%, expect: 10.0%
node index: 4, hits: 5, percent: 12.5%, expect: 10.0%
node index: 5, hits: 4, percent: 10.0%, expect: 10.0%
node index: 6, hits: 4, percent: 10.0%, expect: 10.0%
node index: 7, hits: 4, percent: 10.0%, expect: 10.0%
node index: 8, hits: 1, percent: 2.5%, expect: 10.0%
node index: 9, hits: 3, percent: 7.5%, expect: 10.0%
influx-proxy v2.5.12 支持自定义 hash_key
和 shard_key
模板,可以控制数据应该写入到哪个 influxdb 实例,详见 Hash and Shard Key
您好, 感谢提醒,首先庆祝这个hash_key 以及shard_key 功能的发布! 感谢!
但是关于这个hash策略,没看明白具体怎么应用,能帮忙举个例子吗?
假设proxy 配置了如下配置, 那这个是如何控制数据写到哪里的?例如我有两个circle 每个circle有三个实例,
circle1
instance1
instance2
instance3
circle2
instance1
instance2
instance3
有这样的数据如下:
memory,host=host5 used=6471i
network,host=host2 bytes_recv=8707i
disk,host=host5 used_percent=89.37
cpu,host=host5 usage_user=0.2
disk,host=host1 read_bytes=7351i
memory,host=host3 free=8527i
network,host=host2 errors=645i
network,host=host5 bytes_recv=3984i
memory,host=host3 free=5408i
memory,host=host3 used=8950i
disk,host=host5 read_bytes=7076i
我应该怎么样配置可以让cpu这张表写到instance1 , memory 写到instance2,disk写到instance3 呢? 这个可以实现吗?