Elasticsearch 2.3.0 老版本升级指南

    Elasticsearch一般可使用滚动升级过程,致使服务不中断。本文详细介绍如何执行滚动升级与集群的升级重启。Elasticsearch不是全部版本均可以直接升级。升级前请先查阅相关文档,而后进行数据备份,最好在测试环境下模拟作一遍。升级能够参照如下内容。node

从0.90.x到2.x须要全集群重启。安全

从1.x到2.x须要全集群重启。数据结构

从2.x到2.y能够不用所有重启,使用滚动升级完成(y>x)。测试

插件问题,在升级的时候,同时要考虑到插件问题,最好插件的版本和Elasticsearch版本一致。spa

在每一个节点上升级和重启的过程为:
一、关闭Elasticsearch
二、升级Elasticsearch
三、升级插件
四、启动Elasticsearch
插件

集群重启步骤:

一、关闭分片分配。日志

当咱们视图关闭一个节点的时候,Elasticsearch会当即试图复制这个节点的数据到集群中的其余节点上。这将致使大量的IO请求。在关闭该节点的时候能够经过设置一下参数来避免此问题的发生。code

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

二、执行一个同步刷新索引

当中止一个索引的时候,分片的恢复会很快,因此要进行同步刷新请求。接口

POST /_flush/synced

同步刷新请求是很是有效的一种操做,当任何索引操做失败的时候,能够执行同步刷新请求,必要的时候能够执行屡次。

三、关闭和升级全部节点
中止在群集中的全部节点上的服务。每个节点都要进行单独升级。这个主要就是文件替换操做,注意保留日志目录。

四、启动集群

若是你有专门的主节点(node.master 节点设置为true和node.data设置为false),则先启动主节点。等待它们造成一个集群,而后选择一个主数据节点进行启动。你能够经过查看日志来检查启动状况。经过下面命令能够监控集群的启动状况,检查全部节点是否已成功加入群集。

GET _cat/health

GET _cat/nodes

五、等待黄色集群状态

当节点加入集群后,它首先恢复存储在本地的主分片数据。最初的时候,经过 _cat/health请求发现集群的状态是红色,意味着不是全部的主分片都已分配。当每一个节点都恢复完成后,集群的状态将会变成黄色,这意味着全部主分片已经被找到,可是并非全部的复本分片都恢复。

六、从新分配

延迟的副本的分配直到全部节点都加入集群,在群集的全部节点,能够从新启用碎片分配:

PUT /_cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "all"
  }
}

这个时候集群将开始复制全部副本到数据节点上,这样能够安全的恢复索引和搜索,若是你能延迟索引和搜索直到全部的碎片已经恢复,这样能够加快集群的恢复。能够经过下面API监控恢复的进度和健康状况:

GET _cat/health

GET _cat/recovery

最后当集群的状态出现为绿色的时候,表示本次集群升级所有完成。

赛克蓝德 secisland  

滚动升级

滚动升级容许Elasticsearch集群升级一个节点,同时又不影响系统的使用。在同一个集群中的全部节点的版本最好保持一致,不然可能会产生不可预知的后果。滚动升级的步骤以下:

一、关闭分片分配。

当咱们视图关闭一个节点的时候,Elasticsearch会当即试图复制这个节点的数据到集群中的其余节点上。这将致使大量的IO请求。在关闭该节点的时候能够经过设置一下参数来避免此问题的发生。

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}

二、中止没必要要的索引和执行同步刷新(可选)

您能够在升级过程当中继续索引。然而,若是你暂时中止没必要要的索引碎片,但它恢复要快得多。因此能够执行同步刷新操做。

POST /_flush/synced

同步刷新请求是很是有效的一种操做,当任何索引操做失败的时候,能够执行同步刷新请求,必要的时候能够执行屡次。

三、中止和升级一个节点

在启动升级前,将节点中的一个节点关闭。能够经过绿色解压安装或者经过rpm等安装包安装。

不论是解压安装仍是压缩包安装都要保留以前的数据文件不能被破坏。能够在新的目录中安装,把path.conf和path.data的位置指向以前的数据。

四、启动升级节点

启动“升级”节点,并经过接口检查是否正确:

GET _cat/nodes

五、启用共享配置
一旦节点加入群集,在节点从新启用碎片分配:

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "all"
  }
}

六、等待节点恢复
你应该等待集群升级的下一个节点以前完成碎片分配。能够经过如下接口进行检查:

GET _cat/health

等待的状态栏从黄到绿色。现态绿色意味着全部主分片和副本分片已经完成分配。

重要:在滚动升级期间,主碎片被分配到一个更高版本节点不会有副本分配到一个较低的版本节点,,由于新版本的数据结构可能旧版本不能识别。

一旦另外一个节点升级,副本将被分配,群集的健康状态将达到绿色。

没有同步刷新碎片可能须要一些时间来恢复。恢复的状态和每一个节点的监控能够用如下接口。

GET _cat/recovery

若是你中止了索引,那么恢复索引的恢复是安全的。

七、重复其余节点

当集群是稳定的,节点已经恢复,重复上述步骤,把全部剩余的节点进行升级。

赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入secisland公众号进行关注。