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