Elasticsearch学习:分片的理解

来源:互联网 发布:淘宝链接转成淘口令 编辑:程序博客网 时间:2024/05/29 19:02

分片的定义

ElasticSearch集群通过把数据分发到多个存储Lucene索引的物理机上,达到能够存储超出单机容量的信息这一目的。这个分发的过程称为索引分片(Sharding)。在ElasticSearch集群中,索引分片(Sharding)是自动完成的,而且所有分片索引(Shard)是作为一个整体呈现给用户的【2】。整体呈现可以这样理解:当你查询的索引分布在多个分片上时, Elasticsearch会把查询发送给每个相关的分片,并将结果合并在一起,而应用程序并不知道分片的存在【3】。

分片的默认配置

Elasticsearch索引是由一个或多个分片组成的,每个分片包含了文档集的一部分。采用Elasticsearch默认设置时,索引结束后将得到5个分片及1个副本。“副本”(replica)意味着每一个分片都有自己的分片副本(copy),所以实际上有5个分片和5个相应分片副本【3】。一旦创建好索引,更改分片数量的唯一途径就是创建另一个索引并重新索引数据【3】。ElasticSearch设置的默认配置(5个主分片和一个分片副本)是权衡了数据增长的可能性和合并不同分片数据的最终选择【1】。如果应用程序规模增长到单机无法处理的情况下时,新增的节点,ElasticSearch会自动对集群进行负载均衡,在不需要重新索引数据的前提下将部分索引数据转移到新的机器上【1】。

        通过集群状态API可以获取当前分片和副本的设置【5】。

#curl -XGET 'http://localhost:9200/_cluster/stats?human&pretty'  "indices" : {    "count" : 6,    "shards" : {      "total" : 26,      "primaries" : 26,      "replication" : 0.0,      "index" : {        "shards" : {          "min" : 1,          "max" : 5,          "avg" : 4.333333333333333        },        "primaries" : {          "min" : 1,          "max" : 5,          "avg" : 4.333333333333333        },        "replication" : {          "min" : 0.0,          "max" : 0.0,          "avg" : 0.0        }      }    },

确定合适的分片数量

默认配置适用于大部分场合。那怎样确定分片数量?如果数据集的大小有限制而且严格定义好的,可以只使用一个分片。如果不是的,大拇指法则表明最佳的分片数量取决于节点数量。换句话说,如果你计划用5个分片和1个分片副本,那么最大的节点数是10【1】:

Max number of nodes = Number of shards * (number of replicas +1)大拇指法则=一种可用于许多情况的有用的经验法则,但并不是放诸四海皆准

如果使用ES的默认配置(5个分片), 并且使用Logstash按天生成索引, 那么6个月下来, 你拥有的分片数将达到890个【5】。可以这样理解:890/5=178,约等于6个月。而副本在主分片工作正常时是不会被Elasticsearch使用的。

Elasticsearch REST API

查看集群状态

curl -X GET 'http://localhost:9200/_cluster/health?pretty'{  "cluster_name" : "elasticsearch",  "status" : "yellow",  "timed_out" : false,  "number_of_nodes" : 1,  "number_of_data_nodes" : 1,  "active_primary_shards" : 931,  "active_shards" : 931,  "relocating_shards" : 0,  "initializing_shards" : 0,  "unassigned_shards" : 930,  "delayed_unassigned_shards" : 0,  "number_of_pending_tasks" : 0,  "number_of_in_flight_fetch" : 0,  "task_max_waiting_in_queue_millis" : 0,  "active_shards_percent_as_number" : 50.02686727565825}
为什么集群状态为yellow ?由于我们是单节点部署elasticsearch,而默认的分片副本数目配置为1,而相同的分片不能在一个节点上,所以就存在副本分片指定不明确的问题,所以显示为yellow,我们可以通过在elasticsearch集群上添加一个节点来解决问题,如果你不想这么做,你可以删除那些指定不明确的副本分片。下面我们试一下删除副本分片的办法【7】。
curl -XPUT "http://localhost:9200/_settings" -d' { "number_of_replicas" : 0 } '

status字段提供一个综合的指标来表示集群的的服务状况。三种颜色各自的含义【8】:

颜色意义green所有主要分片和复制分片都可用yellow所有主要分片可用,但不是所有复制分片都可用red不是所有的主要分片都可用

查看allocation

curl -X GET http://localhost:9200/_cat/allocation?v

allocation提供了每个数据节点分配了多少个碎片,以及它们使用了多少磁盘空间的信息【10】。
shards disk.indices disk.used disk.avail disk.total disk.percent host      ip        node     5         260b    47.3gb     43.4gb    100.7gb           46 127.0.0.1 127.0.0.1 CSUXak2

查看shards

curl -X GET http://localhost:9200/_cat/shards?v

shards提供节点包含分片的详细视图。它会告诉你是主分片还是副本的,文档的数量,在磁盘上的字节数,以及所在的节点。这里我们看到一个单一的索引,有一个主分片,没有副本【11】:
twitter 0 p STARTED 3014 31.1mb 192.168.56.10 H5dfFeAtwitter 0 r UNASSIGNED

参考

  1. 选择恰当的分片数量和分片副本数量 | Mastering Elasticsearch 中文版 
  2. 基本概念 | Mastering Elasticsearch 中文版 
  3. 《Elasticsearch服务器开发(第2版)》 库赛 (Rafal Kuc), 罗格辛斯基 (Marek Rogozihski), 蔡建斌
  4. 大拇指规则 (RULE OF THUMB) - 《老子》的自然观 - CSDN博客 
  5. [译]优化ElasticSearch之合理分配索引分片 - 牧曦之晨 - SegmentFault 
  6. 改变分片的默认分配方式 | Mastering Elasticsearch(中文版) 
  7. 聊一聊Elasticsearch的健康状态 - 程序园 
  8. 集群健康 | Elasticsearch权威指南(中文版) 
  9. ElasticSearch优化系列六:索引过程 - 简书 
  10. cat allocation | Elasticsearch Reference [5.5] | Elastic 
  11. cat shards | Elasticsearch Reference [5.5] | Elastic 

原创粉丝点击