文档章节

Elasticsearch5.2 版本升级说明

仰望星空的伤心胖熊
 仰望星空的伤心胖熊
发布于 2017/02/06 21:58
字数 1509
阅读 266
收藏 2

本文翻译官方原文:

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/restart-upgrade.html

实际比较中,在前面版本的ES升级基本也遵循这个升级方案,这个方案是集群重启升级方案。
Elasticsearch Reference [5.2] » Setup Elasticsearch » Upgrading Elasticsearch » Full cluster restart upgrade

集群整体重启升级

当跨主版本升级的时候,Elasticsearch 需要整个集群重启。主要版本升级不支持滚动升级。你可以查询这个表格,来确认是否需要重启整个集群。

使用集群重启Full cluster restart来执行程序升级的步骤如下:

1、关闭分配分片功能

    当你关闭一个节点的时候, 分配程序会立即尝试复制这个节点上的分片,到集群的其他节点上去,这也成为消耗I/O的原因之一。但这也可以通过在关闭(node节点)之前,关闭分配功能来避免。

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

 

2、执行同步刷新synced-flush

当你停止数据索引并且使用同步刷新请求的时候,分片恢复将会更加快速。

POST _flush/synced

同步刷新请求是“最大努力”操作。只要有任何索引操作,同步刷新都会失败,但在必要的情况下,重新发布请求多次,也是安全的。

 

3、关闭并且升级所有节点

关闭集群中所有节点的Elasticsearch服务。 每一个节点都可以通过相同的步骤来完成升级操作,升级步骤在【升级节点】。

翻译自:

https://www.elastic.co/guide/en/elasticsearch/reference/5.2/rolling-upgrades.html#upgrade-node

升级之前先关闭集群的节点。
    提示:

      当使用zip包或者tarball包,config, data, logs and plugins目录被默认放在了Elasticsearch根目录.
      如果把这些目录放在一个不同的位置实际是一个非常不错的主意,这样子在升级ES的时候,就不会删除这些数据了。这些定制路径可以在path.conf, path.logs, and path.data 里面设置,同时使用 ES_JVM_OPTIONS配置来指定本地的jvm.options配置。
       Debian系统以及RPM包为每种操作系统将这些目录放到了合适的位置。

使用Debian包或者RPM包升级:

  •     使用rpm或者dpkg,安装新的包。所有文件需要被放在本地路径,并且配置文件不得被覆盖。

使用zip或者压缩tar包升级:

  •     将zip包或者tar包放到一个新的路径,并且确认不会覆盖你的配置文件和数据文件的路径。
  •     从老的安装文件中,将config路径下的所有文件复制到新的安装路径中;或者将jvm.options文件的环境变量ES_JVM_OPTIONS设置为本地,并且在命令行中使用 -E path.conf= 命令,指定为外部配置目录。
  •     复制data目录,从原来的安装目录到新的安装目录,或者在config/elasticsearch.yml中设置path.data,来配置本地的数据目录。

4、升级所有组件

升级节点的时候,Elasticsearch组件必须升级。你可以使用elasticsearch-plugin脚本安装你需要的所有插件的正确版本。

 

5、开启集群

如果你有专用的主节点(node.master 设置为true,并且node.data 设置为false ),那最好就先启动他们。 在开启数据节点之前,先等待他们被选为主节点。你可以通过实时查看logs日志,来检查程序进行的阶段。

一旦最少个数具备主节点权限的节点发现了彼此,他们就会从集群中选择出主节点了。 这个时候 _cat/health 以及 _cat/nodes APIs监控加入集群的节点:

GET _cat/health  
GET _cat/nodes

[root@webapp1 ~]# curl -XGET 'http://192.168.61.189:9200/_cat/health' 
1486388923 21:48:43 jsdx-cluster-01 green 4 3 462 231 0 0 0 0 - 100.0% 

[root@webapp1 ~]# curl -XGET 'http://192.168.61.189:9200/_cat/nodes'
192.168.61.189 192.168.61.189  5 23 0.00 - m node0 
192.168.61.190 192.168.61.190 36 73 0.12 d - node1 
192.168.61.193 192.168.61.193 58 69 0.18 d - node3 
192.168.61.192 192.168.61.192 53 71 0.61 d * node2 

使用这个APIs检查所有节点是否已经加入了集群。

 

6、等待状态变为黄色

一旦所有节点均加入了集群,集群将开始恢复所有本地存储的主分片。首先 _cat/health 将会报告status 状态信息是: red,这意味着所有的主分片没有分配完毕。.

当所有节点都回复了本地的分片,状态status就会变成yellow状态了,这意味着所有主分片都被恢复了, 但并不是所有的副本分片 replica shards 都被分配好了。这是预料之中的,因为分配功能还不可用。

 

7、恢复分配allocation 功能

延迟Delaying 分配副本,直到所有节点加入了集群,这样子允许主节点分配副本到那些有本地碎片副本的节点上。至此,所有节点已经加入集群,开启分片分配功能,就是安全的了:(第一步关掉了分配功能)

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

现在,集群将会分配所有副本分片到各个数据节点当中。 至此,重新开启索引及查询功能就是安全的了,但是如果你延迟恢复索引及搜索功能指导所有分片都恢复好了,集群会恢复的更快。

你可以使用: _cat/health and _cat/recovery APIs:

GET _cat/health
GET _cat/recovery   

[root@webapp1 ~]#    curl -XGET 'http://192.168.61.189:9200/_cat/recovery'
ywsoc-penetration           0 176  replica    done 192.168.61.190 192.168.61.192 n/a n/a 16 100.0% 47190   100.0% 16 47190   0  100.0% 0  
ywsoc-penetration           0 35   store      done 192.168.61.190 192.168.61.190 n/a n/a 0  0.0%   0       0.0%   0  0       0  100.0% 0  
ywsoc-penetration           1 16   store      done 192.168.61.192 192.168.61.192 n/a n/a 0  0.0%   0       0.0%   0  0       0  100.0% 0  
ywsoc-penetration           1 145  replica    done 192.168.61.192 192.168.61.193 n/a n/a 25 100.0% 86714   100.0% 25 86714   0  100.0% 0  
ywsoc-penetration           2 35   replica    done 192.168.61.193 192.168.61.192 n/a n/a 1  100.0% 130     100.0% 1  130     0  100.0% 0  
ywsoc-penetration           2 40  

直到_cat/health 命令的status列输出为green, 此时所有主分片及副本分片已经成功被分配了。

© 著作权归作者所有

仰望星空的伤心胖熊
粉丝 0
博文 16
码字总数 9715
作品 0
南京
产品经理
私信 提问
RabbitMQ 3.7.10 发布,Erlang 的 AMQP 开源实现

RabbitMQ 3.7.10 发布了,RabbitMQ 是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 编写而成,因此它也是继承了...

程六金
01/09
989
1
麒麟开源堡垒机 V1.31e 版本发布

麒麟开源堡垒机 V1.31e 版本发布了,本次主要更新: 功能增加: 增加了单用户的登录、权限DEBUG功能,可以为单个用户打开或关闭DEBUG信息 2.动态口令增加了硬件令牌的认证支持(过去为手机令...

网安1476
2016/07/17
1K
4
AEAI DP v3.4.0 升级说明,综合应用开发平台

本次发版的AEAI DP_v3.4.0_20150601版本为AEAI DP _v3.3.0_20150228版本的升级版本,该产品现已开源并上传至开源社区。 升级说明 AEAI DP_v3.4.0_20150601版本是一次常规升级,主要包括:登录...

数通畅联
2015/06/03
1K
0
Xweibo 升级通知

亲爱的站长用户与朋友们: 非常感谢大家使用Xweibo,在此希望大家认真注意下此次升级通知。 已经使用Xweibo产品的网站请于2011年7月20日前尽快升级到Xweibo v2.0及以上版本(下载地址:http:...

红薯
2011/08/04
1K
1
RabbitMQ 3.6.16 和 3.7.6 发布,多协议消息代理

RabbitMQ 3.6.16 和 3.7.6 已发布,RabbitMQ 3.6.16 是一个维护版本,主要包括来自 3.7.x 系列的选定 backports。 建议早期 3.6.x 版本的用户升级到 3.7.x 版本,如 3.7.6。3.7.6 主要包含系...

达尔文
2018/06/14
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
今天
6
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
今天
7
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
今天
5
0
OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
1K
11
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部