elasticsearch 如何将正在运行的Elasticsearch旧实例升级到新版本?,elasticsearch,elasticsearch" /> elasticsearch 如何将正在运行的Elasticsearch旧实例升级到新版本?,elasticsearch,elasticsearch" />

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

elasticsearch 如何将正在运行的Elasticsearch旧实例升级到新版本?,elasticsearch,elasticsearch,基本上,我找不到解释将正在运行的Elasticsearch实例升级到当前版本的过程的文档或资源 请在以下几个场景中帮助我: 如果我在一台服务器上运行Elasticsearch实例,如何 我升级实例而不丢失数据 如果我在多台服务器上运行多个Elasticsearch实例,如何在升级Elasticsearch实例时保持操作运行而不丢失数据 如果有适当的程序或解释,这将大大有助于我的理解和工作。谢谢 所有节点数据都存储在elasticsearch数据目录中。在elasticsearch home中默认

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

请在以下几个场景中帮助我:

  • 如果我在一台服务器上运行Elasticsearch实例,如何 我升级实例而不丢失数据

  • 如果我在多台服务器上运行多个Elasticsearch实例,如何在升级Elasticsearch实例时保持操作运行而不丢失数据

  • 如果有适当的程序或解释,这将大大有助于我的理解和工作。谢谢

  • 所有节点数据都存储在elasticsearch数据目录中。在elasticsearch home中默认为data/cluster\u name/nodes。因此,一般来说,只要保留数据目录,并且新版本中的配置文件与旧版本兼容,新实例就应该具有与旧实例相同的数据。请注意,某些版本具有中概述的特殊附加要求。例如,从0.18升级到0.19需要对集群中的所有索引进行完全刷新

  • 要做到这一点,真的没有好办法。节点使用不向后兼容的二进制协议进行通信。因此,如果新版本中的协议发生变化,旧节点和新节点将无法相互理解。有时,可以在同一集群中混合具有不同次要版本的节点并进行滚动升级。然而,据我所知,即使在次要版本中,节点之间的兼容性也没有明确的保证,而主要版本总是要求完全重新启动集群。如果不能选择在完全群集重新启动期间停机,那么by可能是一个解决方案


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

    以及一份突破性的更改文档:


    如果您运行的是Ubuntu或基于Debian的Linux,这里有一个Ansible脚本,可以执行滚动升级,只要您不在主要版本之间升级

    次要版本,如1.3->1.4.3可以

    主要版本如0.8->1.4.3将不起作用


    它可以很容易地修改以与基于RHEL的linux一起使用(只需更改两行)

    现在关于ElasticSearch升级的信息比以前多得多

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

  • 备份数据:

  • 升级指南:

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

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

  • 禁用碎片重新分配

    curl-XPUT localhost:9200/_cluster/settings-d'{ “暂时的”:{ “群集.路由.分配.启用”:“无” } }"

  • 关闭实例:

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

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

  • 启用碎片重新分配:

    curl-XPUT localhost:9200/_cluster/settings-d'{ “暂时的”:{ “群集.路由.分配.启用”:“全部” } }"

  • 通过以下操作,观察仪表盘从
    黄色
    状态变为
    绿色

  • curl-xget//监视整个集群状态

    curl-X GET//验证新节点是否已加入群集

    curl-X GET//查看正在启动、初始化和重新定位的碎片

  • 对下一个节点重复此操作

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

    其他答案根据现在的情况有点过时,因此这些新信息将补充Elasticsearch的更新版本,如将6.x升级到7.x,或将5.x升级到6.x。Elasticsearch升级有两个主要选项:或

    滚动升级允许一次升级一个节点,因此服务不会中断。另一方面,完全集群重启需要关闭、升级每个节点,然后重新启动。这意味着必须考虑升级之间的停机时间


    与几年前相比,这要容易得多,当时唯一可行的选择是快照和恢复。

    这里有两篇关于这个问题的文章,我非常喜欢

    基本上,方法是启动一个新的集群(使用您想要的最新ElasticSearch版本),通过更改代码使其在两个(旧的和新的)集群中索引新的/更新的实体来保持数据同步,并开始对新集群进行完全重新索引

    此时,关于您的数据,您应该有两个完全同步的集群。这样,您就可以开始将读取功能插入到新集群中,了解它的运行情况,可能会修复发出ES请求的代码(在您当前的ES版本和您想要使用的新版本之间),如果需要,可以轻松回滚到旧集群

    一旦一切正常,您就可以开始插入写入/更新功能。。。最终在几周或几个月后关闭旧集群

    它非常灵活,但这取决于您所面临的用例/时间线。 可能存在的主要问题是:旧集群的映射是否与新集群完全兼容


    希望有帮助!祝您度过愉快的一天:)

    我明白了,因此基本上,在目录中的单个Elasticsearch实例中,我们只需替换Elasticsearch/bin和Elasticsearch/lib文件夹,保留Elasticsearch/data文件夹和新版本的elasticse