ElasticSearch:集群(Cluster),节点(Node),分片(Shard),Indices(索引),replicas(备份)之间关系

Cluster
集群,一个ES集群由一个或多个节点(Node)组成,每一个集群都有一个cluster name做为标识
------------------------------------------------
node
节点,一个ES实例就是一个node,一个机器能够有多个实例,因此并不能说一台机器就是一个node,大多数状况下每一个node运行在一个独立的环境或虚拟机上。
------------------------------------------------
index
索引,即一系列documents的集合
------------------------------------------------
shard
分片,ES是分布式搜索引擎,每一个索引有一个或多个分片,索引的数据被分配到各个分片上,至关于一桶水用了N个杯子装,分片有助于横向扩展,N个分片会被尽量平均地(rebalance)分配在不一样的节点上(例如你有2个节点,4个主分片(不考虑备份),那么每一个节点会分到2个分片,后来你增长了2个节点,那么你这4个节点上都会有1个分片,这个过程叫relocation,ES感知后自动完成),分片是独立的,对于一个Search Request的行为,每一个分片都会执行这个Request.另外,每一个分片都是一个Lucene Index,因此一个分片只能存放 Integer.MAX_VALUE - 128 = 2,147,483,519 个docs。[LUCENE-5843] IndexWriter should refuse to create an index with more than INT_MAX docs
------------------------------------------------
replica
复制,能够理解为备份分片,相应地有primary shard(主分片),主分片和备分片不会出如今同一个节点上(防止单点故障),默认状况下一个索引建立5个分片一个备份(即5primary+5replica=10个分片),若是你只有一个节点,那么5个replica都没法分配(unassigned),此时cluster status会变成Yellow。replica的做用主要包括:

1.容灾:primary分片丢失,replica分片就会被顶上去成为新的主分片,同时根据这个新的主分片建立新的replica,集群数据安然无恙

2.提升查询性能:replica和primary分片的数据是相同的,因此对于一个query既能够查主分片也能够查备分片,在合适的范围内多个replica性能会更优(但要考虑资源占用也会提高[cpu/disk/heap]),另外index request只能发生在主分片上,replica不能执行index request。
对于一个索引,除非重建索引不然不能调整分片的数目(主分片数, number_of_shards),但能够随时调整replica数(number_of_replicas)。
------------------------------------------------ node

相关文章
相关标签/搜索