草庐IT

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

zmc@ 2023-06-10 原文

版本关系

从官方文档看可以发现两个大版本升级需要关注到具体的版本,比如想从 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 来查询、写入

# 在6版本创建index
PUT zmc
{
 "mappings": {
      "properties": {
        "aa": {
          "type": "keyword"
        }
      }
    }
}

# PUT 一条数据

# 升级到7.17

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

}

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

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

}

# 可以写入
POST zmc/_doc/aa
{
  "aa":"111"
}

# 可以写入
POST zmc/type/bb
{
  "aa":"111"
}


# 可以查到结果
GET zmc/_doc/bb

# 可以查到结果
GET zmc/type/bb

总的来说,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

有关Elasticsearch版本升级实践、注意事项的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  5. ruby-on-rails - 在 ruby​​ .gemspec 文件中,如何指定依赖项的多个版本? - 2

    我正在尝试修改当前依赖于定义为activeresource的gem:s.add_dependency"activeresource","~>3.0"为了让gem与Rails4一起工作,我需要扩展依赖关系以与activeresource的版本3或4一起工作。我不想简单地添加以下内容,因为它可能会在以后引起问题:s.add_dependency"activeresource",">=3.0"有没有办法指定可接受版本的列表?~>3.0还是~>4.0? 最佳答案 根据thedocumentation,如果你想要3到4之间的所有版本,你可以这

  6. ruby-on-rails - 如果我将 ruby​​ 版本 2.5.1 与 rails 版本 2.3.18 一起使用会怎样? - 2

    如果我使用ruby​​版本2.5.1和Rails版本2.3.18会怎样?我有基于rails2.3.18和ruby​​1.9.2p320构建的rails应用程序,我只想升级ruby的版本,而不是rails,这可能吗?我必须面对哪些挑战? 最佳答案 GitHub维护apublicfork它有针对旧Rails版本的分支,有各种变化,它们一直在运行。有一段时间,他们在较新的Ruby版本上运行较旧的Rails版本,而不是最初支持的版本,因此您可能会发现一些关于需要向后移植的有用提示。不过,他们现在已经有几年没有使用2.3了,所以充其量只能让更

  7. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  8. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  9. ruby-on-rails - 如何在发布新的 Ruby 或 Rails 版本时收到通知? - 2

    有人知道在发布新版本的Ruby和Rails时收到电子邮件的方法吗?他们有邮件列表,RubyonRails有一个推特,但我不想听到那些随之而来的喧嚣,我只想知道什么时候发布新版本,尤其是那些有安全修复的版本。 最佳答案 从therailsblog获取提要.http://weblog.rubyonrails.org/feed/atom.xml 关于ruby-on-rails-如何在发布新的Ruby或Rails版本时收到通知?,我们在StackOverflow上找到一个类似的问题:

  10. 叮咚买菜基于 Apache Doris 统一 OLAP 引擎的应用实践 - 2

    导读:随着叮咚买菜业务的发展,不同的业务场景对数据分析提出了不同的需求,他们希望引入一款实时OLAP数据库,构建一个灵活的多维实时查询和分析的平台,统一数据的接入和查询方案,解决各业务线对数据高效实时查询和精细化运营的需求。经过调研选型,最终引入ApacheDoris作为最终的OLAP分析引擎,Doris作为核心的OLAP引擎支持复杂地分析操作、提供多维的数据视图,在叮咚买菜数十个业务场景中广泛应用。作者|叮咚买菜资深数据工程师韩青叮咚买菜创立于2017年5月,是一家专注美好食物的创业公司。叮咚买菜专注吃的事业,为满足更多人“想吃什么”而努力,通过美好食材的供应、美好滋味的开发以及美食品牌的孵

随机推荐