分布式搜索與分析引擎 ElasticSearch

what is Elasticsearch?

Open Source, Distributed, RESTful Search Engine

Elasticsearch是一個(gè)開源的、分布式、RESTful搜索引擎;

2004年,一個(gè)叫做Shay Banon的開發(fā)者,由于妻子要去倫敦學(xué)習(xí)廚師,他也跟著去了倫敦,為了給妻子開發(fā)一個(gè)搜索食譜的搜索引擎,他開始基于Lucene開發(fā)發(fā)布了他的第一個(gè)開源項(xiàng)目,叫做“Compass”,此后好幾年該項(xiàng)目沒有維護(hù),直到2010年,Shay?Banon在工作中需要高性能的、實(shí)時(shí)的、分布式的搜索,然后他決定重寫幾年前的Compass庫(kù)使其成為一個(gè)獨(dú)立的服務(wù)并命名為Elasticsearch;

2010年2月,Elasticsearch第一個(gè)版本發(fā)布;

2012年2月,Elasticsearch?1.0發(fā)布,同時(shí)成立Elastic公司(創(chuàng)業(yè))

2015年10月,Elasticsearch?2.0發(fā)布

2016年10月,Elasticsearch?5.0發(fā)布,至少需要jdk1.8

2017年8月,Elasticsearch?6.0發(fā)布

2019年8月,Elasticsearch?7.0發(fā)布

現(xiàn)在最新版本,Elasticsearch?7.6.2 (2020年5月)

誰在使用Elasticsearch?

1、維基百科,類似百度百科,全文檢索;

2、Stack Overflow國(guó)外的程序異常問答網(wǎng)站;

3、GitHub 開源代碼管理,搜索上千億行代碼;

4、京東到家訂單中心

5、攜程酒店訂單

6、攜程機(jī)票

7、去哪兒訂單中心

8、滴滴打車地圖搜索

9、58同城

10、餓了么

11、今日頭條

12、360安全

13、小米

14、vivo等

站內(nèi)搜索(新聞、論壇),IT信息系統(tǒng)搜索(OA,CRM,ERP等)

官網(wǎng):https://www.elastic.co/

Github:https://github.com/elastic

Elastic?search?2018年宣布上市,股票代碼為“ESTC”;

搜索無處不在

1、基于數(shù)據(jù)庫(kù)搜索

like %關(guān)鍵詞%,有諸多不足與局限;

2、搜索引擎框架

解決基于數(shù)據(jù)庫(kù)搜索的不足與局限,實(shí)現(xiàn)分布式、高可用、高性能搜索;

數(shù)據(jù)庫(kù)排行榜

Elasticsearch 屬于數(shù)據(jù)庫(kù)范疇,可以稱為nosql數(shù)據(jù)庫(kù);

https://db-engines.com/en/ranking

Elasticsearch官方認(rèn)證考試

https://training.elastic.co/exam/elastic-certified-engineer

報(bào)名費(fèi):$400 (大約2400 - 2800元人民幣)

ElasticSearch ?VS ?Solr

Solr是第一個(gè)基于Lucene核心庫(kù)功能完備的搜索引擎產(chǎn)品,誕生早于Elasticsearch,早期在全文搜索領(lǐng)域,Solr有非常大的優(yōu)勢(shì),在近幾年大數(shù)據(jù)發(fā)展時(shí)代,Elastic由于其分布式特性,滿足了很多PB級(jí)大數(shù)據(jù)的處理需求,特別是后面ELK三大組合的流行,Solr使用量逐漸下跌;

ElasticSearch和Solr均起源于Lucene,Lucene是基于Java語言開發(fā)的搜索引擎庫(kù)類(jar包)創(chuàng)建于1999年,2005年成為Apache頂級(jí)開源項(xiàng)目,Lucene具有高性能、但易擴(kuò)展有局限性,只能單機(jī)環(huán)境,而且只能基于Java語言開發(fā),其他php、python等不能使用;

類庫(kù)的接口學(xué)習(xí)曲線陡峭,原生并不支持水平擴(kuò)展;

自己開發(fā)一個(gè)完整的搜索引擎工作量比較大,必須要懂一些搜索引擎原理的人才能用好,所以后來elasticsearch基于lucene進(jìn)行封裝,支持分布式,可水平擴(kuò)展,降低全文檢索的學(xué)習(xí)曲線,基于http restful api可以被任何編程語言調(diào)用;

倒排索引(反向索引)

全文檢索:底層是倒排索引;

Elasticsearch 運(yùn)行環(huán)境

下載?https://www.elastic.co/cn/downloads/elasticsearch

解壓縮

tar -xvf elasticsearch-7.6.2-linux-x86_64.tar.gz

將目錄重命名

mv解壓后的文件名 ?elasticsearch

#配置自己的jdk13

export JAVA_HOME=/usr/local/elasticsearch-7.6.2/jdk

export PATH=$JAVA_HOME/bin:$PATH

#添加jdk判斷

if [ -x "$JAVA_HOME/bin/java" ]; then

????????JAVA="/opt/jdk-11.0.1/bin/java"

else

????????JAVA=`which java`

fi

改變所有文件擁有者

Chown centos:centos -R /usr/local/elasticsearch

進(jìn)入config文件夾開始配置

編輯jvm.options:

vim jvm.options

默認(rèn)配置如下:

-Xms1g

-Xmx1g

內(nèi)存占用太多了,調(diào)小一些:

-Xms512m

-Xmx512m

vim elasticsearch.yml

修改數(shù)據(jù)和日志目錄(不修改亦可,默認(rèn)目錄為當(dāng)前安裝目錄的data和logs文件夾下):

path.data: /home/新用戶名稱/elasticsearch/data # 數(shù)據(jù)目錄位置

path.logs: /home/新用戶名稱/elasticsearch/logs # 日志目錄位置

修改綁定的ip:

network.host: 0.0.0.0 #綁定到0.0.0.0,允許任何ip來訪問

默認(rèn)只允許本機(jī)訪問,修改為0.0.0.0后則可以遠(yuǎn)程訪問

配置信息如下:

屬性名及說明

cluster.name:配置elasticsearch的集群名稱,默認(rèn)是elasticsearch,可以修改成一個(gè)有意義的名稱;

node.name:節(jié)點(diǎn)名,es會(huì)默認(rèn)隨機(jī)指定一個(gè)名字,建議指定一個(gè)有意義的名稱;

path.data:設(shè)置索引數(shù)據(jù)的存儲(chǔ)路徑,默認(rèn)是es根目錄下的data文件夾,可以設(shè)置多個(gè)存儲(chǔ)路徑,用逗號(hào)隔開

path.logs:設(shè)置日志文件的存儲(chǔ)路徑,默認(rèn)是es根目錄下的logs文件夾

bootstrap.memory_lock:設(shè)置為true可以鎖住ES使用的內(nèi)存,避免內(nèi)存進(jìn)行swap

network.host:設(shè)置bind_host,設(shè)置為0.0.0.0允許外網(wǎng)訪問

http.port:設(shè)置對(duì)外服務(wù)的http端口,默認(rèn)為9200

discovery.seed_hosts:啟動(dòng)此節(jié)點(diǎn)時(shí),傳遞要執(zhí)行發(fā)現(xiàn)的主機(jī)的初始列表

cluster.initial_master_nodes:使用一組初始的主節(jié)點(diǎn)引導(dǎo)集群

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

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65535]

出現(xiàn)以上報(bào)錯(cuò)解決方案:切換到root用戶,編輯limits.conf 添加類似如下內(nèi)容

vi /etc/security/limits.conf?

添加如下內(nèi)容:

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

然后重啟linux

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

elasticsearch用戶擁有的內(nèi)存權(quán)限太小,至少需要262144;

解決辦法:

在/etc/sysctl.conf文件最后添加一行

vm.max_map_count=262144

即可永久修改

[3]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

把discovery.seed_hosts注釋打開,寫上當(dāng)前主節(jié)點(diǎn)的IP;

啟動(dòng)與關(guān)閉

./elasticsearch 前臺(tái)運(yùn)行,Ctrl + C 則程序終止;

./elasticsearch -d 后臺(tái)運(yùn)行出現(xiàn)started時(shí)啟動(dòng)完成

關(guān)閉kill pid

Elasticsearch端口9300、92009300是tcp通訊端口,集群ES節(jié)點(diǎn)之間通訊使用;

9200是http協(xié)議的RESTful接口

elasticsearch-head插件

ealsticsearch只是后端提供各種resulful api,那么怎么直觀的看它的信息呢?elasticsearch-head是一款專門針對(duì)于elasticsearch的客戶端工具,用來展示數(shù)據(jù):

elasticsearch-head安裝包,下載地址:

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

CentOS安裝npm

npm: Nodejs下的包管理器;

推薦從此處下載:https://npm.taobao.org/mirrors/可以下載想要的最新node版本

Nodejs最新版本:https://npm.taobao.org/mirrors/node/latest/

下載?

node-v13.13.0-linux-x64.tar.gz

解壓:

tar -zxvf node-v13.13.0-linux-x64.tar.gz

mv node-v13.13.0-linux-x64 node-v13.13.0

配置nodejs環(huán)境變量

vim /etc/profile

在path中加入 /usr/local/node-v13.13.0/bin即可;

source /etc/profile

驗(yàn)證:

node -v

npm -v

Npm環(huán)境準(zhǔn)備好了之后,開始安裝elasticsearch-head

解壓:

unzip elasticsearch-head-master

Cd elasticsearch-head-master

npm install?

(如果執(zhí)行失敗,可以cnpm install,使用cnpm之前需要安裝cnpm,通過

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

該命令安裝;

cnpm -v

npm run start(npm run-script start)

可以后臺(tái)啟動(dòng):

nohup npm run-script start &

npm -l 顯示所有使用幫助信息

然后訪問:http://localhost:9100/每個(gè)項(xiàng)目的根目錄下面,一般都有一個(gè)package.json文件,定義了這個(gè)項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息(比如名稱、版本、許可證等元數(shù)據(jù));npm install命令根據(jù)這個(gè)配置文件,自動(dòng)下載所需的模塊,也就是配置項(xiàng)目所需的運(yùn)行和開發(fā)環(huán)境;

Head插件訪問elasticsearch

要允許跨域:修改elasticsearch.yml文件,添加

http.cors.enabled: true

http.cors.allow-origin: "*"

Kibana運(yùn)行環(huán)境

Kibana的版本要和elasticsearch版本一致;

測(cè)試工具其實(shí)可以用很多種:postman、curl、head、瀏覽器插件、kibana;

Github?https://github.com/elastic/kibana

下載:https://www.elastic.co/downloads/kibana

下載下來是一個(gè)壓縮包,解壓即可;

啟動(dòng),進(jìn)入bin目錄?./kibana

漢化:./config/kibana.yml里面修改i18n.locale: “zh_CN“

kibana也不允許root啟動(dòng),指定centos用戶啟動(dòng)

chown centos:centos -R /usr/local/kibana

./kibana -h命令幫助

啟動(dòng)命令:

./kibana 或者 ./kibana serve

后臺(tái)啟動(dòng):

nohup /usr/local/kibana-7.6.2/bin/kibana?&

然后訪問:http://192.168.194.128:5601

遠(yuǎn)程訪問kibana界面被拒絕

將$KIBANA/config/kibaba.yml下的

server.host: "localhost" 更改為server.host: "0.0.0.0" 即可;


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容