相关概念:
    (1)Cluster和Node—Elasticsearch中的Cluster是对外提供搜索服务的集群,组成这个集群的各个节点叫Node.集群Cluster是一组有着相同cluster.name的节点,他们协同工作,互相分享数据,提供了故障转移和扩展的功能。Node又分为IndexNode、DataNode等。节点之间是对等关系的(去中心化),而弱化的Master节点只不过多了维护集群状态的功能。
    (2)Shards—Elasticsearch将一个完整的索引分成若干个部分,每个部分就是一个Shards,每个Shard实际上就是一个基于Lucene的索引。Shards的数量一般在索引创建前制定,且索引创建后不能更改。
    (3)Replicas—Replics是索引的冗余备份,可用于防止数据丢失或用来做负载均衡。一般地,Elasticsearch会自动对索引请求进行负载均衡。
    (4)Recover—在有节点加入或退出集群Cluster或故障节点重新启动时,Elasticsearch会根据机器的负载情况,对索引分片Shards进行重新分配。
    (5)River—River是一个运行在Elasticsearch集群内部的插件,主要用来从外部获取以后数据,然后在Elasticsearch里创建索引。常见的有MongoDB、JDBC river Plugin等。
    (6)Gateway—是Elasticsearch索引数据快照的存储方式,当Elasticsearch集群关闭再重新启动时,就会从Gateway中读取索引数据快照。Elasticsearch支持多种类型的Gateway,本地文件系统、分布式文件系统、Hadoop的HDFS
    (7)Discover.zen—Discover.zen代表Elasticsearch的自动发现节点机制。Zen用来实现节点自动发现和Master节点选举,Master节点负责节点的加入和退出以及分片shard的重新分配。
    (8)Transport—Transport代表Elasticsearch内部节点或集群与客户端的交互方式,默认内部是使用TCP协议进行交互的,同时支持HTTP协议(JSON格式)、Thrift、Servlet等传输协议。
    (9)Index、Type、Document、Field—Index是数据存储的地方,可以快速高效的堆索引中的数据进行全文索引,类似于RDBMS数据库中的Database;在Index下一般会有多个存储数据的Type,Type类似于Database的table,用来存放具体数据;Document类似于关系数据库的一行数据,在一个Type里的每一个Document都有一个唯一的ID作为区分。
    (10)Mapping—Mapping定义索引下的Type的字段处理规则,如索引如何建立、索引数据类型、是否保存原始索引JSON文档,是否需要进行分词处理、如何进行分词处理等。一般地,一个索引文件下能存储不同映像(Mapping)的类型文件(Types).

    从图中可以看出,Elasticsearch可以接受来自本机、共享以及云平台上的数据;在Lucene提供的基本功能上,通过构建分布式索引,完成对大数据的索引、搜索等处理。其中,River作为Elasticsearch内部运行的插件,获取其他存储方式的数据到Elasticsearch.Zen用来作为节点自动发现和Master节点选举;EC2(Elastic Copute Cloud)借由Web服务的方式让使用者可以弹性的运行自己的Amazon机器映像,提供可调整的云计算能力。通过提供的Thrift、Memcached、HTTP等方式使用Elasticsearch的API。在顶层,用户可以基于RESTful和客户端的方式通过Elasticsearch API完成数据操作、管理等操作。


    路由计算

    作为一个没有额外依赖的简单的分布式方案,ES 在这个问题上同样选择了一个非常简洁的处理方式,对任一条数据计算其对应分片的方式如下:
    shard = hash(routing) % number_of_primary_shards
    每个数据都有一个 routing 参数,默认情况下,就使用其 _id 值。将其 _id 值计算哈希后,对索引的主分片数取余,就是数据实际应该存储到的分片 ID。
    由于取余这个计算,完全依赖于分母,所以导致 ES 索引有一个限制,索引的主分片数,不可以随意修改。因为一旦主分片数不一样,所以数据的存储位置计算结果都会发生改变,索引数据就完全不可读了。


    http://kibana.logstash.es/content/kibana/v4/visualize/area.html