前言
本文記錄的是 ES 1.5.0 升級(jí)到 ES 2.3.3 的過(guò)程。包括升級(jí)要考慮的要點(diǎn)以及升級(jí)過(guò)程中遇到的問(wèn)題。
升級(jí)要點(diǎn)
- 數(shù)據(jù)兼容性檢查
- 客戶端升級(jí)
- 服務(wù)端升級(jí)
- ES 插件升級(jí)
準(zhǔn)備工作
- Java版本: jdk1.8.0_91
- 系統(tǒng)環(huán)境: CentOS,2.6.32-431.23.3.el6.x86_64
- Elasticsearch 2.3.3 的 tar 包和 rpm 軟件包
數(shù)據(jù)兼容性檢查
ES 升級(jí)涉及到索引的遷移,有些版本之間差異較大,有可能出現(xiàn)索引不兼容的情況。ES 官方提供了一個(gè)插件工具,用于檢查索引是否兼容。插件 Elasticsearch Migration Helper
客戶端升級(jí)
ES 2.3.3的 Java API 相比 ES 1.5.0 有較大的變化,所以項(xiàng)目的 ES 客戶端代碼需要引入 ES 2.3.3 的 jar 包,修改相應(yīng)的代碼。(升級(jí) jar 包,需要更改的代碼會(huì)有報(bào)錯(cuò)提示,按照這個(gè)改就行了)。API 的更新內(nèi)容可查看:Java API changes
服務(wù)端升級(jí)
Elasticsearch 2.3.3 提供壓縮包和軟件包兩種安裝方式。壓縮包只需解壓,然后進(jìn)入 bin 目錄運(yùn)行 Elasticsearch 腳本。軟件包安裝需要用上 Linux 的包安裝工具(如:rpm),與壓縮包安裝方式相比,軟件包安裝為后面作為 service 運(yùn)行提供了方便的配置。1.5.0 版本要以 service 方式運(yùn)行,需要拷貝一個(gè) service 項(xiàng)目elasticsearch-servicewrapper, 2.3.3則不需要,以軟件包的方式安裝好就可以通過(guò) service 啟動(dòng)。下面我會(huì)介紹兩種安裝方式的具體過(guò)程。
軟件包安裝
- 下載軟件包 elasticsearch-2.3.3.rpm,
- 安裝
rpm -i elasticsearch-2.3.3.rpm
(安裝過(guò)程必須有 root 權(quán)限)
完成以上兩個(gè)步驟,運(yùn)行 service elasticsearch start
發(fā)現(xiàn)還啟動(dòng)不了。一般是 Java 環(huán)境的配置問(wèn)題。
注意:service elasticsearch start
必須用 root 運(yùn)行,因?yàn)樵趩?dòng)過(guò)程中會(huì)使用到只有 root 用戶才有權(quán)限的命令(runuser)。
在配置 Java 環(huán)境之前,先了解一下 ES 安裝后的目錄結(jié)構(gòu)
Directory Layout。軟件包安裝完以后有兩個(gè)非常重要的文件,一個(gè)是 /etc/init.d/elasticsearch
,這是 service 運(yùn)行 elasticsearch 的啟動(dòng)腳本;另一個(gè)是/etc/sysconfig/elasticsearch
,這是 service 運(yùn)行 elasticsearch 的啟動(dòng)配置文件。啟動(dòng)配置文件的配置項(xiàng)可參考Configuration File
配置 Java 環(huán)境: 2.3.3 要求 Java 1.8,這次升級(jí)用的是jdk1.8.0_91。配置 jdk 有兩種方式:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
java -version
用上面這種方式安裝好以后不需要再配置 Java 環(huán)境,安裝過(guò)程就已經(jīng)配置好了,接下來(lái) service elasticsearch start
啟動(dòng)就行了。
但我們生產(chǎn)環(huán)境部署 Java 程序,一般習(xí)慣于使用非安裝版的 jdk 環(huán)境,在啟動(dòng)時(shí)配置 JAVA_HOME,CLASSPTH,PATH 等環(huán)境變量。2.3 版本的 ES 通過(guò) service 腳本啟動(dòng),在腳本中會(huì)重置JAVA_HOME,PATH 環(huán)境變量,所以在執(zhí)行 service elasticsearch start
命令前設(shè)置環(huán)境變量是無(wú)效的。
原因如下:
/etc/init.d/elasticsearch
/etc/init.d/functions
解決辦法很簡(jiǎn)單。在 /etc/sysconfig/elasticsearch 加入如下配置
啟動(dòng)以后,2.3 默認(rèn)是不允許外部機(jī)器訪問(wèn)的,也不會(huì)自動(dòng)加入集群。要允許外部訪問(wèn)和加入集群,需要在 elasticsearch.yml 配置
discovery.zen.ping.unicast.hosts: 10.173.227.228:9300,10.173.225.74:9300
network.bind_host: 0.0.0.0
network.publish_host: 10.173.227.228
ES 插件升級(jí)
目前常用的幾個(gè)插件如 head、kopf、ik anaylysis 都做了相應(yīng)的更新。其中 ik analysis 的變化較大。還有一點(diǎn)就是 bigdesk 插件在 2.3.3 版本用不了了,作者貌似也沒(méi)有更新的意愿。