共计 1290 个字符,预计需要花费 4 分钟才能阅读完成。
名词定义
分片
一个 分片 是一个底层的 工作单元,它仅保留了全副数据中的一部分。在分片外部机制中,咱们将具体介绍分片是如何工作的,而当初咱们只需晓得一个分片是一个 Lucene 的实例,以及它自身就是一个残缺的搜索引擎。咱们的文档被存储和索引到分片内,然而应用程序是间接与索引而不是与分片进行交互。
Elasticsearch 是利用分片将数据散发到集群内各处的。分片是数据的容器,文档保留在分片内,分片又被调配到集群内的各个节点里。当你的集群规模扩充或者放大时,Elasticsearch 会主动的在各节点中迁徙分片,使得数据依然均匀分布在集群里。
一个分片能够是 主 分片或者 正本 分片。索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引可能保留的最大数据量。
正本分片
一个正本分片只是一个主分片的拷贝。正本分片作为硬件故障时爱护数据不失落的冗余备份,并为搜寻和返回文档等读操作提供服务。
正本分片的次要目标就是为了故障转移,如果持有主分片的节点挂掉了,一个正本分片就会降职为主分片的角色。在索引写入时,正本分片做着与主分片雷同的工作。新文档首先被索引进主分片而后再同步到其它所有的正本分片。减少正本数并不会减少索引容量。
在索引建设的时候就曾经确定了主分片数,然而正本分片数能够随时批改。
ES 集群外围三个的参数
- ES 集群的服务器个数,
- ES 集群的总 CPU 外围个数,
- ES 集群的总内存
- 预估要存入 ES 总数据量(数据 + 索引)
艰深了解
- 分片数(number_of_shards)就是主分片个数
- 正本数(number_of_replicas)能够了解成主分片的拷贝个数
- 如果主分片数是 5,则每个正本都有 5 个分片
- 因而 ES 集群总的分片数 = 分片数 * (正本数 + 1)
正本数调配算法:
正本数 <= ES 集群的服务器个数 - 1
正本除了晋升查问效率,次要目标为了容灾,数据冗余存储,保障数据安全,因而,正本数应跟据 ES 集群中的数据库数量(N-1)进行配置,如果 ES 集群中有 3 台服务器,则正本数设置为 2,减 1 因为主分片自身也算一份。正本数设置为 2,数据实际上有 3 份,扩散到 3 台服务器中。
预估要存入 ES 总数据量 * (正本数 +1) <= ES 集群的总内存 / 2
存入 ES 搜索引擎 的数据能够预估,比方预估存入的数据有 100G,则实际上会占用的内存为 100G * (正本数 +1) 加 1 因为计入了主分片,数量里超限了也能够存入,只有磁盘够大,然而计算时就可能用到了磁盘,磁盘的 IO 性能会让整个 ES 集群性能大副降落。
ES 集群的总内存只取了一半,因为考虚 ES 的 java. 程序自身占用的内存,数据聚合运算耗费的内存,如果理论我的项目中大量简单运算,占用的内存须要更多。
分片数调配算法:
分片数 * (正本数 + 1) <= ES 集群的总 CPU 外围个数
分片内的检索运算聚合须要 CPU,为了充分发挥多核 CPU 的性能,且又防止 CPU 频繁调度,因而,ES 集群内总的分片数应小于等于总的 CPU 外围个数。
以上是集体了解,因程度无限,不免有不妥之处,不可全信,欢送交换切磋,欢送斧正。
本文原始网址:https://www.liu12.com/article…,转载请保留出处