我爱编程

Elasticsearch官档翻译——3 突出的版本变化

2018-03-09  本文已影响39人  code4j

突出的版本变化

译者批注:这一章译者选择翻译5.5版本的变化,因为全文主要讲解2.x版本,所以有必要了解高版本的新特性
这一章主要讨论版本之间的不同,特别是当你要从一个版本迁移数据到另一个版本的时候,你需要注意。

通常的规律:

详细请看集群升级


5.5版本变动

忽略隐藏文件夹

之前的版本会跳过plugin目录下面的隐藏文件夹,这样会导致损坏的插件安装后不会被ES探查到,所以这个宽泛的特性被移除了。

跳过内核参数设置

Elasticsearch在安装的时候尝试设置vm.max_map_count参数(译者批注:译者看了下2.2版本的启动脚本确实有执行sysctl -q -w vm.max_map_count=$MAX_MAP_COUNT),在某些系统下可能失败。在早先的版本,ES接受一个ES_SKIP_SET_KERNEL_PARAMTERS参数来跳过内核参数设置。从Elasticsearch5.5.0开始,取消这个参数以及相应的功能,可以通过systemd-sysctl操作来实现相同的效果。

RPM/DEB安装包在/etc/elasticsearch下配置了 setgid

现在RPM/DEB安装包中在/etc/elasticsearch里设置了 setgid,这样任何在/etc/elasticsearch目录下的文件或子目录都属于同一个组(root:elasticsearch)。主要是保证这个目录下创建的文件都对elasticsearch用户可读。

获取别名和获取映射 API 返回404

之前的版本,在请求获取别名 和get mapping 两个api的时候,无论什么情况都不会返回404。在Elasticsearch5.5版本后,当获取别名或获取映射不存在的时候,返回404.

Java API改变

has_childhas_parentparen_id等查询都放到了 parent-join模块。children聚合也放到了这个模块下。parent-join模块需要在TransportClient使用的时候加载。或者当要动态加载模块时,使用PreBuiltTransportClient替代


5.4版本变动

Delete_By_Query API改变

Delete_By_Query的请求体必须有查询条件,不包含请求体的Delete_By_Query在6.0.0是不合法的。


5.3版本变动

日志配置

此前的版本Elasticsearch暴露了一个系统参数 es.logs,它包含了系统配置的日志绝对路径,并且它的前缀用来表示各种日志文件名(主日志文件,过期日志和慢日志)。这个参数已经被下面三个取代了:

Netty 3 被废弃

Netty 3中的transport(transport.type=netty3)和Http(http.type=netty3)在6.0.0被废弃

弱检查的布尔值被废弃

布尔值 除了false , “false” 和 true “true” 其他都被废弃(译者批注:2.2中有些配置支持使用 yes no)。REST API和映射配置中也废弃了这种使用方式


5.2版本变动

启动检查系统调用

Elasticsearch自2.1.0版本开始试图加入系统调用过滤器。在某些系统中,系统调用过滤器可能导致失败。在早先的版本会加入waring日志记录,但是会继续执行,可能用户并不知道这个情况。从5.2.0版本开始加入启动检查系统调用,看是否成功。如果你启动的时候因为这个检查而出问题了,你需要检查是需要修改配置中的系统调用过滤器,还是自担后果去掉这个系统调用过滤器。

系统参数过滤器配置

简单说就是bootstrap.seccomp这个参数被更名为:bootstrap.system_call_filter。前者仍旧支持但是6.0版本会被移除。

Java API删除了source方法的一些重写

删除了以下方法:

_timestamp 元数据字段改变

timestamp元字段的类型由java.lang.String改成了java.util.Date

5.1版本变动

别名添加了和索引名几乎相似的校验规则

现在别名添加了和索引名几乎相似的校验规则。唯一不同的是别名允许使用大写字母。意味着别名不允许使用如下规则:

5.1.0版本以前上述规则的别名还支持,但是现在不支持了。由于使用_aliases API 修改别名实际上是删除别名再自动重新创建一个,修改别名如果非法也不再支持。

Log4j的依赖版本升级

Log4j的版本从2.6.2升级到2.7。如果你使用transport client,需要更新相应的Log4j版本

节点本地发现已经移除

节点本地发现已经移除。这种发现机制的实现,用于内部的tribe服务以及在同一个JVM环境下运行多个节点的测试。这意味着设置discovery.typelocal启动elasticsearch将会失败。

UnicastHostsProvider 现在基于拉的模式

插件基于zen发现的UnicastHostsProvider现在采用拉的模式。实现DiscoveryPlugin类并覆盖getZenHostsProviders方法。现在也可以通过discovery.zen.hosts_provider配置 hosts_provider类型。

ZenPing和主节点选举服务的可插拔特性取消

ZenPing还有选举服务类都不支持可插拔了。有必要的话,要么自己实现发现,要么扩展ZenDiscovery

onModule支持移除

之前通过Guice注入模块的插件可以实现一个onModule方法。插件中所有自定义onModule方法的实现都被转换成基于拉的插件。onModule这个hook被移除。
译者批注:源码大概看了下,2.2版本中,节点启动时先加载插件,然后读取插件中的onModule方法并把plugin对应的module作为参数传递进去。这个方法并不是plugin类要求继承的,而是一个约定

索引的stats和节点的statsAPI中无法识别的参数

索引和节点的stats API允许查询Elasticsearch中无法识别的一些指标。在之前的版本会默认接受这些不识别的参数(例如 transport)。在5.1.0中这个情况不再发生;不能识别的参数将导致请求失败。5.0.0移除的这个特性在5.1.0以及之后的5.x系列会给出警告,但是6.0之后会和其他不识别的参数一样,导致请求失败。


5.0版本变动

这一张讲解5.0的变动,当你迁移集群到这个版本时你要注意。

迁移插件

当你升级到Elasticsearch 5.0后,elasticsearch-migration插件(2.3以上的版本)会帮你发现需要解决的问题

5.0之前版本创建的索引

Elasticsearch5.0可以解析2.0之后创建的索引,但是2.0之前的索引无法识别,节点启动会失败。

初次启动Elasticsearch 5.0,他将会自动重命名索引目录,目录命名由原来的索引名改成索引的UUID,

上一篇下一篇

猜你喜欢

热点阅读