什麼是ElasticSearch:html
應用場景:java
一線公司實際應用場景:node
在安裝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
複製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:
Elasticsearch5.5.1安裝問題彙總:
完成以上的配置後,咱們從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]$
開放了相應的端口後,從瀏覽器中訪問,看看可否訪問成功,以下則是訪問成功的:
關於關閉及重啓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地址以下:
進入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官網下載地址以下:
在命令行中下載並解壓安裝包:
[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
使用瀏覽器訪問以下:
以上咱們介紹了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]#
參數說明:
新建一個存放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
使用瀏覽器訪問以下: