Druid0.17版本冷热数据分离设置
有一个安装好的Druid集群,安装Druid集群请参考 Druid0.17.0版本集群实施文档
这里我已经按照上面的步骤向集群中写入了一个数据源。
集群规划
根据已安装的集群对Druid的数据服务器做一个规划
-
主机名称列表
- master 192.168.1.91
- node1 192.168.1.92
- node2 192.168.1.93
- node3 192.168.1.94
- node4 192.168.1.95
- node5 192.168.1.96
node2 存储热数据(hot)分组
node3 存储冷数据(clod)分组
node4 node5 存储默认数据(default)分组
当前数据分布情况
- 当前数据源 为demo 数据大小为380MB左右,副本大小为760MB左右,因为是2个副本,所以副本大小应该是数据大小的两倍。
- 数据分布情况是四个Historical均匀分布,四个节点的大小是差不多的。
对冷热数据分布规划
- 热数据 保留最近1个小时的数据,副本为2个
- 冷数据 保留最近3个小时的数据,副本为1个
- 默认数据 保留所有的数据,副本为1个
修改Historical的相关配置
对数据服务器Historical更改配置(更改 node2 节点的 )
vim $DRUID_HOME/conf/druid/cluster/data/historical/runtime.properties
druid.server.tier=hot
druid.server.priority=100
对数据服务器Historical更改配置(更改 node3 节点的 )
vim $DRUID_HOME/conf/druid/cluster/data/historical/runtime.properties
druid.server.tier=clod
druid.server.priority=100
改完之后,停止所有的数据服务 node2 node3 node4 node5 执行
停止
service --down
启动
nohup start-cluster-data-server 1>/dev/null 2>&1 &
从上图就能看出来,默认规则的数据会分布在 node4 node5 在没有设置规则的时候使用的是默认的规则
设置规则
- 点击设置规则
- 点击添加规则
- 第一个规则
loadByPeriod 周期性
PT1H 最近1个小时
Include future 未来一直是这样
Replicants 1 副本为1个
Tier hot 热数据
第二个规则
loadByPeriod 周期性
PT1H 最近3个小时
Include future 未来一直是这样
Replicants 1 副本为1个
Tier hot 冷数据
下一步
- 描述信息 保存
数据分布结果是这样的,数据全部加载到 hot 节点
[1] 第一次更改规则
去除 hot规则中 Include future 选项
数据分布是这样的
可以看到hot节点是保留了最新一个小时的数据,但是剩余的数据全部在cold节点,这样也是不对的
[2] 第二次更改规则
去除 cold规则中 Include future 选项
数据分布是这样的
可以看到hot节点数据还是一个小时,但是cold的数据全部没有了,default 两个节点都加载了全部的数据,因为默认规则是两个副本,还是有问题的
[3] 经过多次的配置之后发现,还是这样的问题,
一直出现这样的问题,我个人认为数据分三层似乎行不通
[4] 我决定把node3 设置为hot
vim $DRUID_HOME/conf/druid/cluster/data/historical/runtime.properties
druid.server.tier=hot
druid.server.priority=100
重启之后,数据分布是这样的
更改规则 hot数据为2个副本
当前的节点分布(把默认的副本改成了1个 删除了所有的规则)
[5] 配置热数据保存最近2个小时 2个副本
数据分布
这样就能满足热数据多个副本,提高查询的效率,其他的数据加载一个副本,
[6] 加载最近4个小时的数据,前1小时为热数据,后3个小时为冷数据,其他的不要
最终的数据分布也是不正确的。
经过多次的配置尝试
总结
Druid的新版的规则配置上,加载规则配置一个,删除规则配置一个。或者加载规则配置一个,然后会默认使用默认规则。
[1] 配置一个周期加载规则和一个删除规则,从图上看是加载了数据到hot节点,但是从segment-cache上看就能看到加载的不是最近2小时的,是几个小时之前的,当时查询似乎是没有问题
[2] 配置一个周期加载规则和一个删除规则,从图上看是加载了数据到default节点,但是从segment-cache上看就能看到加载的不是最近2小时的,是几个小时之前的,当时查询似乎是没有问题
[3] 配置一个周期加载规则和一个删除规则,hot节点一个副本,default一个副本,从图上看是加载了数据到两个节点节点,但是从segment-cache上看就能看到加载的不是最近2小时的
[4] 加载所有的数据,最近2个小时为hot数据2个副本,其余的为cold数据,1个副本,规则勾选include future选项。从结果上看是周期加载的最近10个小时的数据到hot节点上,剩余其他数据加载到了default节点上,使用的默认规则。
hot数据分布在hot节点
cold数据分布在default节点
因为测试的时间还是比较短,而且有一个时区的问题,没有准确的看到具体的情况(我的机器的时区全部是CST),感觉时区这块有些影响,不然不会一直保留的是10个小时的数据。后面有机会在做测试,同时还有一个问题就是,当hot节点就一个是,设置副本大于1时,其实是不生效的,当hot节点有多个的时候才生效。
上面测试遇到很多的问题,就是设置了规则发现不加载,或者只加载到同一类型的节点上去,因为时间也是比较短,不能长时间观察,可能也是和时区有关系。这个问题,当时没有注意到,最后面发觉这方面问题,最近不想在测试了,后面找时间在测试吧。