最近在做公司的全量日志收集和检索. 现在写入量每天有20亿, 1T的数据, 写入的同时, 集群也需要给公司同事提供实时日志检索功能. 现在大数据量写入使es集群负载较高.
如果现在做冷热分离, 每天定时将前一天的索引(按天索引)的tag设为stale,.
但是大部分检索一般是会查询当天的索引.
这种情况应该怎样优化呢.
或者有没有更好的方案(除了添加添加硬件设施)
如果现在做冷热分离, 每天定时将前一天的索引(按天索引)的tag设为stale,.
但是大部分检索一般是会查询当天的索引.
这种情况应该怎样优化呢.
或者有没有更好的方案(除了添加添加硬件设施)
6 个回复
三斗室 - 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
按这个图里的方式,是不是定时的做个shapshot,从热数据cluster中导出,然后导入另一个冷cluster中
jiaofuyou
赞同来自: tompanda
有没有办法让副本在某些节点上然后查询只查询这些节点
匿名用户
赞同来自:
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下是吧