Plugins 有没有办法访问ElasticSearch插件中的临时群集设置/状态?
我想为插件存储一些在ElasticSearch集群中共享的简单状态(键值对)。(注意——插件不仅仅是一种存储状态的工具/方法,我希望在插件中使用这种状态。)我已经尝试通过集群更新设置API来实现这一点Plugins 有没有办法访问ElasticSearch插件中的临时群集设置/状态?,plugins,elasticsearch,Plugins,elasticsearch,我想为插件存储一些在ElasticSearch集群中共享的简单状态(键值对)。(注意——插件不仅仅是一种存储状态的工具/方法,我希望在插件中使用这种状态。)我已经尝试通过集群更新设置API来实现这一点 Settings newSettings = ImmutableSettings.settingsBuilder() .put(MY_SETTING, MY_VALUE).build(); client.admin().cluster().prepareUpdateSettings()
Settings newSettings = ImmutableSettings.settingsBuilder()
.put(MY_SETTING, MY_VALUE).build();
client.admin().cluster().prepareUpdateSettings()
.setTransientSettings(newSettings).execute().actionGet();
但是,不幸的是,这不起作用,因为MY_设置
未在IndexDynamicSettingsModule
中注册。我不知道如何连接到该模块(可能是它的addDynamicSetting
方法)是否有办法在临时群集设置中存储自定义键值?(c.f.)
至于备选方案,节点状态API似乎可以返回自定义值,但这些是插件计算和返回的更多内容,而不是可以存储为状态的内容。将值存储在静态变量中,并使用广播操作在集群中分发这些值是一种选择,但如果存在,我更喜欢简单的方法
任何解决方案都需要对ElasticSearch版本升级具有合理的鲁棒性
提前谢谢 动态设置的注册方式在0.90中更改。因此,没有同时兼容0.20.x和0.90.x版本的解决方案。对于0.90.x版本,您可以使用
addDynamicSettings
方法注册动态设置:
public class MyPlugin extends AbstractPlugin {
/* ... */
public void onModule(IndexDynamicSettingsModule indexDynamicSettingsModule) {
indexDynamicSettingsModule.addDynamicSettings("index.my.setting");
}
}
至于替代方案,您可以通过实现和注册自己的数据来将数据添加到该州。然后,您可以在主节点上更新集群状态,并在所有节点上侦听插件中的集群状态更改。您有自定义数据工厂用法的示例吗?我一定是做错了;我通过
ClusterState.registerFactory
添加了一个自定义工厂,但是它的方法(readFrom
/writeTo
/toXContent
)似乎都没有被调用。谢谢看看IndexWarmersMetaData。非常感谢。然而,最后,我发现它更简单&只利用Elasticsearch Zookeeper插件,并将我需要的状态值存储在Zookeeper中,不容易出错。(这还有一个额外的好处,就是可以从外部工具查看它们。)如果这个解决方案看起来有用,我可能会发布它。