文档章节

Elasticsearch 2.3.0 老版本升级指南

赛克蓝德
 赛克蓝德
发布于 2016/05/10 12:34
字数 1717
阅读 1275
收藏 17

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

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

从1.x到2.x需要全集群重启。

从2.x到2.y可以不用全部重启,使用滚动升级完成(y>x)。

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

在每个节点上升级和重启的过程为:
1、关闭Elasticsearch
2、升级Elasticsearch
3、升级插件
4、启动Elasticsearch

集群重启步骤:

1、关闭分片分配。

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

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

2、执行一个同步刷新

当停止一个索引的时候,分片的恢复会很快,所以要进行同步刷新请求。

POST /_flush/synced

同步刷新请求是非常有效的一种操作,当任何索引操作失败的时候,可以执行同步刷新请求,必要的时候可以执行多次。

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

4、启动集群

如果你有专门的主节点(node.master 节点设置为true和node.data设置为false),则先启动主节点。等待它们形成一个集群,然后选择一个主数据节点进行启动。你可以通过查看日志来检查启动情况。通过下面命令可以监控集群的启动情况,检查所有节点是否已成功加入群集。

GET _cat/health

GET _cat/nodes

5、等待黄色集群状态

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

6、重新分配

延迟的副本的分配直到所有节点都加入集群,在群集的所有节点,可以重新启用碎片分配:

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

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

GET _cat/health

GET _cat/recovery

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

赛克蓝德 secisland  

滚动升级

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

1、关闭分片分配。

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

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

2、停止不必要的索引和执行同步刷新(可选)

您可以在升级过程中继续索引。然而,如果你暂时停止不必要的索引碎片,但它恢复要快得多。所以可以执行同步刷新操作。

POST /_flush/synced

同步刷新请求是非常有效的一种操作,当任何索引操作失败的时候,可以执行同步刷新请求,必要的时候可以执行多次。

3、停止和升级一个节点

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

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

4、启动升级节点

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

GET _cat/nodes

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

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

6、等待节点恢复
你应该等待集群升级的下一个节点之前完成碎片分配。可以通过以下接口进行检查:

GET _cat/health

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

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

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

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

GET _cat/recovery

如果你停止了索引,那么恢复索引的恢复是安全的。

7、重复其他节点

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

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

© 著作权归作者所有

共有 人打赏支持
赛克蓝德
粉丝 290
博文 118
码字总数 146834
作品 2
南京
高级程序员
渣渣菜鸡为什么要看 ElasticSearch 源码?

前提 人工智能、大数据快速发展的今天,对于 TB 甚至 PB 级大数据的快速检索已然成为刚需,大型企业早已淹没在系统生成的浩瀚数据流当中。大数据技术业已集中在如何存储和处理这些海量的数据...

Java小铺
08/10
0
0
Elasticsearch 集群版本升级步骤及注意事项

1、升级前的准备工作 从Elasticsearch 的官方网站 https://www.elastic.co/downloads/elasticsearch 下载最新版本的Elasticsearch,为了线上方便对数据包的管理,一版选择 .gz.tar 格式或者 ...

Galen_Z
2015/05/29
0
2
Elasitcsearch High Level Rest Client学习笔记(一)

文档地址:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.1/java-rest-high.html java doc地址: https://artifacts.elastic.co/javadoc/org/elasticsearch/client/el......

木子SMZ
07/12
0
0
elasticsearch搜索引擎相关资料(更新中)

最近需要用到elasticsearch搜索引擎,所以搜集了很多相关资料,先放在这里(未详细整理) 一、步骤总结:(linux环境下) 1. 安装 (1)下载elasticsearch安装包:http://www.elasticsearch....

核桃人
03/08
0
0
乞丐亦异/ansible-elk-deploy

Deploy ELK stack, ready for production. Note All settings are use default value. I re-command you to have at least 3 nodes(8CPUs, 16GB memory, 128GB free disk space) to deploy y......

乞丐亦异
07/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IE浏览器http请求,中文传参报400错误-解决方法

做项目的时候,遇到一个小的问题.一个get请求列表数据的接口,在其它浏览器上是可以正常请求的.但是在ie浏览器上确出现奇怪的http请求400错误,其含义是你访问的页面域名不存在或者请求错误,自...

青衫旧巷
15分钟前
1
0
Spring中@RequestParam与@PathVariable的区别

@RequestParam与@PathVariable为spring的注解,都可以用于在Controller层接收前端传递的数据,不过两者的应用场景不同。 @PathVariable主要用于接收http://host:port/path/{参数值}数据。@Re...

王子城
19分钟前
0
0
数据运营者的福音:海量数据处理利器Greenplum

作者:李树桓 个推数据研发工程师 前言:近年来,互联网的快速发展积累了海量大数据,而在这些大数据的处理上,不同技术栈所具备的性能也有所不同,如何快速有效地处理这些庞大的数据仓,成为...

个推
19分钟前
1
0
进程和线程的区别介绍

1、首先是定义 进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。 线程...

linuxprobe16
20分钟前
1
0
IntelliJ IDEA 工具的学习与使用

当前标签: IntelliJ IDEA IntelliJ IDEA(十一) :Debug的使用 JaJian 2018-08-04 02:32 阅读:402 评论:0 IntelliJ IDEA(十) :常用操作 JaJian 2018-05-22 18:43 阅读:1272 评论:0 Inte......

glen_xu
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部