安裝Elasticsearch5.2.2和head 外掛環境搭建
一.簡介
ElasticSearch是一個基於Lucene構建的開源,分散式,RESTful搜尋引擎。設計用於雲端計算中,能夠達到實時搜尋,穩定,可靠,快速,安裝使用方便。支援通過HTTP使用JSON進行資料索引。
我們建立一個網站或應用程式,並要新增搜尋功能,令我們受打擊的是:搜尋工作是很難的。我們希望我們的搜尋解決方案要快,我們希望有一個零配置和一個完全免費的搜尋模式,我們希望能夠簡單地使用JSON通過HTTP的索引資料,我們希望我們的搜尋伺服器始終可用,我們希望能夠一臺開始並擴充套件到數百,我們要實時搜尋,我們要簡單的多租戶,我們希望建立一個雲的解決方案。Elasticsearch
1.基於Lucene構建ES
怎樣在Lucene之上構建一個分散式、高度伸縮、接近實時的搜尋引擎呢? 讓我們回顧一下在搜尋引擎(基於lucene)伸縮性這條路上都做了那些嘗試,並且elasticsearch是如何嘗試並去解決這些挑戰的。
首先我們瞭解下最基礎的理論知識 building blocks (這些理論基礎是構建分散式近實時搜尋引擎的基礎)。接著我們研究一下到底哪種才是最佳的分割槽策略 partitioning (將lucene索引文件分割到多個分散式的分片中去)。然後我們同樣需要決定使用哪種分割槽複製方式 replication (複製能夠保證系統的高可用以及提高搜尋的吞吐)。
二.ElasticSearch概念
1.Cluster(叢集)
代表一個叢集,叢集中有多個節點,其中有一個為主節點,這個主節點是可以通過選舉
產生的,主從節點是對於叢集內部來說的。es的一個概念就是去中心化,字面上理解就是無中心節點,這是對於叢集外部來說的,因為從外部來看es叢集,在邏輯上是個整體,你與任何一個節點的通訊和與整個es叢集通訊是等價的。
2.Node(節點)
一個節點是你叢集中的一個伺服器,作為叢集的一部分,它儲存你的資料,參與叢集的索引和搜尋功能。和叢集類似,一個節點也是由一個名字來標識的,預設情況下,這個名字是一個隨機的漫威漫畫角色的名字,這個名字會在啟動的時候賦予節點。這個名字對於管理工作來說挺重要的,因為在這個管理過程中,你會去確定網路中的哪些伺服器對應於
一個節點可以通過配置叢集名稱的方式來加入一個指定的叢集。預設情況下,每個節點都會被安排加入到一個叫做“elasticsearch”的叢集中,這意味著,如果你在你的網路中啟動了若干個節點,並假定它們能夠相互發現彼此,它們將會自動地形成並加入到一個叫做“elasticsearch”的叢集中。
在一個叢集裡,只要你想,可以擁有任意多個節點。而且,如果當前你的網路中沒有執行任何Elasticsearch節點,這時啟動一個節點,會預設建立並加入一個叫做“elasticsearch”的叢集。
3.index(索引)
一個索引就是一個擁有幾分相似特徵的文件的集合。比如說,你可以有一個客戶資料的索引,另一個產品目錄的索引,還有一個訂單資料的索引。一個索引由一個名字來標識(必須全部是小寫字母的),並且當我們要對對應於這個索引中的文件進行索引、搜尋、更新和刪除的時候,都要使用到這個名字。
在一個叢集中,如果你想,可以定義任意多的索引。
索引相當於資料庫
4.Type(型別)
在一個索引中,你可以定義一種或多種型別。一個型別是你的索引的一個邏輯上的分類/分割槽,其語義完全由你來定。通常,會為具有一組共同欄位的文件定義一個型別。比如說,
我們假設你運營一個部落格平臺並且將你所有的資料儲存到一個索引中。在這個索引中,你可以為使用者資料定義一個型別,為部落格資料定義另一個型別,當然,也可以為評論資料定義另一個型別。
型別相當於資料庫中的表
5.Document(文件)
一個文件是一個可被索引的基礎資訊單元。比如,你可以擁有某一個客戶的文件,某一個產品的一個文件,當然,也可以擁有某個訂單的一個文件。文件以 JSON()格式來表示,而 JSON 是一個到處存在的網際網路資料互動格式。
在一個 index/type 裡面,只要你想,你可以儲存任意多的文件。注意,儘管一個文件,物理上存在於一個索引之中,文件必須被索引/賦予一個索引的 type。
文件相當於表中的一行記錄
6.Shards(分片)
代表索引分片,es可以把一個完整的索引分成多個分片,這樣的好處是可以把一個大的索引拆分成多個,分佈到不同的節點上。構成分散式搜尋。分片的數量只能在索引建立前指定,並且索引建立後不能更改。
7.Replicas(副本分片)
代表索引副本,es可以設定多個索引的副本,副本的作用一是提高系統的容錯性,當個某個節點某個分片損壞或丟失時可以從副本中恢復。二是提高es的查詢效率,es會自動對搜尋請求進行負載均衡。
總之,每個索引可以被分成多個分片。一個索引也可以被複制 0 次(意思是沒有複製)或多次。一旦複製了,每個索引就有了主分片(作為複製源的原來的分片)和複製分片(主分片的拷貝)之別。分片和複製的數量可以在索引建立的時候指定。在索引建立之後,你可以在任何時候動態地改變複製的數量,但是你事後不能改變分片的數量。
預設情況下,Elasticsearch 中的每個索引被分片 5 個主分片和 1 個複製,這意味著,如果你的叢集中至少有兩個節點,你的索引將會有 5 個主分片和另外 5 個複製分片(1 個完全拷貝),這樣的話每個索引總共就有 10 個分片。
一、elasticsearch安裝配置並執行
叢集搭建
1.以本人為例,在三臺機器上安裝了es,來搭建叢集
2進入elasticsearch的config目錄,開啟並編輯elasticsearch.yml
# ======================== Elasticsearch Configuration =========================
#
# NOTE: Elasticsearch comes with reasonable defaults for most settings.
# Before you set out to tweak and tune the configuration, make sure you
# understand what are you trying to accomplish and the consequences.
#
# The primary way of configuring a node is via this file. This template lists
# the most important settings you may want to configure for a production cluster.
#
# Please see the documentation for further information on configuration options:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/setup-configuration.html>
#
# ---------------------------------- Cluster -----------------------------------
#
# Use a descriptive name for your cluster:
#三臺電腦cluster.name:保持一致
cluster.name: my-askingdata
#
# ------------------------------------ Node ------------------------------------
#
# Use a descriptive name for the node:
#三臺電腦的node.name不能一樣
node.name: node-1
#
# Add custom attributes to the node:
#
# node.rack: r1
#
# ----------------------------------- Paths ------------------------------------
#
# Path to directory where to store the data (separate multiple locations by comma):
#
# path.data: /path/to/data
#
# Path to log files:
#
# path.logs: /path/to/logs
#
# ----------------------------------- Memory -----------------------------------
#
# Lock the memory on startup:
#
# bootstrap.mlockall: true
#
# Make sure that the `ES_HEAP_SIZE` environment variable is set to about half the memory
# available on the system and that the owner of the process is allowed to use this limit.
#
# Elasticsearch performs poorly when the system is swapping the memory.
#
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
# ip
network.host: 192.168.1.106
#
# Set a custom port for HTTP:
#埠
http.port: 9200
#
# For more information, see the documentation at:
# <http://www.elastic.co/guide/en/elasticsearch/reference/current/modules-network.html>
#
# --------------------------------- Discovery ----------------------------------
#
# Pass an initial list of hosts to perform discovery when new node is started:
# The default list of hosts is ["127.0.0.1", "[::1]"]
#寫入三臺電腦的ip
discovery.zen.ping.unicast.hosts: ["192.168.1.106", "192.168.1.108","192.168.1.109"]
#
# Prevent the "split brain" by configuring the majority of nodes (total number of nodes / 2 + 1):
#
1.進入elasticsearch的bin目錄
2.執行 ./elasticsearch 命令即可執行
3.瀏覽器中執行:http://192.168.1.108:9200/ 如果出現以下畫面表示執行成功
三、head外掛安裝和使用
一、下載安裝包
下載Elasticsearch 5.1.1
zip和tar格式是各種系統都通用的,解壓之後啟動Elasticsearch即可。
下載elasticsearch-head
一、安裝nodejscurl -sL -o /etc/yum.repos.d/khara-nodejs.repo https://copr.fedoraproject.org/coprs/khara/nodejs/repo/epel-7/khara-nodejs-epel-7.repoyum install -y nodejs nodejs-npm
$ node -v
$ npm -v
二、安裝grunt npm install-g grunt-clinpm install gruntgrunt -version
三、npm安裝依賴
到elasticsearch-head-master目錄下,執行命令:
npm install
如果速度較慢或者安裝失敗,可以使用國內映象:
npm install -g cnpm --registry=https://registry.npm.taobao.org
四、修改Elasticsearch配置檔案
編輯elasticsearch-5.1.1/config/elasticsearch.yml,加入以下內容:
http.cors.enabled: true
http.cors.allow-origin: "*"
五、修改Gruntfile.js
開啟elasticsearch-head-master/Gruntfile.js,找到下面connect屬性,新增hostname: ‘0.0.0.0’:
connect: {
server: {
options: {
hostname: '*',
port: 9100,
base: '.',
keepalive: true
}
}
}
六、啟動elasticsearch-head
在elasticsearch-head-master/目錄下,執行啟動命令:
grunt server
訪問http://192.168.1.124:9100/
七、後臺啟動elasticsearch-head
後臺啟動grunt server命令;
nohup grunt server &exit
如果想關閉head外掛,使用Linux查詢程序命令:
ps aux|grep head
結束程序:
kill程序號
四、索引的操作
1、索引文件的建立
將如下一條歌曲資訊的資料提交到ES中建立索引:
url:http://127.0.0.1:9200/song001/list001/1
data:{"number":32768,"singer":"楊坤","size":"5109132","song":"今夜二十歲","tag":"中國好聲音","timelen":319}
索引名字是:song001;
索引的型別是:list001;
本記錄的id是:1
返回的資訊可以看到建立是成功的,並且版本號是1;ES會對記錄修改進行版本跟蹤,第一次建立記錄為1,同一條記錄每修改一次就追加1。
至此一條記錄就提交到ES中建立了索引,注意HTTP的方法是PUT,不要選擇錯了。
2、索引文件的查詢
根據索引時的ID查詢的文件的RESTful介面如下
url:http://127.0.0.1:9200/song001/list001/1
HTTP方法採用GET的形式。
3、索引文件的更新
根據索引時的ID更新的文件的內容其RESTful介面如下
url:http://127.0.0.1:9200/song001/list001/1
HTTP方法採用PUT的形式。
將歌手名由“楊坤”改成“楊坤獨唱”;
結果中的version欄位已經成了2,因為我們這是是修改,索引版本遞增;created欄位是false,表示這次不是新建而是更新。
更新介面與建立介面完全一樣,ES會查詢記錄是否存在,如果不存在就是建立,存在就是更新操作。
4、索引文件的刪除
根據索引時的ID更新的文件的內容其RESTful介面如下
url:http://127.0.0.1:9200/song001/list001/1
HTTP方法採用DELETE的形式。
刪除過後,再通過查詢介面去查詢將得不到結果。
總結:
增刪改查的RESTful介面URL形式:http://localhost:9200/<index>/<type>/[<id>]
增刪改查分別對應:HTTP請求的PUT、GET、DELETE方法。PUT呼叫是如果不存在就是建立,已存在是更新。
快速bulk插入資料
執行命令線上安裝,不用下載 $ $ES_HOME/bin/plugin install org.codelibs/elasticsearch-reindexing/2.1.1 在查詢時出現max_result_window錯誤時, 執行以下命令,紅字要>=文件總數 curl -XPUT "http://192.168.1.106:9200/shark/_settings" -d '{ "index" : { "max_result_window" :30000 } }' 關閉節點ps -ef | grep elasticsearch kill ****