如何将正在运行的Elasticsearch旧实例升级到更新版本?

Jon*_*Moo 36 elasticsearch

基本上我找不到解释将正在运行的Elasticsearch实例升级到当前版本的过程的文档或资源.

请在几个场景中帮助我:

  1. 如果我在单个服务器中运行Elasticsearch实例,如何升级实例而不丢失数据?

  2. 如果我在多个服务器中运行多个Elasticsearch实例,那么在升级Elasticsearch实例而不丢失数据的同时,如何保持运行运行?

如果有正确的程序或解释,这将极大地帮助我理解和工作.谢谢!

imo*_*tov 23

  1. 所有节点数据都存储在elasticsearch数据目录中.默认情况下,它是elasticsearch home中的data/cluster_name/nodes.因此,通常,只要保留数据目录并且新版本中的配置文件与旧版本兼容,新实例应具有与旧版本相同的数据.请注意,某些版本在发行说明中列出了特殊的附加要求.例如,从0.18升级到0.19需要发出集群中所有索引的完全刷新.

  2. 实现这一点真的没有好办法.节点使用不向后兼容的二进制协议进行通信.因此,如果新版本中的协议发生更改,则旧节点和新节点无法相互理解.有时可以在同一个集群中混合具有不同次要版本的节点并进行滚动升级.但是,据我所知,即使在次要版本中,也没有明确保证节点之间的兼容性,主要版本总是要求完全集群重启.如果无法选择完全集群重启期间的停机时间,DrTech的一项不错技术可能是一种解决方案.

  • 目前,如果您使用插件,还有一些插件目录可能很重要.未来的elasticsearch版本可能会添加新目录.因此,将旧的elasticsearch/data和elasticsearch/config目录放入新安装中可能会更好.具有替换数据和配置目录的新弹性搜索实例应自动将数据更新到新版本并开始工作.请注意,旧版本的elasticsearch将不再适用于更新的数据目录. (4认同)

Ale*_*leš 13

现在有很多关于ElasticSearch升级的信息比以前更多.

以下是升级ElasticSearch时的常用步骤:

  1. 备份数据:快照和还原

  2. 升级指南:升级ElasticSearch

主要思想是一次关闭一个ES集群实例,升级该实例节点上的ES版本,然后重新启动它以便它可以加入集群.

简而言之,以下是重要步骤:

  1. 禁用Shard重新分配

    curl -XPUT localhost:9200/_cluster/settings -d'{"transient":{"cluster.routing.allocation.enable":"none"}}'

  2. 关闭实例:

    curl -XPOST 'http://localhost:9200/_cluster/nodes/_local/_shutdown'

  3. 在主机上安装新的ElasticSearch版本并启动它.

  4. 启用分片重新分配:

    curl -XPUT localhost:9200/_cluster/settings -d'{"transient":{"cluster.routing.allocation.enable":"all"}}'

  5. 监视集群从yellow州到green:

curl -X GET http:// localhost:9200/_cat/health?v //监视整个集群状态

curl -X GET http:// localhost:9200/_cat/nodes?v //验证新节点是否加入了集群

curl -X GET http:// localhost:9200/_cat/shards?v //查看正在启动,初始化和重新定位的分片

  1. 重复下一个节点.

在排序方面,首先更新主节点,然后更新数据节点,然后更新负载平衡/客户端节点.


小智 6

值得一提的是,现在有关于进行此升级的文档,但它对搜索结果的排名并不高:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-upgrade.html

以及一个重大变化文件:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/breaking-changes.html