[译] Elasticsearch 滚动升级

Elasticsearch 滚动升级

滚动升级容许 Elasticsearch 集群在业务不中断的状况下更新一个节点。集群中不支持同时运行多个版本,由于分片不会重新版本分配到旧版本的节点上。html

从这个列表table中检查当前版本的ES是否支持滚动升级。前端

滚动升级步骤以下:node

第一步: 滚动升级步骤以下:

当你关闭一个节点以后,分片分配进程会尝试当即将分片从当前节点复制到集群上的其余节点,致使浪费了大量的 I/O 操做。要想避免这个问题能够经过在关闭节点前禁用这个进程android

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "none"
  }
}
复制代码

第二步:中止没必要要的索引,并执行同步刷新(这一步可选)

你能够在升级期间愉快的进行索引操做,固然,若是你使用以下命令,中止没必要要的索引,并执行同步刷新synced-flush请求,分片恢复速度会更快:ios

POST /_flush/synced
复制代码

同步刷新是锦上添花的操做。若是出现索引挂起的现象操做就会失败,为了安全起见有必要多试几回。git

第三步:单个节点停机并升级

升级前关闭一个节点。github

注意:当使用 zip 或 tar 包升级,默认状况下 Elasticsearch home 目录下的 config,data,log,plugins 等目录都会被覆盖。 最好解压到不一样的目录,这样升级期间就不会删除原来的目录了。自定义的目录能够经过 path.conf 和 path.data 来设置。 RPM 或 DEB 包会把目录放到 合适的位置后端

使用 rpm/deb ) 安装包升级:安全

  • 使用 rpmdpkg 安装新包,全部的目录都会被放到合理的位置,配置文件不会被覆盖。

使用zip或tar包解压安装:bash

  • 解压安装包,确保不要覆盖 configdata 目录。
  • 从旧的安装目录拷贝 conf 目录到新安装目录,或者使用 --path.conf 选项到外部的config目录
  • 从旧的安装目录拷贝 data 目录到新的安装目录,或修改 config/elasticsearch.yml 中的 path.data 设置 data 目录为原来的目录。

第四步:启动升级过的节点

启动升级后的节点并确认加入到集群中,能够经过日志或下面的命令来确认:

GET _cat/nodes
复制代码

第五步:从新打开分片再平衡

一旦节点从新加入集群,解禁分片分配进程再平衡:

PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.enable": "all"
  }
}
复制代码

第六步:等待节点恢复正常

等待集群分片平衡结束后,再升级下一个节点。这一过程可使用_cat/health命令检查:

GET _cat/health
复制代码

等到 status 这一列由 yellow 变成 green,Green 表示主分片和副本都分配完了。

重点:滚动升级过程当中,高版本上的主分片不会把副本分配到低版本的节点,由于高版本的数据格式老版本不认。 若是高版本的主分片无法分配副本,换句话说若是集群中只剩下了一个高版本节点,那么节点就保持未分配的状态,集群健康会保持 yellow。 这种状况下,检查下有没有初始化或分片分配在执行。 一旦另外一个节点升级结束后,分片将会被分配,而后集群状态会恢复到 green

没有使用同步刷新的分片恢复时间会慢一点。分片的状态能够经过_cat/recovery请求监控:

GET _cat/recovery
复制代码

若是你在这以前中止索引操做,那么在节点恢复完成以后重启也是安全的。

第七步:重复上述步骤

当集群稳定而且节点恢复后,对剩下的节点重复上述过程。


掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 AndroidiOS前端后端区块链产品设计人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划官方微博知乎专栏

相关文章
相关标签/搜索