- 原文地址:Rolling upgrades
- 原文做者:elastic.
- 译文出自:掘金翻译计划
- 本文永久连接:github.com/xitu/gold-m…
- 译者:code4j
- 校对者:Xekin-FE, ClarenceC
滚动升级容许 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 ) 安装包升级:安全
rpm
或 dpkg
安装新包,全部的目录都会被放到合理的位置,配置文件不会被覆盖。使用zip或tar包解压安装:bash
config
和 data
目录。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
复制代码
若是你在这以前中止索引操做,那么在节点恢复完成以后重启也是安全的。
当集群稳定而且节点恢复后,对剩下的节点重复上述过程。
掘金翻译计划 是一个翻译优质互联网技术文章的社区,文章来源为 掘金 上的英文分享文章。内容覆盖 Android、iOS、前端、后端、区块链、产品、设计、人工智能等领域,想要查看更多优质译文请持续关注 掘金翻译计划、官方微博、知乎专栏。