gateway模块用于存储es集群的元数据信息。这部分信息主要包括所有的索引连同索引设置和显式的mapping信息。集群元数据的每一次改变(比如增加删除索引等),这些信息都要通过gateway模块进行持久化。当集群第一次启动的时候,这些信息就会从gateway模块中读出并应用。

设置在node级别上的gateway会自动控制索引所用的gateway。比如设置了local gataway,则每一个在这个node上创建的index都会应用他们在索引级别的local gateway。如果索引不需要持久化状态,需要显式的设置为none(这也是唯一可以设置的值)。默认的gateway设置是local gateway。

1:recovery after nodes/time

在一些场景下,集群的元数据信息只有在集群中一些节点启动之后或者一段时间间隔之后才能够恢复。这在集群重启的时候非常有用,而且可以充分利用节点的本地存储来从gateway模块中恢复数据(这将会大大缩短集群的恢复时间)。下边给出一些配额项的说明:

gateway.recovery_after_nodes:集群启动恢复进程需要多少个节点启动(包括master 和 data)

gateway.recovery_after_data_nodes:集群启动恢复进程需要多少个数据节点启动

gateway.recovery_after_master_nodes:集群启动恢复进程需要多少个master节点启动

gateway.recovery_after_time:在recovery_after_*_nodes个节点启动后,需要等到多长时间,再启动集群恢复进程。

gateway.expected_nodes:期望多少个节点(包括master和data)进入集群后,启动恢复。一旦满足,gateway.recovery_after_time参数将忽略。

gateway.expected_data_nodes:期望多少个数据节点进入集群后,启动恢复。

gateway.expected_master_nodes:期望多少个master节点进入集群后,启动恢复。

给出一个配置例子:

gateway:
    recover_after_time: 5m
    expected_nodes: 2
上述配置表明:集群启动后5分钟启动恢复,但是一旦节点数目达到2,立刻启动回复。

注意:一旦元数据已经从gateway模块中恢复,这些配置将不再有效,直至下次集群全部重启。

在恢复元数据过程中,所有操作都将堵塞,为了避免和集群真实的元数据产生冲突。

2:local gateway

local gateway从每个节点的本地存储中恢复集群状态和索引,不需要节点之间的共享存储。跟共享类型的gateway不同,local gateway的持久化是同步的,一旦一个操作执行了,数据就马上会持久化,供集群恢复使用。

配置gateway.recovery_after_nodes使其在绝大多数节点启动后再进行恢复是非常重要的。这将会确保恢复到最近的集群状态。,例如

gateway:
    recover_after_nodes: 3
    expected_nodes: 5

2.1 dangling indices

当集群中加入新节点的时候,新节点/data目录下的数据如果在集群中不存在,默认会直接导入集群,这个功能有两个主要用途

第一:如果一个新的maste节点启动,并位感知到其他旧节点存储的索引信息,这时候添加旧节点会导入索引数据,避免数据被删除。

第二:一个旧的索引可以直接copy它的data目录到一台新机器,然后将新机器加入集群,这时候数据就会导入集群,带replica满足要求后(旧索引会自动copy到其他节点上),就可以把机器移除了。

这个功能可以通过gateway.local_auto_import_dangled设置:

yes:将索引导入集群(default)

close:将索引导入集群,但是close状态

no:gateway.local_dangling_timeout时间后删除索引,默认2小时。


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐