1. 数据均衡
某个shard分配到哪个节点上,一般来说,是由 ELasticSearch 自行决定的。以下几种情况会触发分配动作:
- 新索引的建立
- 索引的删除
- 新增副本分片
- 节点增减引发的数据均衡
在动态分配的时候有几个默认值需要注意,当然对应的这些默认值都是可以修改的,具体如下:
- ElasticSearch 默认要求所有分片都正常启动成功以后,才可以进行数据均衡操作,否则的话,在集群重启阶段,会浪费太多的流量
- ElasticSearch 默认可以有 2 个任务同时运行数据均衡。如果有节点增减且集群压力不高的情况下,可以适当增大(可通过 cluster.routing.alloction.cluster_concurrent_rebalance 参数来控制)
- ElasticSearch 默认可以有 2 个任务同时运行数据恢复操作,前提是除了主分片重启恢复以外的情况下。所以,节点重启时,可以看到主分片迅速恢复完成,副本分片的恢复却很慢。除了副本分片本身数据要通过网络复制以外,并发线程本身也减少一半(默认同时又4个主分片恢复)。当然这种设置也是有道理的--> 主分片一定是本地恢复,副本分片却需要走网络,带宽是有限的。
- ElasticSearch 默认当数据磁盘使用量占当前磁盘总空间的 85% 时,新索引分片就不会再分配到这个节点上了。在达到 90% 时,就会触发该节点现存分片的数据均衡,把数据挪到其他节点上去。
2. reroute 接口应用(数据迁移)
reroute 接口支持三种指令:allocate、move 和 cancel,我们最常用的就是 allocate 和 move 指令。
allocate 指令:
因为负载过高等原因,有时候个别分片可能长期处于 unassigned 状态,我们就可以手动分配到指定节点上。默认情况下不允许手动分配副本分片,所以如果是 主分片 故障,我们需要单独加一个 allow_primary 选项:
注意:
如果是历史数据的话,需要提前确认一下哪个节点上保留有这个分片的实际目录,且目录大小最大,然后手动分配到这个节点上,以此来减少数据的丢失。
move 指令:
因为负载过高,磁盘利用率过高,服务器需要下线,更换磁盘等情况。我们此时需要从该节点一走部分分片数据到其他节点上,那么 move 指令就很有用了:
3. 冷热数据读写分离
4. 节点自动发现原理与机制
原文地址:https://www.cnblogs.com/liang1101/p/10177119.html
时间: 2024-10-07 01:52:03