简介
当 Elasticsearch 集群中有新节点加入,或者有节点离线,Elasticsearch 会自动在节点间进行均衡。当有新节点加入集群,集群中现有的分片和副本会重新均衡分布。当有节点离线,需要重新从丢失的分片对应的副本列表中选择一个成为新的分片,并对丢失的副本重新生成和数据恢复,最后进行分片和副本在节点间的均衡分布。
新增节点
当有新的节点加入集群,Elasticsearch 会自动进行分片的均衡分布,确保不会出现热点节点。比如,在一个原本有三个分片和一个副本的两个节点组成的集群中,新增一个节点,Node 1 和 Node 2 上各有一个分片被迁移到了新的 Node 3 节点,现在每个节点上都拥有2个分片,而不是之前的3个。每个节点的硬件资源(CPU, RAM, I/O)将被更少的分片所共享,每个分片的性能将会得到提升。
节点离线
当有节点从集群离线,Elasticsearch 会在集群内选取其他拥有当前节点上面的分片对应的副本为分片。在副本获选为分片后,master 节点开始执行恢复操作来重建其他缺失的副本。集群中的节点之间互相拷贝分片数据,这个过程还有可能会触发小规模的分片移动,最终,分片在节点间移动来达到一个最佳的平衡状态。
取消迁移
对于节点暂时离线,在短时间后又重新上线,而此时集群还没有完成分片的均衡和迁移的这种情况,Elasticsearch 会检查有没有文档变更,包括删除、新增和修改,如果没有,那么 master 将会取消正在进行的再平衡并恢复该机器磁盘上的数据。因为,本地磁盘的恢复永远要比网络间传输要快,并且保证了分片数据是一样的。
如果文档有变更(比如:节点离线之后又索引了新的文档),那么恢复进程会继续按照正常流程进行。重新加入的节点会删除本地的、过时的数据,然后重新获取一份新的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。