全文搜索引擎 Elasticsearch 入門:集群搭建

本文主要介紹什麼是 ElasticSearch 以及為什麼需要它,如何在本機安裝部署 ElasticSearch 實例,同時會演示安裝 ElasticSearch 插件,以及如何在本地部署多實例集群,方便在日後學習分佈式相關原理。

什麼是 ElasticSearch?

ElasticSearch 是一個基於 Lucene 的搜索服務器,它提供了一個分佈式多用戶能力的全文搜索引擎,基於 RESTful web 接口。ElasticSearch 是用 Java 開發的,並作為 Apache 許可條款下的開放源碼發佈,是當前流行的企業級搜索引擎。設計用於雲計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便,其中維基百科、Stack Overflow、Github 的搜索都是基於 ElasticSearch 構建的。

簡而言之,ElasticSearch 是一個開源近實時分佈式存儲、搜索、分析引擎

ElasticSearch 的主要功能簡單來說就是兩方面-搜索聚合(比如最近7天口罩商品銷量排名前10的商家列表),另外當海量數據不斷增長的時候,還提供分佈式存儲以及集群管理能力。

因為 ElasticSearch 是起源於 Lucene 的,在這裡簡單地介紹下 Lucene:

Lucene 就是一個 jar 包,裡面包含了封裝好的各種建立倒排索引,以及進行搜索的代碼,包括各種算法。我們就用 Java 開發的時候,引入 Lucene jar,然後基於 Lucene 的 API 進行去進行開發就可以了。使用 Lucene 就可以去將已有的數據建立索引,Lucene 會在本地磁盤上面,給我們組織索引的數據結構。另外的話,我們也可以用 Lucene 提供的一些功能和 API 來針對磁盤上的索引數據進行搜索。

同時 Lucene 也存在著很多侷限性,比如只能基於 Java 語言開發,類庫的接口學習曲線陡峭,原生並不支持水平擴展等。ElasticSearch 就解決了以上存在的問題,做到了支持分佈式,可水平擴展,並且降低全文檢索的學習曲線,可以被任何編程語言調用。

為什麼需要 ElasticSearch?

用數據庫,也可以實現搜索的功能,為什麼還需要搜索引擎呢? 那我們來看一下如果用數據庫做搜索會怎麼樣:

假如你在電商平臺搜索物品,每個物品在數據庫都有一條記錄,每條記錄的指定字段的文本,可能會很長,比如說商品描述字段的長度,有長達數千個,甚至數萬個字符,這個時候,每次都要對每條記錄的所有文本進行掃描,去判斷包不包含我指定的這個關鍵詞,比如我們搜索“口罩”,效率就會很慢。

並且還不能將搜索詞拆分開來,儘可能去搜索更多的符合你的期望的結果,比如輸入“醫用罩”,就搜索不出來“醫用口罩”。

但是基於 ElasticSearch 的 Github,比如我們搜索“設模式”,搜索結果也會出現“設計模式”:

全文搜索引擎 Elasticsearch 入門:集群搭建

因此,用數據庫來實現搜索,是不太靠譜的,性能上也會比較差。

前面說了 ElasticSearch 是分佈式搜索引擎,那麼就讓我們來看下 ElasticSearch 的分佈式架構:

ElasticSearch 分佈式架構

全文搜索引擎 Elasticsearch 入門:集群搭建

ElasticSearch 就是為高可用和可擴展而生的,從圖中可以看出 ElasticSearch 很容易去做水平擴展,同時也是非常容易在個人電腦上做開發環境的搭建。當數據規模變大的情況下,集群規模可以從單個擴展至數百個節點,除此之外,ElasticSearch 還支持設置不同的節點類型,針對日誌類的應用,可以用集群做一個 Hot & Warm 部署。

可以通過購置性能更強的服務器來完成,稱為垂直擴展或者向上擴展,或增加更多的服務器來完成,稱為水平擴展或者向外擴展

ElasticSearch 是基於 Java 語言開發的,在之前安裝是需要在本機安裝 JDK 開發環境,但是在 ElasticSearch 7.0 版本後,內置了 Java 開發環境,使得安裝會變得更加簡單。

接下來讓我們來動手安裝 ElasticSearch。

ElasticSearch 安裝與配置

官網下載地址: https://www.elastic.co/downloads/ElasticSearch

全文搜索引擎 Elasticsearch 入門:集群搭建

打開官網後根據自己的系統選擇對應文件,因為我用的是 Windows 環境,所以下載 ElasticSearch-7.1.0-windows-x86_64.zip 版本,下載完成後解壓即可。

在運行 ElasticSearch 之前,先讓我們來窺探下 ElasticSearch 的文件目錄結構:

文件目錄結構

全文搜索引擎 Elasticsearch 入門:集群搭建

解壓後的目錄結構如上圖所示,其中 bin 目錄下主要是腳本文件;config 目錄下主要是 ElasticSearch 配置文件,其中 ElasticSearch.yml 是主要需要配置的地方;JDK 目錄是在 ElasticSearch 7.0 版本後出現的,為 Java 運行環境;data 目錄其實包含了 ElasticSearch 的相關數據文件;lib 目錄包含 Java 的類庫;logs 目錄下主要是 ElasticSearch 運行過程中所有的日誌文件;modules 目錄下包含所有的 ES 模塊;ElasticSearch 是可以通過插件的方式去進行擴展,因此 plugins 目錄下包含所有已安裝的插件。

在 config 目錄下有一個 jvm.options 文件,這是 JVM 的配置文件,7.1 版本中默認的 Xms 和 Xmx 都為 1GB。

建議把 Xms 和 Xmx 設置成一樣的,也就是最大最小內存,Xmx 不要超過機器內存的 50%,內存的總量不要超過 30GB。

接下來讓我們啟動 ElasticSearch。

運行單個 ElasticSearch 實例

進入 bin 目錄,打開 cmd 命令行,輸入 elasticsearch -E node.name=node0 -E cluster.name=wupx -E path.data=node0_data,就可以運行一個 ElasticSearch 實例,ElasticSearch 本身特點之一就是開箱即用,如果是中小型應用,數據量少,操作不是很複雜,直接啟動就可以用了。

可以在瀏覽器輸入 http://localhost:9200,就可以看到 ElasticSearch 在本機啟動起來了,網頁顯示內容如下:

<code>{
"name" : "node0",
"cluster_name" : "wupx",
"cluster_uuid" : "1TT8NYjcSxmLKeG-1ukqfA",
"version" : {
"number" : "7.1.0",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "606a173",
"build_date" : "2019-05-16T00:43:15.323135Z",
"build_snapshot" : false,
"lucene_version" : "8.0.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}/<code>

其中 name 為 節點名稱,cluster_name 為**集群名稱**(默認的集群名稱為 ElasticSearch),version.number: 7.1.0 為 **ElasticSearch 版本號**。

接下來讓我們看下如何在本機安裝 ElasticSearch 插件。

安裝與查看插件

在 cmd 中輸入 elasticsearch-plugin list 可以查看本機已安裝的插件。

輸入 elasticsearch-plugin install analysis-icu 下載國際化分詞插件安裝到本機。

安裝成功後,啟動 ElasticSearch,訪問 http://localhost:9200/_cat/plugins ,我們可以看到這個插件成功安裝在這個集群上面了。

全文搜索引擎 Elasticsearch 入門:集群搭建

如何在開發機上運行多個 ElasticSearch 實例呢?我們知道 ElasticSearch 其中一個特色是可以以分佈式的方式去運行,也就是可以在多個機器上去運行多個不同實例來組成一個集群,為了能夠理解內部工作機制,讓我們一起來實踐操作下。

運行多個 ElasticSearch 實例

在 cmd 中輸入如下代碼,每次啟動指定節點名稱,指定相同的集群名字,指定不同的存放數據地址,就可以運行四個 ElasticSearch 實例在後臺。

<code>elasticsearch -E node.name=node0 -E cluster.name=wupx -E path.data=node0_data -d
elasticsearch -E node.name=node1 -E cluster.name=wupx -E path.data=node1_data -d
elasticsearch -E node.name=node2 -E cluster.name=wupx -E path.data=node2_data -d
elasticsearch -E node.name=node3 -E cluster.name=wupx -E path.data=node3_data -d/<code>

在瀏覽器訪問 http://localhost:9200/_cat/nodes ,可以查看集群存在哪裡節點。

全文搜索引擎 Elasticsearch 入門:集群搭建

總結

這就是本文的主要內容,我相信大家對 ElasticSearch 有了初步的瞭解,都可以在本地運行一個 ElasticSearch 實例,也學會了在實例上安裝你需要的插件,最後也實踐了怎麼在本機運行多個 ElasticSearch 實例的集群,這可以幫助我們以後更好地理解 ElasticSearch 分佈式集群工作的方式。

參考文獻

《深入理解ElasticSearch》

《Elasticsearch技術解析與實戰》

Elasticsearch頂尖高手系列

Elasticsearch核心技術與實戰

https://www.elastic.co/cn/what-is/elasticsearch


分享到:


相關文章: