1昙啄、Elasticsearch是什么
elasticsearch是一款開(kāi)源的分布式搜索穆役、存儲(chǔ)、分析引擎梳凛;它目前的時(shí)效為近實(shí)時(shí)性的耿币。Solar也是頂級(jí)的開(kāi)源搜索引擎,也是基于lucene韧拒;elasticsearch與Solar相比安裝更加簡(jiǎn)單淹接,對(duì)于一些復(fù)雜的搜索支持更好,在大數(shù)據(jù)量下叛溢,elasticsearch的性能更好塑悼,現(xiàn)在被很多公司大量的使用。我們可以看到數(shù)據(jù)庫(kù)搜索引擎排名已經(jīng)很高了https://db-engines.com/en/ranking
<article data-author="Wxeditor" style="margin: 5px auto; padding: 0px; max-width: 100%; overflow-wrap: break-word !important; box-sizing: border-box !important;">
2楷掉、Elasticsearch發(fā)展
2.1 Elasticsarch發(fā)展史
2004年厢蒜,shay banon基于lucene開(kāi)發(fā)了compass。
2010年烹植,shay banon重構(gòu)了compass斑鸦,取名為elasticsearch,使其支持分布式和水平擴(kuò)展草雕。
2012年巷屿,Elasticsearch BV公司被創(chuàng)建,圍繞Elasticsearch及相關(guān)軟件提供商業(yè)服務(wù)和產(chǎn)品墩虹。
2015年嘱巾,Elasticsearch公司更名為Elastic.
Lucene 是一個(gè)高性能的搜索引擎庫(kù),它提供索引數(shù)據(jù)和搜索數(shù)據(jù)的功能诫钓,內(nèi)部非常復(fù)雜旬昭,elasticsearch利用了lucene的高性能,封裝了它的復(fù)雜性菌湃,對(duì)外可以提供rest接口稳懒,不同語(yǔ)言的應(yīng)用都可以調(diào)用。
軼事:
2004年,shay banon失業(yè)了场梆,準(zhǔn)備給他廚師老婆做一個(gè)食譜的搜索引擎墅冷,如果直接使用Lucene很難,所以他把使用lucene抽象了一下或油,并開(kāi)源了寞忿,開(kāi)發(fā)者可以直接在程序里使用compass來(lái)進(jìn)行搜索,2010年的時(shí)候顶岸,它已經(jīng)重構(gòu)了compass腔彰,取名為elasticsearch,支持分布式和水平擴(kuò)展辖佣。
2.2 Elasticsarch重要版本
Elastic的版本維護(hù)政策維護(hù)當(dāng)前主要版本的最新次要版本霹抛,以及上一個(gè)主要版本的最新次要版本,例如7.10.2卷谈,7主版本杯拐,10為次要版本,2為修復(fù)bug的版本世蔗。它的具體的版本政策可以查看(https://www.elastic.co/cn/support/eol)端逼,elasticsearch主要版本特性如下:
在實(shí)際生產(chǎn)中推薦采用7.x,官方做了很多優(yōu)化污淋,性能更好顶滩,功能更強(qiáng)大。
3寸爆、Elasticsearch應(yīng)用場(chǎng)景
Elastic公司圍繞著elasticsearch構(gòu)建一整套生態(tài)系統(tǒng)礁鲁,適用了很多熱門(mén)的使用場(chǎng)景
3.1 Elastic生態(tài)圈
2013年logstash被收購(gòu),同年kibana加入elastic公司赁豆,后續(xù)它陸續(xù)收購(gòu)了beat仅醇、prealert(機(jī)器學(xué)習(xí))等公司,將其納入到elastic生態(tài)圈歌憨。
- beats,輕量數(shù)據(jù)采集器墩衙,可收集文件务嫡、網(wǎng)絡(luò)包等數(shù)據(jù),它們安裝在目標(biāo)服務(wù)器作為代理漆改,轉(zhuǎn)發(fā)數(shù)據(jù)到logstash或elasticsearch上心铃。
- X-Pack,商業(yè)套件挫剑,提供了一些增值服務(wù)去扣,有些組件也開(kāi)源了。
3.2 使用場(chǎng)景
-
網(wǎng)站搜索
設(shè)計(jì)了豐富的api來(lái)提供搜索服務(wù)樊破,github愉棱、stackoverflow等網(wǎng)站的搜索都是基于elasticsearch唆铐。
-
日志
將分散的日志,集中化存儲(chǔ)到elasticsearch上奔滑。
日志管理一般分為:日志收集艾岂,格式化,檢索朋其,風(fēng)險(xiǎn)告警王浴。
-
數(shù)據(jù)庫(kù)同步
通過(guò)某種同步機(jī)制將數(shù)據(jù)庫(kù)某個(gè)表的數(shù)據(jù)同步到elasticsearch上,然后提供搜索服務(wù)梅猿。
-
指標(biāo)分析
提供了分組查詢(xún)氓辣、top查詢(xún)、排序袱蚓、相關(guān)度打分钞啸,可以進(jìn)行數(shù)據(jù)分析
4、Elasticsearch整體架構(gòu)
4.1 整體架構(gòu)圖
如上圖所示癞松,elasticsearch整體的功能劃分:
restful api爽撒,表示提供rest風(fēng)格的api來(lái)實(shí)現(xiàn)編程何管理
Transport, 網(wǎng)絡(luò)傳輸模塊,支持http响蓉,thrift等主流協(xié)議硕勿,默認(rèn)tcp
Scripting,腳本語(yǔ)言枫甲,支持使用groovy源武、painless等腳本語(yǔ)言
3rd plugin,支持第三方插件
Index module 索引文檔想幻、search module粱栖,搜索文檔
River,支持接入其它數(shù)據(jù)源
Jmx脏毯,監(jiān)控
Discovery闹究,服務(wù)發(fā)現(xiàn)模塊
Lucene directory,底層存儲(chǔ)基于lucene實(shí)現(xiàn)
Gateway食店,可以持久化到本地或者其它文件系統(tǒng)
4.2 基本概念
開(kāi)發(fā)視角:
-
文檔
可搜索的最小單位渣淤,我們向elasticsearch存儲(chǔ)的一條數(shù)據(jù),就是一個(gè)文檔吉嫩。每個(gè)文檔都有一個(gè)id价认,可以自己指定,也可以讓elasticsearch生成自娩。
-
索引
索引是文檔的容器用踩,一類(lèi)文檔的集合。可以對(duì)文檔元數(shù)據(jù)進(jìn)行定義脐彩,比如名稱(chēng)碎乃、類(lèi)型等。在物理上丁屎,索引的數(shù)據(jù)分布在分片上荠锭。
-
Type
在7.0以前,一個(gè)索引可以定義多個(gè)type晨川,7.0版本后证九,type廢除了,只有一個(gè)type為“_doc”共虑。
系統(tǒng)視角:
-
集群
一個(gè)elasticsearch集群由多個(gè)節(jié)點(diǎn)構(gòu)成愧怜,它的分布式架構(gòu)支持存儲(chǔ)水平擴(kuò)容,并且依靠副本可用性也很高妈拌。
-
節(jié)點(diǎn)
一個(gè)節(jié)點(diǎn)就是一個(gè)elasticsearch實(shí)例拥坛,即一個(gè)java進(jìn)程。節(jié)點(diǎn)根據(jù)功能可以劃分多種角色尘分,比如主節(jié)點(diǎn)猜惋、數(shù)據(jù)節(jié)點(diǎn)、協(xié)調(diào)節(jié)點(diǎn)培愁、ingest節(jié)點(diǎn)等著摔。默認(rèn)一個(gè)節(jié)點(diǎn)這些角色都承擔(dān)。
-
分片
為了解決數(shù)據(jù)水平擴(kuò)展定续,通過(guò)分片將數(shù)據(jù)分散到集群的節(jié)點(diǎn)上谍咆。一個(gè)索引分片數(shù)的設(shè)計(jì)需要提前做好評(píng)估,太大和太小都不好私股,具體怎么評(píng)估摹察,后續(xù)的文章會(huì)來(lái)探討。
<article data-author="Wxeditor" style="margin: 5px auto; padding: 0px; max-width: 100%; overflow-wrap: break-word !important; box-sizing: border-box !important;">
5倡鲸、Elasticsearch集群搭建
5.1 Elasticsearch安裝
安裝java8環(huán)境供嚎,7.0后的elasticsearch版本,內(nèi)置了java環(huán)境
-
下載elasticsearch二進(jìn)制文件(7.10.2)
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-10-2
-
啟動(dòng)elasticsearch集群(3節(jié)點(diǎn))
啟動(dòng)命令:
bin/elasticsearch -E node.name=node0 -E cluster.name=mylocalcluster -E path.data=node0_data
bin/elasticsearch -E node.name=node1 -E cluster.name=mylocalcluster -E path.data=node1_data
bin/elasticsearch -E node.name=node2 -E cluster.name=mylocalcluster -E path.data=node2_data
-
接口查看狀態(tài)
節(jié)點(diǎn)的狀態(tài)(http://localhost:9200)
{
"name" : "node0", //節(jié)點(diǎn)名稱(chēng)
"cluster_name" : "mylocalcluster", //集群名稱(chēng)
"cluster_uuid" : "nTdmburYQPmB2Ppmw0UhiQ",
"version" : {
"number" : "7.10.2",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
集群的狀態(tài)(http://localhost:9200/_cat/nodes)
127.0.0.1 31 78 11 cdhilmrstw * node0 //*表示是主節(jié)點(diǎn)
127.0.0.1 33 78 10 cdhilmrstw - node1
127.0.0.1 33 78 9 cdhilmrstw - node2
集群的健康狀態(tài)(http://localhost:9200/_cat/nodes)
{
"cluster_name": "mylocalcluster",
"status": "green", //集群狀態(tài)
"timed_out": false,
"number_of_nodes": 3,//節(jié)點(diǎn)數(shù)
"number_of_data_nodes": 3,//數(shù)據(jù)節(jié)點(diǎn)數(shù)
"active_primary_shards": 0,
"active_shards": 0,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100.0
}
-
安裝kibana來(lái)管理elasticsearch
下載kibana安裝包
https://www.elastic.co/cn/downloads/past-releases#kibana
配置
config\kibana.yml配置指向elastisearch集群
elasticsearch.hosts: ["http://localhost:9200","http://localhost:9201","http://localhost:9202"] i18n.locale: "zh-CN"
啟動(dòng)kibana峭状,執(zhí)行命令bin/kibana
進(jìn)入管理界面
導(dǎo)入樣本數(shù)據(jù)(可選克滴,可以自己驗(yàn)證功能)
image Kibana查看elasticsearch索引和數(shù)據(jù)
安裝cerebro可視化的查看集群狀態(tài)
cerebro-0.9.4\conf\application.conf
修改配置文件
啟動(dòng)bin\cerebro.bat
查看管理界面http://localhost:9000
5.2 Elasticsarch發(fā)展史
添加文檔
POST user/_doc
{
"name" : "xiao ming",
"age" : 12
}
注意post(自動(dòng)生成id)、put(可以指定Id宁炫。如果id已經(jīng)存在報(bào)錯(cuò))效果是不一樣的
查詢(xún)文檔
GET /user/_doc/2
更多的api可以查看官方文檔:
https://www.elastic.co/guide/en/elasticsearch/reference/7.1/docs.html
6偿曙、總結(jié)
本篇文章先是介紹了elasticsearch的發(fā)展歷史以及重大版本說(shuō)明氮凝,知道7.x版本以后已經(jīng)不支持自定義type了羔巢。接著介紹了elascitc公司生態(tài)圈以及elasticsearch的使用場(chǎng)景,知道了elasticsearch主要用于全文檢索、日志等熱門(mén)的場(chǎng)景中竿秆。然后通過(guò)一個(gè)elasticsearch集群搭建和相關(guān)組件的安裝启摄,快速上手了下文檔基礎(chǔ)操作。最后對(duì)elasticsearch整體功能幽钢、集群歉备、節(jié)點(diǎn)、分片等主要概念做了一些簡(jiǎn)單說(shuō)明匪燕,這樣我們對(duì)elasticsearch有了大概的了解蕾羊。后面的文章會(huì)對(duì)elasticsearch的功能和核心原理進(jìn)行進(jìn)一步探討。
關(guān)注IT巔峰技術(shù)帽驯,私信作者龟再,獲取以下2021全球架構(gòu)師峰會(huì)PDF資料。