Elasticsearch 1.7 热更新

搜索是一个需要不停改进的项目,有时我们需要更新分词插件,有时我们想升级ES版本,这些动作的生效都需要重启ES服务。我们当然不希望重启线上服务导致用户无法使用搜索功能,好在ES支持rolling upgrade的方式进行热更新,以下是操作步骤建议:

// 1.确保每个Index至少有一份复制分片
 
// 2.禁止ES的分片动态平衡机制(shard reallocation)
curl -XPUT localhost:9200 /_cluster/settings -d '{
         "transient" : {
             "cluster.routing.allocation.enable" : "none"
         }
}'
 
// 3.将translog持久化到硬盘上(flush translog)
 
// 4.登录到一个节点上,停止ES服务
service elasticsearch stop
 
// 5.执行更新操作
 
// 6.启动ES服务
service elasticsearch start
 
// 7.重新开启shard reallocation
curl -XPUT localhost:9200 /_cluster/settings -d '{
         "transient" : {
             "cluster.routing.allocation.enable" : "all"
         }
}'
 
// 8.等待cluster的状态重新变为green之后,在下一个节点上重复2~7的操作
 
 

值得注意的是:

  1. 确保每个Index都有复制分片,这样当关闭一个节点的ES服务之后,用户能使用到的数据仍然是全的,集群状态不会出现red
  2. 如果不禁止shard reallocation,每次一关闭一个节点的服务,剩余节点就会开始数据重平衡,如果索引量巨大,那将消耗大量的时间和IO性能
  3. 每次启动时ES都要重新执行translog中记录记录的操作,所以我们提前通过flush执行完translog,能够缩短服务启动的时间
  4. 稳妥起见,每次更新一个节点都等到数据重新平衡之后,集群状态变回green再操作下一个节点,这样保证不会丢失数据

本文参考了官方文档:

upgrading

Making Changes 

 

 

http://logos.name/archives/552

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值