18 July 2016

系统之前用的是es1.4.4;es的作者很勤奋啊,不到两年,版本变成2.3.4了;es版本落后太多,享受不到最新的特性。打算近期升级一下。 升级过程断断续续花3天。

记录下填坑过程

elasticsearch1.4.4升级到elasticsearch2.3.4填坑之旅。

java升级

之前用的是openjdk1.7.0_91,版本过低,直接升级到jdk1.8.0_65(oracle官网下载)

安装jdk sudo rpm -ivh jdk-8u65-linux-x64.rpm 安装目录: jdk8_home=/usr/java/jdk1.8.0_65

环境变量

由于之前的jdk1.7其他系统还在用,所以本次升级过程并没有将操作系统java环境变量更改为1.8,而是直接在es中配置java_home: 在/bin/elasticsearch文件的开头增加:

JAVA_HOME=/usr/java/jdk1.8.0_65

运行用户

elasticsearch2以后不允许root账户运行,当然你也可以通过配置强制使用root用户运行

创建用户

useradd elasticsearch

配置运行用户

更改运行脚本 bin/elasticsearch:

ES_USER=elasticsearch
ES_GROUP=elasticsearch

es集群配置

elasticsearch.yml配置:

  • cluster.name=credit(相同集群保持名称一致)
  • node.name=dataengine1(同一集群,必须名称不同,按机器编号进行修改dataengine1,dataengine2)
  • network.host: 192.168.11.231
  • discovery.zen.ping.unicast.hosts: [“192.168.11.235”, “192.168.11.236”]

注意:这四个参数之前都要加空格,冒号之后也要加空格

启动排错

netty:138 - [Tumbler] Message not fully read (response) for [0] handler future(org.elasticsearch.client.transport.TransportClientNodesService$SimpleNodeSampl

是因为有其他服务上运行着老版本的es客户端导致的,所以需要将有es客户端的服务全部停止掉,由于,es客户端是个基础服务,几乎所有服务都有这个客户端,所以要几乎全部要停掉了

插件安装:

head 插件用来对es基本操作,查看es集群状态,进行数据查询

sudo ./bin/plugin install mobz/elasticsearch-head

java客户端代码调整

  • ImmutableSettings去掉了,使用Settings替换
  • queryString()函数名称更改成queryStringQuery()

Elasticsearch Delete By Query Plugin

之前可以通过下面代码删除一个indexType下的所有数据:

client.prepareDeleteByQuery(INDEX_NAME).setTypes(indexType).setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();

现在es默认不提供这种删除数据的方式了;只能根据一个记录id删除一条记录。 如果想删除指定type下的数据,可以通过插件的形式,插件名称:delete-by-query

./plugin install delete-by-query

不过安装可能会失败,不过不要紧,多试试;几年不行,明天再试试,这台机器不行另外一台机器试试。总有一台机器总有一天会成功的,加油吧

参考资料:

http://www.cnblogs.com/qiyebao/p/5254826.html

http://www.cnblogs.com/jiu0821/p/5624908.html

http://soft.dog/2016/01/30/elasticsearch-delete-by-query-plugin/

https://www.elastic.co/guide/index.html





Fork me on GitHub