让Elasticsearch集群冷热分离、读写分离
2016-01-13 15:51
567 查看
根据Elasticsearch中文社区《ES冷热分离(读写分离) hot, stale 场景》一篇整理的。
hot集群只保留最近一天或两天数据
写一个定时任务每天凌晨将前一天的索引标记为stale
这样旧索引数据会自动迁移到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
按《elasticsearch高级配置之分片分布规则设置》中(强制分布规则)来设置,迫使不允许副本被分配到与主分片相同的区域,比如:让副本数据分布到stale集群上。
上面的规则有时并不能完全的控制复本一定在某个集群上,它只能尽量保证主分片和副本不在一个集群上,这个时候同样也可以起个定时任务,手动的将副本reroute到集群节点上
详细情况参考:
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
上面这个可以只查询node.zone: stale节点数据。这个查询选项要求ES版本在1.7.0以上。关于查询选项详细资料参考:
https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-request-preference.html?q=preference
还在indexing的索引,通过reroute将replica shard强制allocate到stale集群上;
search的时候,通过?preference=_replica或者?preference=_only_nodes:xxx的方式指定读取哪些。
但是需要注意一点的是:因为es的replica也是一个实际需要cpu和io的indexing过程,而且indexing本身也有要求要写够一定副本数来才算写入完成。所以,你即使只请求replica,也是有可能影响到写入的。
所以,你只能开启一个副本——写入副本数要求是从二个副本开始才有。
一、冷热分离
按《控制Elasticsearch分片和副本的分配》来设置,将hot,stale数据分到不同的集群上去hot集群只保留最近一天或两天数据
写一个定时任务每天凌晨将前一天的索引标记为stale
PUT /index_name/_settings { "index.routing.allocation.include.zone" : "stale" }
这样旧索引数据会自动迁移到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" } } ] }
详细情况参考:
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" } } }
上面这个可以只查询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,也是有可能影响到写入的。
所以,你只能开启一个副本——写入副本数要求是从二个副本开始才有。
相关文章推荐
- 巧用mysql提示符prompt清晰管理数据库的方法
- 两大步骤教您开启MySQL 数据库远程登陆帐号的方法
- phpmyadmin 4+ 访问慢的解决方法
- linux系统下实现mysql热备份详细步骤(mysql主从复制)
- CentOS 5.5下安装MySQL 5.5全过程分享
- MySQL复制的概述、安装、故障、技巧、工具(火丁分享)
- MySQL中删除重复数据的简单方法
- elasticsearch批量数据导入和导出
- 使用ElasticSearch+LogStash+Kibana+Redis搭建日志管理服务
- ElasticSearch 使用心得
- ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
- CENTOS安装ElasticSearch
- ElasticSearch的安装配置
- 《Elasticsearch: The Definitive Guide》读书笔记2
- ElasticSearch REST API
- 网站基于ElasticSearch搜索的优化笔记 PHP
- elasticsearch安装与调试
- elasticsearch建立geo search
- elasticsearch在NAS上的部署和使用
- 关于ElasticSearch的一些肤浅的思考