美文网首页我爱编程
Elasticsearch官档翻译——3 突出的版本变化

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

作者: code4j | 来源:发表于2018-03-09 14:02 被阅读39次

    突出的版本变化

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

    通常的规律:

    • 跨越大版本迁移 —— 例如1.x到2.x —— 需要停集群升级。
    • 小版本迁移 —— 例如1.x到1.y —— 需要滚动升级。
    • 跨越不连续版本迁移 —— 例如 1.x到5.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,它包含了系统配置的日志绝对路径,并且它的前缀用来表示各种日志文件名(主日志文件,过期日志和慢日志)。这个参数已经被下面三个取代了:

    • es.logs.base_path:日志目录绝对路径
    • es.logs.cluster_name:默认的各种日志文件名前缀。
    • es.logs.node_name:如果文件名中需要包含节点名的话,在这里用。
      es.logs参数已经废弃并将在6.0.0版本移除。

    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方法的一些重写

    删除了以下方法:

    • PutRepositoryRequest#source(XContentBuilder)
    • PutRepositoryRequest#source(String)
    • PutRepositoryRequest#source(byte[])
    • PutRepositoryRequest#source(byte[], int, int)
    • PutRepositoryRequest#source(BytesReference)
    • CreateSnapshotRequest#source(XContentBuilder)
    • CreateSnapshotRequest#source(String)
    • CreateSnapshotRequest#source(byte[])
    • CreateSnapshotRequest#source(byte[], int, int)
    • CreateSnapshotRequest#source(BytesReference)
    • RestoreSnapshotRequest#source(XContentBuilder)
    • RestoreSnapshotRequest#source(String)
    • RestoreSnapshotRequest#source(byte[])
    • RestoreSnapshotRequest#source(byte[], int, int)
    • RestoreSnapshotRequest#source(BytesReference)
    • RolloverRequest#source(BytesReference)
    • ShrinkRequest#source(BytesReference)
    • UpdateRequest#fromXContent(BytesReference)

    _timestamp 元数据字段改变

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

    5.1版本变动

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

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

    • _, -, 或 +开头
    • 包含这些字符:#, , /, *, ?, ", <, >, |, ,
    • 超过100个UTF编码字节
    • 使用 ...

    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,

    相关文章

      网友评论

        本文标题:Elasticsearch官档翻译——3 突出的版本变化

        本文链接:https://www.haomeiwen.com/subject/ohudfftx.html