身安不如心安,屋宽不如心宽 。

ES冷热分离(读写分离) hot, stale 场景

Elasticsearch | 作者 tompanda | 发布于2015年12月30日 | 阅读数:24625

最近在做公司的全量日志收集和检索. 现在写入量每天有20亿, 1T的数据,  写入的同时, 集群也需要给公司同事提供实时日志检索功能. 现在大数据量写入使es集群负载较高. 
如果现在做冷热分离, 每天定时将前一天的索引(按天索引)的tag设为stale,.
但是大部分检索一般是会查询当天的索引. 
这种情况应该怎样优化呢.
或者有没有更好的方案(除了添加添加硬件设施)
已邀请:

三斗室 - ELK

赞同来自: sky7644 yangg lz8086

上面评论中其实已经各自给出来一部分了。我来总结归纳一下:
 
1. 已经没有indexing的索引,通过require.tag的方式迁移到部分机器上,完成温热分离;
2.1. 还在indexing的索引,通过reroute将replica shard强制allocate到部分机器上;
2.2. search的时候,通过?preference=_replica或者?preference=_only_node:xxx的方式指定读取哪些。事实上es-hadoop库目前就是利用这个特性来做并发的。
 
但是需要注意一点的是:因为es的replica也是一个实际需要cpu和io的indexing过程,而且indexing本身也有要求要写够一定副本数来才算写入完成。所以,你即使只请求replica,也是有可能影响到写入的。
 
所以,你只能开启一个副本——写入副本数要求是从二个副本开始才有。

jiaofuyou

赞同来自: runzhliu

QQ图片20151231092341.png

按这个图里的方式,是不是定时的做个shapshot,从热数据cluster中导出,然后导入另一个冷cluster中

jiaofuyou

赞同来自: tompanda

es有没有办法实现像mysql主从的效果,然后查询只在从机上查询
有没有办法让副本在某些节点上然后查询只查询这些节点
匿名用户

匿名用户

赞同来自:

期待大神解答,我也有同样的问题

tompanda

赞同来自:

具体做冷热分离的过程应该是这样的. 
 
1.  有x台机器tag设置为hot
2. 有y台机器tag设置为stale
3. hot集群中只存最近两天的.
4. 有一个定时任务每天将前一天的索引标记为stale
5. es看到有新的标记就会将这个索引迁移到冷集群中, 这都是es自动完成的.
 
现在有一个这样的问题. 
其实大量的检索都是集中在最新产生的索引中, 如果想这样做冷热分离的话, 很多检索还是集中在热集群中.
 
这样的场景应该怎么解决呢(除了增加服务器资源)?

jiaofuyou

赞同来自:

三斗大师讲的:
2.1中的reroute,这个是手动移动分片吧
 
能否在定义索引时,指定一些副本到某些固定的节点上
 
比如:象显示控制分片分配的方法:

PUT /_settings -d '{ "index.routing.allocation.include.zone" : "zone_one" }'
 
能否显示的控制分片分配到固定节点上
 
好象是说主分片和副本是不会分布在同一tag下是吧
 

要回复问题请先登录注册