ElasticSeaerch(弹性搜索数据库)中集群、节点、副本和分片的区别
参考:https://my.oschina.net/kenblog/blog/3009800
https://blog.csdn.net/qq_32106647/article/details/99292402
简单总结下:
1、集群cluster:
集群顾名思义就是多个相同集群名称的es节点组合在一起。相当于一个集群就是一个班级,班级下面的学生就是节点。
如果只有一个节点在运行就称为单节点。
2、节点node:
我们可以简单的理解为一个es运行实例就是一个节点。
当你启动一个es的时候,就运行了一个节点。
备注:其实在实际生产服务器环境部署中,一台服务器只会部署一个es。因为es特别耗cpu和内存,所以多个节点的部署会造成服务器资源抢占,反而降低了es的性能。
3、副本replica:
是指同一份数据被保存到N个机器上,每个机器上都是想同的数据。
副本顾名思义就是主分片primary shard的备份副本,如果主分片有3个,那么一个副本replica就对应有1X3=3个replica shard副本分片。
副本分片数量计算公式 = 副本数量repilca num X 主分片数量primary shard num
一个索引的所有分片数量计算公式=副本数量repilca num X 主分片数量primary shard num + 主分片数量 primary shard num
比如:一个索引有3个主分片,两个副本,那么就有6个副本分片。
一个索引可以创建0-N个副本,es默认创建的副本数量为1。
replica副本就是es高可用和快速响应搜索的关键。
4、分片shard:
是指一份数据被分离开保存到N个机器上,N个机器上的数据组合起来是一份数据。
因为ES是个分布式的搜索引擎, 所以索引通常都会分解成不同部分, 而这些分布在不同节点的数据就是分片,一个分片只存储一部分数据,所有分片加起来就是一个完整的索引数据。
分片分为primary shard主分片和replica副本分片。
必须创建主分片,副本分片可以没有。
一个索引可以创建多个分片数量,es默认创建的就是5个主分片数量,可以根据自己的实际业务确定主分片数量,但是需要注意的是主分片数量一旦确定创建就无法进行修改。
5、索引index
索引就类似于关系型数据库的数据库,我们把数据库建立好,然后就把数据存到index中。
一个es(单节点或者集群)可以有很多个索引
分片与副本的关系
每个主分片(primary shard)不会和副本分片(replica shard)存在于同一个节点中,有效的保证es的数据高可用性。
例如1:比如一个索引有3个分片和1副本,那么一共就有3*2=6个分片,3个是主分片,3个是副本分片,每个主分片都会对应一个副本分片。
例如2:只有2个节点,但是有3个分片和2个副本,这样的情况就会导致分片无法完全分配,因为主分片和副本分片不能存在于同一个节点中。
集群的健康状态
Kibana的Dev Tool 上输入 get _cluster/health
status | 说明 |
---|---|
green | 主分片与副本都正常分片 |
yellow | 主分片全部正常分片,有副本分片未能正常分配 |
red | 有主分片未能正常分配,例如,当服务器的磁盘容量超过85%时,去创建了一个新的索引 |