**分片**
>一个 分片 是一个底层的 工作单元 ,它仅保存了全部数据中的一部分。 在分片内部机制中,我们将详细介绍分片是如何工作的,而现在我们只需知道一个分片是一个 Lucene 的实例,以及它本身就是一个完整的搜索引擎。 我们的文档被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。
Elasticsearch 是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。 当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
一个分片可以是 主 分片或者 副本 分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。
**副本分片**
>一个副本分片只是一个主分片的拷贝。副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。
副本分片的主要目的就是为了故障转移,如果持有主分片的节点挂掉了,一个副本分片就会晋升为主分片的角色。在索引写入时,副本分片做着与主分片相同的工作。新文档首先被索引进主分片然后再同步到其它所有的副本分片。增加副本数并不会增加索引容量。
在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。
**ES集群核心参数**
>ES集群的服务器个数,
ES集群的总CPU核心个数,
ES集群的总内存
预估要存入ES总数据量(数据+索引)
**通俗理解**
>分片数(number_of_shards)就是主分片个数
副本数(number_of_replicas) 可以理解成主分片的拷贝个数
如果主分片数是5,则每个副本都有5个分片
因此ES集群总的分片数 = 分片数 * (副本数 + 1)
**副本数分配算法:**
<blockquote>副本数 <= ES集群的服务器个数 - 1 </blockquote>
副本除了提升查询效率,主要目的为了容灾,数据冗余存储,保证数据安全,因此,副本数应跟据ES集群中的数据库数量(N-1)进行配置,如果ES集群中有3台服务器,则副本数设置为2,减 1 因为主分片本身也算一份。副本数设置为2,数据实际上有3份,分散到3台服务器中。
<blockquote>预估要存入ES总数据量 * (副本数+1) <= ES集群的总内存 / 2 </blockquote>
存入ES搜索引擎 的数据可以预估,比如预估存入的数据有 100G,则实际上会占用的内存为 100G * (副本数+1) 加 1 因为计入了主分片,数量里超限了也可以存入,只要磁盘够大,但是计算时就可能用到了磁盘,磁盘的IO性能会让整个ES集群性能大副下降。
ES集群的总内存只取了一半,因为考虚 ES 的 java. 程序本身占用的内存,数据聚合运算消耗的内存,如果实际项目中大量复杂运算,占用的内存需要更多。
**分片数分配算法:**
<blockquote>分片数 * (副本数 + 1) <= ES集群的总CPU核心个数 </blockquote>
分片内的检索运算聚合需要 CPU, 为了充分发挥多核CPU的性能,且又避免CPU频繁调度,因此,ES集群内总的分片数应小于等于总的CPU核心个数。
- 前言
- Markdown教程
- ElasticSearch教程
- ElasticSearch7.6.2安装
- Elasticsearch-head安装
- Elasticsearch-IK中文分词器
- ElasticSearch基础入门
- 索引管理
- ElasticSearch深入搜索
- 结构化搜索
- 精确值查找
- 组合过滤器
- 范围查询
- 全文搜索
- 匹配查询
- 组合查询
- 跨度查询
- Logstash教程
- Logstash的安装
- Mysql数据同步到ES
- Kibana教程
- Kibana7.6.2安装
- Cakephp4.x+ElasticSearch7.6.2
- Cakephp4.x的安装和使用
- Elasticsearch-phpSDK的使用
- 安装软件及源码下载
- 使用总结
- elasticsearch 7.2集群安装部署
- 集群的安装部署
- es集群master节点配置组合
- 分片数、副本数分配算法
- 关于集群部署的答疑解惑