Elasticsearch 入门(三)
在ElasticSearch中,集群(Cluster),节点(Node),分片(Shard),Indices(索引),replicas(备份)之间的关系
Cluster包含多个node,Indices不应该理解成动词索引,Indices可理解成关系数据库中的databases,Indices可包含多个Index,Index对应关系数据库中的database,它是用来存储相关文档的。
Elasticsearch与关系数据的类比对应关系如下:
Relational DB =>Databases =>Tables => Rows =>Columns
Elasticsearch =>Indices =>Types =>Documents =>Fields
这里的document的可以理解为一个JSON序列对象。每个document可包含多个field。
【Cluster】
集群,一个ES集群由一个或多个node组成,每一个集群都有一个cluster name作为标识
【node】
节点,一个ES实例就是一个node,一个机器可以有多个实例,所以并不能说一台机器就是一个node,大多数情况下每个node运行在一个独立的环境或虚拟机上。
【index】
索引,即一系列documents的集合。
【shard】
1,ES是分布式搜索引擎,每个索引有一个或多个分片(默认是5个分片),索引的数据被分配到各个分片上,相当于一桶水用了N个被子装
2,分片有助于横向扩展,N个分片会被尽可能的分配在不同的节点。
例如你一开始有两个节点,4个主分片(不考虑备份),那么每个节点会被分配两个分配。
现在你扩展到了4个节点,那么每个节点上都会有一个分片,这个过程叫relocation,是由ES自动完成的
3,分片是独立的,对于一个search request的行为,每个分片都会执行这个request。
4,每个分片都是一个Lucene Index,所以一个分片document的上限为 integer.maxValue
【replication】
1,复制,可以理解为备份分片,相应的有primary shard(主分片)
2,主分片和备份分片不会出现在同一个节点上(防止单点故障),默认情况下一个索引创建5个分片一个备份(总共10个节点)
3,如果你只有一个节点,那么5个replica都无法分配(unassigned),此时cluster status会变成yellow
4,replica的作用
a,容灾,primary分片丢失,replica分片会顶上去成为新的分片,同时根据这个新的分片创建新的replica
b,提高查询性能:replica和primary分片的数据是相同的,所以对于一个query既可以查主分片也可以查备分片,在合适的范围内多个replica性能会更优(但要考虑资源占用也会提升[cpu/disk/heap])
另外index request只能发生在主分片上,replica不能执行index request。
5, 对于一个索引,除非重建索引否则不能调整分片的数目(主分片数, number_of_shards),但可以随时调整replica数(number_of_replicas)。
转自 https://www.zhihu.com/question/26446020/answer/113425214