根据Elasticsearch中文社区《ES冷热分离(读写分离) hot, stale 场景》一篇整理的。
一、冷热分离
- 按《控制Elasticsearch分片和副本的分配》来设置,将hot,stale数据分到不同的集群上去
- hot集群只保留最近一天或两天数据
-
写一个定时任务每天凌晨将前一天的索引标记为stale
PUT /index_name/_settings { "index.routing.allocation.include.zone" : "stale" }
- 1
- 2
- 3
- 4
这样旧索引数据会自动迁移到stale集群上
-
详细情况参考:
https://www.elastic.co/guide/en/elasticsearch/reference/2.1/modules-cluster.html
https://www.elastic.co/guide/en/elasticsearch/reference/2.1/cluster-reroute.html
二、读写分离
- 即使这样处理后,hot集群即使只有一两数据,但是一般象log类数据,查询的一般都是最近一两天的数据,致使hot集群负载依然很大。es有没有办法实现像mysql主从的效果,然后查询只在从机上查询?有没有办法让副本分布在某些特定节点上,然后查询只查询这些节点?
- 按《elasticsearch高级配置之分片分布规则设置》中(强制分布规则)来设置,迫使不允许副本被分配到与主分片相同的区域,比如:让副本数据分布到stale集群上。
-
上面的规则有时并不能完全的控制复本一定在某个集群上,它只能尽量保证主分片和副本不在一个集群上,这个时候同样也可以起个定时任务,手动的将副本reroute到集群节点上
POST /_cluster/reroute { "commands" : [ { "move" : { "index" : "test", "shard" : 0, "from_node" : "node1", "to_node" : "node2" } }, { "allocate" : { "index" : "test", "shard" : 1, "node" : "node3" } } ] }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
-
详细情况参考:
https://www.elastic.co/guide/en/elasticsearch/reference/2.1/modules-cluster.html
https://www.elastic.co/guide/en/elasticsearch/reference/2.1/cluster-reroute.html
三、查询选项
-
上面两种方法将冷热,读写数据都分布到了不同的集群上,下面看看如何在指定查询参数,只查询stale集群节点上的数据。
POST /_search?preference=_only_nodes:zone:stale { "query": { "match": { "title": "elasticsearch" } } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
-
上面这个可以只查询node.zone: stale节点数据。这个查询选项要求ES版本在1.7.0以上。关于查询选项详细资料参考:
https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-preference.html?q=preference
四、总结
- 已经不再indexing的索引,通过require.zone的方式迁移到stale集群上,完成冷热分离;
- 还在indexing的索引,通过reroute将replica shard强制allocate到stale集群上;
- search的时候,通过?preference=_replica或者?preference=_only_nodes:xxx的方式指定读取哪些。
-
但是需要注意一点的是:因为es的replica也是一个实际需要cpu和io的indexing过程,而且indexing本身也有要求要写够一定副本数来才算写入完成。所以,你即使只请求replica,也是有可能影响到写入的。
所以,你只能开启一个副本——写入副本数要求是从二个副本开始才有。
- https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-preference.html?q=preference
- http://blog.csdn.net/jiao_fuyou/article/details/50511255
相关推荐
springboot 2.0.2集成elasticsearch5.5.1,并使用集群模式,亲测可用!!!
elasticsearch集群简单搭建
Elasticsearch集群安装配置
es集群安装包,资源共享,个人安装没问题,可以下载试一下
原文链接:https://blog.csdn.net/m0_37814112/article/details/122965720 说明:包含elasticsearch7.15.0集群3节点、5节点、7节点等三种方式的K8S部署yaml文件、镜像文件,里面有详细的README.txt部署参考
开箱即用,简单粗暴...我们本机启动两个es实例,也就是两个node节点,默认集群名称是elasticsearch,所以他会自动将这两个node凑成一个集群,我们什么都不用配置,它自动发现。shard负载均衡假设我们有1个index,
ElasticSearch集群部署方式及社会公共信息系统配置文件中es相关参数的修改
ElasticSearch集群脑裂优化设置,配合博文ES集群优化。
Bigdesk 是 ElasticSearch 的一个集群监控工具,可生成 ElasticSearch 集群的即时图表和统计信息。可以通过它来查看es集群的各种状态,如:cpu、内存使用情况,索引数据、搜索情况,http连接数等。版本对应关系表:...
该安装包实现利用给定参数安装单机版或者集群版es数据库,指定参数后安装过程全自动,自动修改系统内核,配置jdk,自动识别并配置内存,自动根据节点数配置集群脑溢节点配置数。涉及到以下操作 1、自动检测配置java...
采用三台CentOS7.2部署Elasticsearch集群,部署Elasticsearch集群就不得不提索引分片,以下是索引分片的简单介绍。
CentOS7下搭建多节点Elasticsearch集群
学习总结资料
本文档主要以Elasticsearch6.6.2为版本,以Centos7.6为操作系统,详细讲解了ES的集群部署和配置,该文档也支持其他ES其他版本部署配置。原创作者:永远的SSS
一键部署工具实现功能如下: 1、支持单节点部署 2、支持伪集群部署 3、支持分布式集群部署 ...6、支持创建、启动、停止、...说明:工具使用非常简单,只需要修改变量文件,一分钟就可以快速帮你部署elasticsearch集群。
04elasticsearch集群部署.md
ELasticsearch的集群是由多个节点组成的,通过cluster.name设置集群名称,并且用于区分其它的集群,每个节点通过node.name指定节点的名称。 在Elasticsearch中,节点的类型主要有4种: master节点: 配置文件中node...
elasticsearch集群节点监控脚本异常通过mail465发送邮件通知