ElasticSearch 初識與安裝

一. 初識

1. 什麼是ElasticSearch?

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

2. 可用應用場景

  • 海量數據分析引擎(例如分析海量的日誌數據)
  • 站內搜索引擎
  • 數據倉庫(利用其分佈式存儲能力,可存儲PB級的結構化和非結構化數據 )

3. 一些公司實際應用場景

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

二. 安裝

1. 單實例安裝:

打開官網,下載ElasticSearch壓縮包,解壓以後運行bin目錄中的elasticsearch.bat文件html

如上圖所示時,ElasticSearch啓動成功,瀏覽器訪問:127.0.0.1:9200便可看到ElasticSearch的相關信息node

注意:如果在Linux中安裝會遇到意料不到的不少問題,這裏我作一下在centos7中安裝es的踩坑記錄linux

步驟:git

Ⅰ. es 規定 root 用戶不能啓動 es,因此須要建立一個用戶來啓動 esgithub

# 建立用戶名爲 es 的用戶
useradd es
# 設置 es 用戶的密碼
passwd es

# 建立 es 的 data 和 logs 目錄
mkdir elasticsearch-6.2.2/data
mkdir elasticsearch-6.2.2/logs 

#將elasticsearch文件夾拷貝到其餘目錄,如:/usr/local/elasticsearch-6.2.2下,由於新建的es用戶
對root目錄沒有訪問權限,放在/root下當切換爲es用戶時沒法去啓動elasticsearch。

# 將 /usr/local/elasticsearch/elasticsearch-6.2.2 的擁有者設置爲 es
chown -R es:es /usr/local/elasticsearch/elasticsearch-6.2.2

Ⅱ. 編輯配置文件 config/elasticsearch.yml,綁定服務器ip以便其餘機器訪問web

network.host: 你本身的服務器ip
http.port: 9200

Ⅲ. 防火牆中開啓9200端口(這一步容易被忽視,致使其餘機器訪問時出現問題)npm

vi /etc/sysconfig/iptables  #打開配置文件加入以下語句:

-A INPUT -p tcp -m state --state NEW -m tcp --dport 9200 -j ACCEPT   #以後重啓防火牆,修改完成

Ⅳ. 切換到 es 用戶,啓動 esbootstrap

su es

sh bin/elasticsearch

# -d是後臺啓動,第一次不建議後臺啓動,前臺啓動能夠直觀的看到日誌信息
#bin/elasticsearch -d

Ⅴ. 啓動以後,其餘機器瀏覽器輸入10.2.1.155:9200(ip是安裝es的服務器ip),出現久違的畫面vim

這過程當中遇到的錯誤centos

Ⅰ. ERROR: [1] bootstrap checks failed...

解決方法:在配置文件 elasticsearch.yml 加一句:

bootstrap.system_call_filter: false

Ⅱ. max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

解決方法

#切換到root用戶修改
vim /etc/security/limits.conf

# 在最後面追加下面內容
es hard nofile 65536
es soft nofile 65536

修改後從新登陸es用戶,使用以下命令查看是否修改爲功

ulimit -Hn
65536

Ⅲ. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解決方法:提升 vm.max_map_count 的大小

# 切換到root用戶
vim /etc/sysctl.conf
# 在最後面追加下面內容
vm.max_map_count=262144
# 使用 sysctl -p 查看修改後的結果
sysctl -p

Ⅳ. 參考資料:

http://www.cnblogs.com/xxoome/p/6663993.html(文中包含更多可能出現的錯誤以及解決辦法,詳細全面,實踐中主要參考了此文)

http://www.imooc.com/article/20336(文中介紹了一些可能出現的問題,還介紹了產生問題的緣由)

 

2. head插件安裝:

安裝head插件,head插件提供了友好的web頁面,幫咱們解決了界面的問題,同時他還實現了基本信息的查看,REST請求的模擬,以及數據的基本檢索。

注意:使用此方法須要先安裝node環境,關於linux如何安裝node環境請參考:

http://www.javashuo.com/article/p-mmlnbmud-kz.html

項目地址:https://github.com/mobz/elasticsearch-head

Ⅰ. 先將zip包下載到linux本地:

wget https://github.com/mobz/elasticsearch-head/archive/master.zip

Ⅱ. 再使用「unzip master.zip」 命令將其解壓,解壓後以下圖:

Ⅲ. 使用"node-v"檢查node版本是否知足要求:

Ⅳ. 進入解壓後的文件夾,執行 npm install注意是在 elasticsearch-head-master 目錄中執行該命令,而不是在node的安裝目錄中執行,本身試驗的時候由於搞錯了目錄出現了一堆的問題

npm是node的包安裝工具,若 npm install 執行到最後報錯/安裝失敗,可使用淘寶的cnpm來代替

npm install -g cnpm --registry=https://registry.npm.taobao.org

包安裝成功後,運行 npm run start ,出現以下結果,證實插件啓動成功了

Ⅴ. 從圖上能夠看出服務啓動在9100端口,咱們在瀏覽器中輸入"10.2.1.48:9100" (ip爲服務器當前ip),能夠看到以下界面:

(360瀏覽器顯示異常的,把核心切換到「極速模式」就正常了,若仍是不能顯示,多是linux的9100端口未打開,須要修改一下iptables的規則)

Ⅵ. 由於es和head插件自己是屬於兩個獨立的進程,它們之間的訪問是有跨域的問題,所以這裏須要進行一些跨域問題的配置修改:

首先用ctr+c結束掉head插件的進程,而後進入到elasticsearch的目錄中(注意不是head插件的目錄,不要進錯了;而且須要注意此時當前的用戶不能爲root,由於root用戶沒法啓動es

使用 vim config/elasticsearch.yml,在配置文件的末尾加上下面兩句,注意冒號後面的空格:

http.cors.enabled: true
http.cors.allow-origin: "*"

保存退出後,在後臺啓動elasticsearch:bin/elasticsearch -d 

接着就從新啓動head插件,在head插件目錄內運行:npm run start 

在圖中的地址欄填入ip+端口 點鏈接,右上角就變綠了,這就證實es服務在正常的運行。

3. 分佈式安裝:

Ⅰ. head插件保持開啓,進入es目錄編輯配置文件:

vim config/elasticsearch.yml

#在配置文件末尾添加下面三行
cluster.name: xzf  #集羣的名字
node.name: master  #指揮官的名字
node.master: true  #是否爲指揮官,此處單詞不要錯拼成了ture

Ⅱ. 殺掉es的進程,從新啓動es

ps -ef | grep elastic   #查找進程
kill 1551               #殺掉進程
./bin/elasticsearch -d   #後臺啓動es

Ⅲ. 刷新head界面

節點名字已經變成了master,接下來按照類似的步驟配置隨從節點

Ⅳ. 將es的安裝包複製到/usr/local/es_slave,並解壓,以後將解壓出來的安裝包分別複製一份到/usr/local/es_slave1和/usr/local/es_slave2中,就像這樣:

Ⅴ. 使用 chown -R es:es es_slave1 將es_slave1的用戶和用戶組改爲普通用戶es,而後修改其配置文件

vim ./config/elastisearch.yml

#在配置文件中添加以下
cluster.name: xzf   #此處和master一致
node.name: slave1   #給節點起名字

network.host: 10.2.1.31
http.port: 8200     #默認es監聽端口爲9200,此處爲防止和master衝突,改成8200

discovery.zen.ping.unicast.hosts: ["10.2.1.31"]   #用於找到master,不然處於集羣以外

保存並退出。

Ⅵ. 後臺啓動es服務,在head頁面刷新後,便可看到如下效果,能夠看出slave1已經加入到集羣中了

同理,slave2也按照上面的步驟進行(誤,可能出現問題,具體往下看)。

注:有時候es服務啓動過程當中可能會出現一些錯誤,而在後臺啓動的模式中是看不到錯誤信息的,若實踐過程當中出現了異常,能夠經過 ps -ef | grep elastic 查看es服務是否啓動,也可結合es的前臺啓動模式查看具體報錯信息

踩過的坑:

通過屢次實驗發現,一臺主機中好像只能同時開啓兩個es服務,當要開啓第三個es服務的時候(如上面的「一主兩從」),發現會隨機擠掉某個已經開啓的服務,被擠掉的服務立即下線,使用ip+端口訪問瀏覽器會返回「拒絕訪問」的錯誤信息。

若擠掉的是master節點,head界面中的節點列表都會消失。

緣由

如圖示,提示內存不足,如果在虛擬機中運行的linux,能夠關閉虛擬機後調大內存

es的更多配置項詳解能夠參看:http://www.cnblogs.com/hupengcool/p/4028685.html

相關文章
相關標籤/搜索