【生产】elasticsearch滚动升级指引

时间:2022-12-12 17:59:27

ES滚动升级指引

ES的滚动升级允许集群在不中断服务的前提下一次升级一个节点,最终使集群完全升级到指定的版本。

1 升级步骤

1.1 禁用副本分片重分配

关闭某一节点时,集群将等待 index.unassigned.node_left.delayed_timeout(默认情况下为一分钟)后,开始将该节点上的分片重新分配到到其他节点,这可能涉及很多I/O。由于该节点在完成升级后就重新启动,可以在关闭该节点之前禁用副本分片的重分配来避免这些不必要的I/O(但不能禁止主分片的重分配,不然集群无法将位于该节点的主分片对应的副本分片提升为主分片):

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

1.2 依次升级数据节点

  1. 通过执行命令kill $pid停止该节点进程;
  2. 将新版本的es安装包拷贝至安装目录并进行解压,拷贝旧版本es安装目录/config目录下的elasticsearch.yml jvm.options 到新版本es的配置文件夹中;
  3. 若旧版本的elasticsearch.yml中的path.data值为相对路径,则在新版本elasticsearch.yml中需将path.data指向旧版本的数据存放目录;若磁盘空间允许,可以直接将旧数据目录拷贝复制到新安装目录,将旧数据目录作为备份使用。
  4. 通过命令bin/elasticsearch -d启动该数据节点;
  5. 启用副本分片重分配,等待该节点加入集群,等待集群变为green状态
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
  1. 对其他数据节点重复上述过程。

1.3 依次升级主节点:步骤与数据节点升级步骤相同

符合主节点资格的节点(node.master: true)必须在数据节点升级完成之后再进行升级,因为主节点升级后,旧版本的数据节点将无法加入该集群,使得旧版本数据节点的数据不可用导致短暂停服(直到数据节点完成升级后才能重新使用该节点数据)