集群(cluster)& 节点(node)

每一个节点(node)就是一个 es 实例,而一个集群(cluster)由一个活多个节点组成,他们具有相同的 cluster name。当一个节点新增或删除时,集群会感知并平衡数据。
docker中es集群的配置:
docker中es集群的配置docker中es集群的配置

集群中的一个节点会被选举为主节点(master),主节点管理集群级别的变更(索引增删,节点添加删除等)但不参与文档级别的变更和搜索,这意味着当流量增大时,主节点不会成为集群的瓶颈。

索引(index)& 分片(shard)

索引(index)是一个存储关联数据的地方,用来指向一个或多个分片(shards)的“逻辑命名空间”(logical namespace)

分片(shard)是一个最小级别的“工作单元”(worker unit)保存了索引中所有数据的一部分,分片是一个Lucene实例,具有完整的搜索引擎,文档(doc)就存储在分片中。
分片可以分为主分片(primary shard)和复制分片(replica shard):
索引中的每个文档属于一个单独的主分片,所以主分片的数量决定了索引最多能存储多少数据。
复制分片只是主分片的一个副本,可以防止硬件故障导致的数据丢失,同时可以提供读请求,比如搜索或者从别的shard取回文档。

索引创建完成,主分片的数量就是固定的,但是复制分片是可以随时调整的。

集群健康

集群健康有三种状态:

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

故障转移 & 横向拓展 & 更多拓展

文档的索引会先存储在主分片上,然后并发的复制到对应的复制节点上,以保证主副节点都可用被检索。

横向拓展可以使得主副分片保存在不同的节点上,这样单个节点所承载的分片相对就少,以此提升性能。

每个主分片可以对应到多个复制分片,以此提升搜索性能。

注:增加复制分片的同时一半伴随着增加节点的数量,否则一个节点承载更多的分片意味着单个分片所占有的资源(io吞吐、cpu、内存等)将会减少。