CentOS7 下安裝 ElasticSearch 5.x 及填坑

ElasticSearch簡介

什麼是ElasticSearch:html

  • ElasticSearch是基於Apache Lucene構建的開源搜索引擎
  • 採用Java編寫,提供了簡單易用的RESTFul API
  • 輕鬆的橫向擴展,可支持PB級的結構化或非結構化的數據處理

應用場景:java

  • 海量數據分析引擎
  • 站內搜索引擎
  • 做爲數據倉庫

一線公司實際應用場景:node

  • 英國衛報 - 實時分析公衆對文章的迴應
  • 維基百科、GitHub - 站內實時搜索引擎
  • 百度 - 實時日誌監控平臺

單實例安裝ElasticSearch

在安裝ElasticSearch以前,首先準備好Java環境:linux

[root@localhost /usr/local/jdk1.8]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
[root@localhost /usr/local/jdk1.8]#

到ElasticSearch官網上覆制ElasticSearch的下載連接:git

https://www.elastic.co/cn/github

複製ElasticSearch 5.x版本的下載地址,到命令行上進行下載:npm

[root@localhost ~]# cd /usr/local/src/
[root@localhost /usr/local/src]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz

下載好後,解壓到相應的目錄中:json

[root@localhost /usr/local/src]# ls
elasticsearch-5.5.2.tar.gz
[root@localhost /usr/local/src]# tar -zvxf elasticsearch-5.5.2.tar.gz -C /usr/local
[root@localhost /usr/local/src]# ls /usr/local/elasticsearch-5.5.2/
bin  config  lib  LICENSE.txt  modules  NOTICE.txt  plugins  README.textile
[root@localhost /usr/local/src]#

安裝完成後,咱們須要新建一個普通用戶,由於ElasticSearch不容許在root用戶下運行,因此咱們須要建立獨立的用戶來運行es。建立elsearch用戶組及elsearch用戶:bootstrap

[root@localhost ~]# groupadd elsearch
[root@localhost ~]# useradd elsearch -g elsearch -p elasticsearch
[root@localhost ~]# passwd elsearch  # 設置密碼

更改elasticsearch安裝目錄及其內部文件的所屬用戶及組爲elsearch:elsearch,以下:vim

[root@localhost ~]# cd /usr/local/
[root@localhost /usr/local]# chown -R elsearch:elsearch elasticsearch-5.5.2/
[root@localhost /usr/local]# ll |grep elasticsearch-5.5.2
drwxr-xr-x. 8 elsearch elsearch 143 6月  19 10:46 elasticsearch-5.5.2
[root@localhost /usr/local]#

因爲在CentOS7下,elasticsearch 5.x 設置了ip後,啓動會有些問題致使啓動報錯,咱們須要設置以下系統參數來解決這個問題:

[root@localhost /usr/local/elasticsearch-5.5.2]# vim /etc/security/limits.conf
*                hard    nofile          65536
*                soft    nofile          131072
*                soft    nproc           2048   
*                hard    nproc           4096
[root@localhost /usr/local/elasticsearch-5.5.2]# vim /etc/security/limits.d/90-nproc.conf
*                soft    nproc           2048
[root@localhost /usr/local/elasticsearch-5.5.2]# vim /etc/sysctl.conf
vm.max_map_count=655360
[root@localhost /usr/local/elasticsearch-5.5.2]# sysctl -p
vm.max_map_count = 655360
[root@localhost /usr/local/elasticsearch-5.5.2]#

關於這個問題能夠參考以下issues:

https://github.com/elastic/elasticsearch/issues/22899

Elasticsearch5.5.1安裝問題彙總:

https://github.com/DimonHo/DH_Note/issues/3


完成以上的配置後,咱們從root用戶切換到elsearch用戶:

[root@localhost ~]# su elsearch
[elsearch@localhost root]$

在啓動es前先設置一下綁定的ip,設置爲可被外部訪問的ip,以及設置bootstrap相關的參數:

[elsearch@localhost root]$ cd /usr/local/elasticsearch-5.5.2/
[elsearch@localhost elasticsearch-5.5.2]$ vim config/elasticsearch.yml
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0  # 找到該項,設置爲可被外部訪問的ip
[elsearch@localhost elasticsearch-5.5.2]$

啓動ElasticSearch服務的命令:

[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch

加上-d參數表示後臺啓動,通常咱們都採用後臺啓動的方式:

[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch -d

ElasticSearch服務啓動成功後,可看到以下進程信息:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep elasticsearch
elsearch  13353  107 83.1 4697512 1550164 pts/0 Sl   11:04   0:03 /usr/local/jdk1.8/bin/java -Xms2g -Xmx2g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -server -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -Djdk.io.permissionsUseCanonicalPath=true -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j.skipJansi=true -XX:+HeapDumpOnOutOfMemoryError -Des.path.home=/usr/local/elasticsearch-5.5.2 -cp /usr/local/elasticsearch-5.5.2/lib/* org.elasticsearch.bootstrap.Elasticsearch -d
elsearch  13372  0.0  0.0 112720   988 pts/0    S+   11:05   0:00 grep --color=auto elasticsearch
[elsearch@localhost elasticsearch-5.5.2]$

查看ElasticSearch服務所監聽的端口:

[elsearch@localhost elasticsearch-5.5.2]$ netstat -lntp |grep java
tcp6       0      0 :::9200                 :::*                    LISTEN      14849/java          
tcp6       0      0 :::9300                 :::*                    LISTEN      14849/java          
[elsearch@localhost elasticsearch-5.5.2]$

設置防火牆規則,開放ElasticSearch服務所監聽的端口:

[elsearch@localhost elasticsearch-5.5.2]$  sudo firewall-cmd --zone=public --add-port=9200/tcp --permanent
success
[elsearch@localhost elasticsearch-5.5.2]$  sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent
success
[elsearch@localhost elasticsearch-5.5.2]$  sudo firewall-cmd --reload
success
[elsearch@localhost elasticsearch-5.5.2]$

開放了相應的端口後,從瀏覽器中訪問,看看可否訪問成功,以下則是訪問成功的:
CentOS7 下安裝 ElasticSearch 5.x 及填坑

關於關閉及重啓elasticsearch服務,elasticsearch沒有直接的關閉或重啓命令,關閉elasticsearch服務只能經過kill命令來殺掉服務的進程,以下:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep es  # 查看進程id
[elsearch@localhost elasticsearch-5.5.2]$ kill -8 193460  # 經過進程id來殺掉服務

重啓:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep es  # 查看進程id
[elsearch@localhost elasticsearch-5.5.2]$ kill -8 193460  # 經過進程id來殺掉服務
[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch -d

也能夠編寫一個服務腳本,以此來方便的啓動或關閉elasticsearch服務。


插件安裝

本小節咱們來安裝es的實用插件elasticsearch-head,這個插件能夠提供一個圖形化的界面,能讓咱們直觀的查看節點數據以及集羣健康狀態等。github地址以下:

https://github.com/mobz/elasticsearch-head

進入elasticsearch-head的github地址,複製其.zip的下載連接,到命令行上進行下載:

[root@localhost /usr/local/src]# wget https://github.com/mobz/elasticsearch-head/archive/master.zip

注:切換成root用戶

解壓下載好的.zip壓縮包:

[root@localhost /usr/local/src]# unzip master.zip
[root@localhost /usr/local/src]# mv elasticsearch-head-master/ /usr/local/
[root@localhost /usr/local/src]# ls /usr/local/elasticsearch-head-master/
Dockerfile         elasticsearch-head.sublime-project  grunt_fileSets.js  LICENCE       plugin-descriptor.properties  README.textile  src
Dockerfile-alpine  Gruntfile.js                        index.html         package.json  proxy                         _site           test
[root@localhost /usr/local/src]#

elasticsearch-head是一個提供圖形化的插件,其圖形化是基於node.js的,因此咱們須要先準備好node.js環境,node.js官網下載地址以下:

https://nodejs.org/en/download/

在命令行中下載並解壓安裝包:

[root@localhost /usr/local/src]# wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
[root@localhost /usr/local/src]# tar -Jxvf node-v8.11.3-linux-x64.tar.xz -C /usr/local/
[root@localhost /usr/local/src]# mv /usr/local/node-v8.11.3-linux-x64/ /usr/local/node-8.11.3

配置環境變量:

[root@localhost /usr/local/src]# vim /etc/profile
export NODE_HOME=/usr/local/node-8.11.3
export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$NODE_HOME/bin
[root@localhost /usr/local/src]# source /etc/profile
[root@localhost /usr/local/src]# node -v  # 輸出版本號則表明配置成功
v8.11.3
[root@localhost /usr/local/src]#

進入es-head的安裝目錄,執行npm install命令安裝所需的模塊:

[root@localhost /usr/local/src]# cd /usr/local/elasticsearch-head-master/
[root@localhost /usr/local/elasticsearch-head-master]# npm install phantomjs-prebuilt@2.1.14 --ignore-scripts  # 由於有牆,phantomjs-prebuilt須要單獨安裝,否則會失敗
[root@localhost /usr/local/elasticsearch-head-master]# npm install

es-head使用的是grunt server做爲服務器,而grunt server默認監聽的是localhost,因此咱們須要修改Gruntfile.js文件,增長一段配置,否則外部是沒法訪問的,以下:

[root@localhost /usr/local/elasticsearch-head-master]# vim Gruntfile.js
connect: {
        server: {
                options: {
                        hostname: '0.0.0.0',  # 增長這段
                        port: 9100,
                        base: '.',
                        keepalive: true
                }
        }
}
[root@localhost /usr/local/elasticsearch-head-master]#

設置防火牆規則,開放9100端口:

[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --zone=public --add-port=9100/tcp --permanent
success
[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --reload
success
[root@localhost /usr/local/elasticsearch-head-master]#

es與es-head是兩個獨立的進程,當es-head訪問es服務時,會存在一個跨域問題。因此咱們須要修改es的配置文件,增長一些配置項來解決這個問題,以下:

[root@localhost /usr/local/elasticsearch-head-master]# cd ../elasticsearch-5.5.2/config/
[root@localhost /usr/local/elasticsearch-5.5.2/config]# vim elasticsearch.yml  # 文件末尾加上以下配置
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@localhost /usr/local/elasticsearch-5.5.2/config]#

注:修改完配置文件後需切換到elsearch用戶中重啓es服務。

接着再次進入es-head的安裝目錄,使用以下命令,啓動es-head:

[root@localhost /usr/local/elasticsearch-head-master]# npm run start

使用瀏覽器訪問以下:
CentOS7 下安裝 ElasticSearch 5.x 及填坑


僞分佈式安裝ElasticSearch

以上咱們介紹了es單實例的安裝以及es-head的安裝,本小節咱們來介紹如何在單機狀況下安裝僞分佈式的es服務。首先配置以前已安裝好的es服務的配置文件,以下:

[root@localhost ~]# cd /usr/local/elasticsearch-5.5.2/config/
[root@localhost /usr/local/elasticsearch-5.5.2/config]# vim elasticsearch.yml   # 在文件末尾加入以下內容
cluster.name: es
node.name: master
node.master: true
[root@localhost /usr/local/elasticsearch-5.5.2/config]#

參數說明:

  • cluster.name 集羣的名稱,可自定義
  • node.name 節點的名稱,可自定義
  • node.master 是否指定爲master角色

新建一個存放slave的目錄,拷貝es壓縮包到該目錄中並解壓,而後再拷貝多一份slave,最後還須要更改es_slave目錄的所屬用戶及用戶組爲elsearch:

[root@localhost ~]# mkdir /usr/local/es_slave
[root@localhost ~]# cp /usr/local/src/elasticsearch-5.5.2.tar.gz /usr/local/es_slave/
[root@localhost ~]# cd /usr/local/es_slave/
[root@localhost /usr/local/es_slave]# tar -zxvf elasticsearch-5.5.2.tar.gz
[root@localhost /usr/local/es_slave]# mv elasticsearch-5.5.2 ./es_slave1
[root@localhost /usr/local/es_slave]# cp -r ./es_slave1/ es_slave2/
[root@localhost /usr/local]# cd ../
[root@localhost /usr/local]# chown -R elsearch:elsearch es_slave/

逐個修改slave的配置文件:

[root@localhost /usr/local/es_slave]# vim es_slave1/config/elasticsearch.yml
cluster.name: es
node.name: slave1

network.host: 127.0.0.1
http.port: 8200

discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
[root@localhost /usr/local/es_slave]# vim es_slave1/config/elasticsearch.yml
cluster.name: es
node.name: slave2

network.host: 127.0.0.1
http.port: 7200

discovery.zen.ping.unicast.hosts: ["127.0.0.1"]
[root@localhost /usr/local]#

開放端口:

[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --zone=public --add-port=8200/tcp --permanent
success
[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --zone=public --add-port=7200/tcp --permanent
success
[root@localhost /usr/local/elasticsearch-head-master]# firewall-cmd --reload
success
[root@localhost /usr/local/elasticsearch-head-master]#

切換到elsearch用戶中重啓master節點,並啓動其餘兩個slave節點:

[elsearch@localhost elasticsearch-5.5.2]$ ps aux |grep elastic
[elsearch@localhost elasticsearch-5.5.2]$ kill -8 16410
[elsearch@localhost elasticsearch-5.5.2]$ sh bin/elasticsearch -d
[elsearch@localhost elasticsearch-5.5.2]$ cd
[elsearch@localhost root]$ sh /usr/local/es_slave/es_slave1/bin/elasticsearch -d
[elsearch@localhost root]$ sh /usr/local/es_slave/es_slave1/bin/elasticsearch -d

啓動es-head:

[root@localhost ~]# cd /usr/local/elasticsearch-head-master/
[root@localhost /usr/local/elasticsearch-head-master]# npm run start

使用瀏覽器訪問以下:
CentOS7 下安裝 ElasticSearch 5.x 及填坑

相關文章
相關標籤/搜索