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" 即可;