线上Elasticsearch集群升级到5.X版本
文章目录
本文记录了将Elasticserach集群从2.3.3升级到5.0.2过程当中的一些坑。
Elasticsearch
官方提供了升级Elasticsearch的详细文档:
 集群的升级可以细化到每个节点的升级过程,也有相关的帮助文档。
官方还非常周到的提供了一个迁移助手elasticsearch-migration,以插件的形式检测升级过程中需要注意的事项。
首先通过插件来做一些准备工作:
集群的升级可以细化到每个节点的升级过程,也有相关的帮助文档。
官方还非常周到的提供了一个迁移助手elasticsearch-migration,以插件的形式检测升级过程中需要注意的事项。
首先通过插件来做一些准备工作:
 主要包含了:Cluster Checkup、Reindex Helper、Deprecation Logging 3个工具,分别点击可以查看对应的需要处理的事项。
主要包含了:Cluster Checkup、Reindex Helper、Deprecation Logging 3个工具,分别点击可以查看对应的需要处理的事项。
配置项变更
配置项的变化非常大,我主要涉及到下面几点:
- 索引相关属性都不再在集群范围定义,而是细化到各个索引当中,涵盖了分词器:index、index.analysis.analyzer.default.type、index.analysis.analyzer.default.tokenizer、index.analysis.analyzer.default.filter和分片信息:index.number_of_shards、index.number_of_replicas等;
- 网络层的配置更加考虑安全性,需要通过http.cors.enabled: true和http.cors.allow-origin: *“来启用非本地请求,network.host也移除了_non_loopback_,需要详细配置允许的域名列表;
- deprecate了groovy语言支持,推荐painless。
- max_map_count需要262144:- 写入vm.max_map_count=262144到/etc/sysctl.conf后执行sysctl -p
 
- 写入
- max_file limit需要至少65536:- 修改/etc/security/limits.conf中的相应值为65536
 
- 修改
新的配置项准备完成之后就可以开始升级了。
禁用自动分片
通过执行:
|  |  | 
禁用自动部署分片到节点上。
将内存数据同步到磁盘(可选)
执行:
|  |  | 
关闭节点、执行升级
如果你现有使用的jdk版本非1.8,需要升级jdk版本
我是通过修改符号链接指向的方式指定elasticsearch版本的:
 将符号链接指向新的tar包解压文件,将老的
将符号链接指向新的tar包解压文件,将老的config和data目录也同步过去,进行必要的配置项变更即可。
启用节点,开启自动分片
由于新老节点版本不同,启动节点之后会出现以下报错提示,忽略即可:
 执行:
执行:
|  |  | 
依次在每个节点执行以上步骤即可。
elasticsearch-head
head本来是以插件形式嵌入到elasticsearch中,5.0之后只能通过独立方式运行,所以需要elasticsearch配置中添加:http.cors.enabled: true和http.cors.allow-origin: *“。
安装步骤为:
- 安装依赖:- 添加epel源:sudo yum localinstall http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
- 安装node:sudo yum -y install nodejs npm --enablerepo=epel
- 可以通过命令:PROJECT_NAME="node" PROJECT_URL="https://npm.taobao.org/mirrors/node/" n project stable快速升级node
- 可以通过命令:PHANTOMJS_CDNURL=https://npm.taobao.org/dist/phantomjs npm install phantomjs --registry=https://registry.npm.taobao.org --no-proxy加快PHANTOMJS安装
 
- 添加epel源:
- 拉取代码:git clone git://github.com/mobz/elasticsearch-head.git
- npm install。可以通过- npm config set registry https://registry.npm.taobao.org添加淘宝npm源加快速度。
- grunt server即可运行。如果需要在断开ssh链接后继续运行,需要通过- tmux。
logstash
logstash主要用于同步数据库数据到搜索,详见MySQL到Elasticsearch的同步之路。
安装的时候遇到的问题就是无法安装插件,表现为执行./logstash-plugin install logstash-input-jdbc时提示:
Could not find gem ’logstash-plugin (>= 0) java’ in any of the gem sources listed in your Gemfile or installed on this machine
尝试通过其他装有插件的机器执行./logstash-plugin pack --tgz导出gem文件,在需要安装的节点执行./logstash-plugin install --local logstash-input-jdbc依然失败。
这似乎是logstash的一个bug,可以参见这个issue
纠结了好久之后,直接从其他装有插件的机器上把logstash整个文件夹迁移了过来。
java-api
java-api 也又很大变化,主要有:
- 抽离出transtaparent client的独立jar包
- netty升级到4
- 传入的日期字符串需要通过jodatime来格式化
- function score 函数需要组装为数组
需要注意的就是项目出现:
|  |  | 
等相关的NoClassDefFoundError异常,大都是jar包版本冲突导致的,在idea中可以通过Maven Helper插件快速查看。

文章作者
上次更新 2016-12-22