Elasticsearch版本升级实践、注意事项

版本关系

从官方文档看可以发现两个大版本升级需要关注到具体的版本,比如想从 5.x 版本升级到 7.x 版本,就必须先升级到 6.8 版本,再从 6.8 升级到 7.x 版本。

检查是否可以升级

1. 版本号确认

2. 通过API检查是否存在过期的用法

	# ES 6.x
	GET /_xpack/migration/deprecations?filter_path=index_settings

    # ES 7.x
	GET /_migration/deprecations?filter_path=index_settings

    关注其中的critical的整改项;

    

3. 可以查看segment信息,检查是什么版本的lucene(也就可以知道ES版本)创建的,例如5.x创建的索引,即使已经升级到6.8版本,想要升级到7.17,依然需要重建索引。

异常

如果出现不兼容的情况,ES节点无法启动。

注意事项

1. 客户端

ES不同版本的客户端,可以说是非常乱了,抛开非官方推荐的client(jest、bboss等),依然有很多不兼容的地方。

这里简单列一些结论:(仅包括 rest-high-level-client)

7.5 的 client 可以访问 6.8 的集群

6.8 的 client 可以访问 7.5 的集群

6.8.23 的 client 的版本可以访问 7.17.5 的集群

7.17.5 的 client 不能访问 6.8.5 集群 ("message": "Elasticsearch exception [type=exception, reason=Content-Type header [application/vnd.elasticsearch+json; compatible-with=7] is not supported]")

2. type

ES 的 type 也是比较尴尬的地方,带有历史债的场景,改动相对不那么平滑。

ES6.8 创建带 type 的 index,直接升级到 7.17,可以通过 带type/_doc 来查询、写入

# ES6 PUT一个索引
PUT zmc
{
  "mappings": {
    "type1": {
      "properties": {
        "aa": {
          "type": "keyword"
        }
      }
    }
  }
}

# POST 一条数据
POST zmc/type1
{
  "aa": "test"
}

GET zmc/_search



# 升级到7.17



# 执行,可以查到结果
GET zmc/type1/_search
{
 
}

# 执行,可以查到结果
GET zmc/_search
{
  
}

# 执行,不可以查到结果
GET zmc/_doc/_search
{
 
}
 
# 可以写入
POST zmc/type1
{
  "aa":"222"
}

# 可以写入,这里实际存储的type依然是升级之前的 "_type": "type1",而不是_doc
POST zmc/_doc
{
  "aa":"111"
}

# 可以写入
POST zmc/type1/id1
{
  "aa":"333"
}

# 可以查到结果
GET zmc/_doc/id1
 
# 可以查到结果
GET zmc/type1/id1


# ES7 PUT一个索引
PUT zmc_new
{
  "mappings": {
    "properties": {
      "aa": {
        "type": "keyword"
      }
    }
  }
}


# 可以写入数据
POST zmc_new/_doc
{
  "aa":"111"
}

# 报错,Invalid type: expecting [_doc] but got [type2]
POST zmc_new/type2
{
  "aa":"111"
}
 
# 可以查到结果
GET zmc_new/_search

# 可以查到结果
GET zmc_new/_doc/_search

# 无法查到结果,说明ES7新建的索引(非升级场景)即使没有type的概念,如果随便传一个type,也是查不到数据的,要么不传,要么传_doc
GET zmc_new/type2/_search

总的来说,7.17会对6.8集群创建的带type的index进行兼容,需要注意读写语句的写法,可以看到上面的测试,建议读写都带上type。(当然,升级完成后type肯定还是要去掉的)

注:7.x/8.x 对_doc不再视为一个默认的type,而且查询中的一个永久的路径。

升级流程

1.API检查是否可以升级,不能则先改造

2.升级ES集群(此时依然使用6.8客户端,兼容访问6.8/7.17集群)

3.重建索引(去掉type)

4.修改客户端代码 & 升级客户端版本到 7.17

注:如果发现是5版本创建的索引,得先重建索引,再升级集群,再重建索引。

参考

官方文档:

1. Reindex before upgrading | Elasticsearch Guide [7.17] | Elastic

2. Rolling upgrades | Elasticsearch Guide [7.17] | Elastic

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值