elasticsearch5.0.0分配的变化Http协议和REST接口的变化

分配的变化,主分片分配

再次之前,当指定数量的分配副本被发现时主分片被分配(这个数量由 index.recovery.initial_shards参数指定,现在已经废弃了)。在这种情况下,如果主分片的配置只有一个副本,就是集群的定义是一个单一的分片,这意味着索引的任何分片拷贝都有可能成为主分片,甚至是一个很久以前的数据。现在通过分配分片IDs来解决这个问题。

分配给分片拷贝一个唯一的IDs作为标志。这允许集群区分有效的相同的数据和路径的多个副本,在集群启动后,只有分片的副本包含最新的数据时才可以成为主分片。

通过分配IDs来代替以前的版本号来识别分片的拷贝,在索引分片存储API中也做了相应的调整。例如:

请求:GET http://127.0.0.1:9200/secilog/_shard_stores

返回值:

{
    ...
   "0": { 
        "stores": [ 
            {
                "sPa3OgxLSYGvQ4oPs-Tajw": { 
                    "name": "node_t0",
                    "transport_address": "local[1]",
                    "attributes": {
                        "mode": "local"
                    }
                },
                "allocation_id": "2iNySv_OQVePRX-yaRH_lQ", 
                "legacy_version": 42, 
                "allocation" : "primary" | "replica" | "unused", 
                "store_exception": ... 
            },
            ...
        ]
   },
    ...
}

在返回的结果中,新的版本返回字段是allocation_id,老版本返回的字段是version。这个字段可用于创建Elasticsearch的当前版本或者在集群中有效的版本中所有分片的拷贝。legacy_version字段可以可以理解为以前版本的version字段。

路由命令在新的版本中有两条命令,allocate_replica 和allocate_empty_primary。我们引入了一个先的命令allocate_stale_primary。allocate_replica命令可以理解为以前设置allow_primary为false的情况,allocate_empty_primary命令可以理解为以前设置allow_primary为ture的情况。

自定义路由命令Elasticsearch不再支持注册自定义配置命令插件。

index.shared_filesystem.recover_on_any_node为true的行为进行了调整,在之前当没有分片的副本被发现时,有可能选择任意的节点,但现在为了考虑平衡进行有选择的分配节点。

分片副本的发现的行为也发生了变化,在之前如果没有满足条件的分片副本则不进行分片副本分配,但现在可以分配分配的副本。

HTTP changes

HTTP协议请求压缩始终被支持,在之前的版本中需要设置http.compressed为true才开启压缩功能。

REST API changes

在以前的REST查询中,如果有无法识别字符串参数将被忽略。从用户的角度来看,这样并不合理,但现在的版本如果有不能识别的字符串参数将返回错误。

自定义id的长度如果超过512则会被拒绝。

/_optimize结尾的请求将被移除,取而代之的是/_forcemerge

在GET方式的HTTP请求中/_forcemerge将不在支持,可以换成用POST方式的请求。

创建索引的方式只能用PUT方式,之前创建所以既可以用PUT也可以用POST。现在只支持PUT方式。

判断索引是否存在的接口HEAD {index}/{type} 被替换成了{index}/_mapping/{type},为了兼容性5.0版本还可以使用,将在6.0版本中移除。

在 /_cluster/stats统计返回值中去掉了mem内存部分。

在接口/_cluster/state的routing table中移除了分片版本号。在集群状态中存储了分片的id,用选择主分片的方式来代替版本信息。

节点角色信息将不再是节点属性的一部分。节点角色在节点统计的返回值中。

禁止不带引号的JSON,此前,JSON文档被允许有不带引号的字段的名称,这种写法不是严谨的JSON格式,如果在之前的ES版本中有不带引号的字段,有些操作可能会报错,因此在jvm.options文件中增加了一个配置-Delasticsearch.json.allow_unquoted_field_names。这个配置将在6.0版本中移除。

过滤接口中的char_filters参数被命名为char_filter。token_filters参数将被移除,用filter代替。

Delete-By-Query插件中的DELETE /_query请求被移除,用Delete By Query接口代替。

PUT /_scripts/{lang}/{id}/_create创建脚本索引被移除,用stored scripts来代替。

PUT /_search/template/{id}/_create创建索引模板被移除。用Pre-registered模板来代替。

有些REST接口的结尾可以增加键值对的方式,现在这种方式被移除。

在_cluster/health以前需要大量的wait_for_relocating_shards参数,现在只需要设置boolean类型的wait_for_no_relocating_shards参数,如果设置为true,表示请求将等待(直到配置超时)的集群返回之前没有分片的搬迁。默认为false,这意味着操作不会等待。

本文由赛克 蓝德(secisland)原创,转载请标明作者和出处。

转载于:https://my.oschina.net/secisland/blog/793931

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值