es local gateway是一个功能模块,负责在整个集群重新启动时存储cluster state和shard 数据。主要作用是控制整个集群重启后的恢复时机。试想下这种场景:集群中有9个节点,假设都为master eligible 节点。那么集群重启后需要满足5个节点连接,就可以选举出master。并可以进行recovery操作(将replica copy变为primary copy并且reallocate replica)。如果接下来剩余的节点陆续启动并加入集群,此时recovery或者在进行中,或者已经完成,因为这些节点已经存在了正在recovery的数据,就会造成不必要的recovery(当然es有自己的优化算法,比如如果recovery的shard在节点离开集群后,留在集群中的对应的shard没有数据变更,那么此节点的shard与集群中其他节点的shard是sync的,就会终止recovery操作)。当节点加入集群后,又会造成不必要的Rebalance操作。为了解决这个问题,引入了gateway相关的配置。主要有如下参数:
gateway.recover_after_nodes
:Recover as long as this many data or master nodes have joined the cluster.设置当指定数量的data或者master(node.master: true)节点加入集群后才开始进行恢复操作。即使在此之前已选举出了master节点。
gateway.recover_after_master_nodes
:Recover as long as this many master nodes have joined the cluster.设置当指定数量的master(node.master: true