本文主要对Elasticsearch的分布式相关特性进行总结
1. 分片与副本
1.1 分片&副本
索引分片机制用来存储超过单个节点存储容量的数据,分片副本用来应对不断攀升的吞吐量以及确保数据的安全性。
当一个节点的主分片丢失,ElasticSearch可以把任意一个可用的分片副本推举为主分片。在默认情况下,ElasticSearch会创建一个分片副本。然而分片副本的数量可以通过设置相关的API随时更新,这一点与分片数是不同的。
分片副本的动态更新功能使得创建应用程序时十分方便,查询吞吐量可以随着分片副本数量的增加而增长,与此同时,使用分片副本还可以处理增加查询的发并量。
1.2 合适的分片与副本数
上节可以看出分片主要用来解决单节点存储容量的问题,多副本主要用来解决查询性能以及高可用的问题,Elasticsearch默认的情况下会为每个索引创建5个分片1个副本,该配置很多场景下往往不能满足需求,分片与副本的数量设置情况可参考下列方式
- 如果数据集的大小有限制而且严格定义好的,可以只使用一个分片,一个副本
- 除了上述情况,可以采用公式 “所需最大节点数=分片数*(副本数+1)”的计算方式,例如你计划用10个分片和2个分片副本,那么最大的节点数是30
1.3 分片&副本分配过度
分片分配过度可能会产生以下影响:
1. 增加分发搜索命令到每个分片以及分片结果合并的开销
副本分配过度可能会产生以下影响:
1. 额外的存储空间开销
2. 从主分片复制数据到分片副本时的开销
1.4 调整集群分片分配
主节点的主要功能之一是决定将哪些分片分配给哪些节点,以及何时移动节点之间的分片以集群的数据平衡。
目前Elasticsearch有多种策略可以控制分片的分配:
群集级别的分片分配策略:分片分配是将分片分配给节点的过程。这可能发生在初始恢复,副本分配,rebalancing或添加/删除节点时。
基于磁盘的的分片分配策略:Elasticsearch可以基于磁盘的使用情况配置分配策略来决定是将新分片分配给该节点还是主动将分片从该节点迁出.
基于机架/区域感知的分片分配策略:和大多数分布式集群的分配策略一样,ES也支持基于机架/区域感知的分片分配策略,该策略针对大面积基础设施出现问题时的保证集群高可用的策略。
基于过滤的分片分配策略:可以在索引或是集群级别来配置分片的分配,例如那些节点可以分配集群,那些节点不可以分配某个索引等。
上述策略除了可以通过配置文件配置外,还可以通过API在运行时进行配置。详细配置可参考: