百億級數(shù)據(jù)搜索引擎,Elasticsearch簡介和安裝

今天開始酪术,和大家一學(xué)習(xí)搜素引擎Elasticsearch相關(guān)的技術(shù)點(diǎn)感论。后續(xù)會(huì)和大家持續(xù)更新有關(guān)Elasticsearch相關(guān)的技術(shù)點(diǎn)表箭,歡迎大家關(guān)注求橄!

Elasticsearch是什么

Elasticsearch是一個(gè)高度可擴(kuò)展的開源全文本搜索和分析引擎娘锁。它可以快速牙寞,近實(shí)時(shí)地存儲,搜索和分析大量數(shù)據(jù)莫秆。它通常用作支持具有復(fù)雜搜索功能和要求的應(yīng)用程序的基礎(chǔ)引擎间雀。
Elasticsearch的場景
1.電商網(wǎng)站悔详。允許客戶搜索產(chǎn)品±柞澹可以使用ES存儲整個(gè)產(chǎn)品目錄和庫存伟端,并為其提供搜索和自動(dòng)完成功能。
2.日志或交易數(shù)據(jù)收集匪煌。并且要對數(shù)據(jù)進(jìn)行分析和挖掘以查找趨勢责蝠,統(tǒng)計(jì)信息,摘要或異常等萎庭。
3.價(jià)格警報(bào)平臺霜医。平臺允許客戶指定如“如果某商品的價(jià)格在下個(gè)月內(nèi)降到X以下,就通知我” 驳规。
4.業(yè)務(wù)智能分析肴敛。想要快速調(diào)查,分析吗购,可視化并針對大量數(shù)據(jù)提出特別問題医男。

Elasticsearch特點(diǎn)

Elasticsearch封裝了Lucene,開箱即用捻勉,使用起來更加簡單镀梭。Elasticsearch支持集群,也支持集群節(jié)點(diǎn)動(dòng)態(tài)擴(kuò)展踱启,在高可用上做了很多工作报账,是一個(gè)搜索引擎,而不是一個(gè)索引類庫埠偿。
1.Elasticsearch基于Lucene構(gòu)建透罢,Elasticsearch利用Lucene做實(shí)際的工作
2.ELasticsearch中的每個(gè)分片都是一個(gè)分離的Lucene實(shí)例.
3.Elasticsearch在Lucene基礎(chǔ)上(即利用Lucene的功能)提供了一個(gè)分布式的、基于JSON的REST API 來更方便地使用 Lucene的功能冠蒋。
4.Elasticsearch提供其他支持功能羽圃,如:線程池,隊(duì)列抖剿,節(jié)點(diǎn)/集群監(jiān)控API统屈,數(shù)據(jù)監(jiān)控API,集群管理等

Elasticsearch基本概念

集群(Cluster)

集群是一個(gè)或多個(gè)節(jié)點(diǎn)(服務(wù)器)的集合牙躺,這些節(jié)點(diǎn)一起保存全部數(shù)據(jù)愁憔,并在所有節(jié)點(diǎn)之間提供索引和搜索功能。集群由唯一名稱標(biāo)識孽拷,默認(rèn)情況下為“ elasticsearch”吨掌。此名稱很重要,因?yàn)槿绻?jié)點(diǎn)被設(shè)置為通過名稱加入群集,則該節(jié)點(diǎn)只能是群集的一部分膜宋。

節(jié)點(diǎn)(Node)

節(jié)點(diǎn)是單個(gè)服務(wù)器是群集的一部分窿侈,用于存儲數(shù)據(jù)并參與群集的索引和搜索。像群集一樣秋茫,節(jié)點(diǎn)由名稱標(biāo)識史简,該名稱默認(rèn)為在啟動(dòng)時(shí)分配給該節(jié)點(diǎn)的隨機(jī)唯一標(biāo)識符(UUID)。如果不想使用默認(rèn)的節(jié)點(diǎn)名稱肛著,可以自定義節(jié)點(diǎn)名稱圆兵。該名稱對于管理集群非常重要,命名時(shí)盡可能可以通過名稱來判別在集群中對應(yīng)哪個(gè)節(jié)點(diǎn)枢贿。

索引(Index)

索引是具有相似特征的文檔的集合殉农。如:可以以客戶數(shù)據(jù)創(chuàng)建索引,以產(chǎn)品目錄創(chuàng)建一個(gè)索引局荚,以訂單數(shù)據(jù)創(chuàng)建一個(gè)索引超凳。

類型(Type)

在索引中,您可以定義一個(gè)或多個(gè)類型耀态。類型是索引的邏輯類別或分區(qū)轮傍。通常,為具有一組公共字段的文檔定義一種類型

文檔(Document)

文件是可以索引的基本信息單位首装。

Elastic Search 關(guān)系型數(shù)據(jù)庫
索引(Indices) 數(shù)據(jù)庫(Databases)
類型(Types) 表(Table)
文檔(Document) 行(Row)
字段(Field) 列(Column)
Mapping Schema
結(jié)構(gòu)化查詢語言(query DSL) SQL
字段(Field) 列(Column)
GET http:9200/index... SELECT * FROM table... where ...

分片(Shard)

實(shí)際項(xiàng)目中金麸,索引數(shù)據(jù)可能會(huì)非常龐大,而這些數(shù)據(jù)可能超過了單個(gè)節(jié)點(diǎn)的硬件條件簿盅。如:十億個(gè)文檔的單個(gè)索引占用了1TB的磁盤空間,這時(shí)無法使用單個(gè)節(jié)點(diǎn)的磁盤存儲揍魂,或者因?yàn)闄z索過程太慢而無法滿足搜索請求桨醋。
為了解決此問題,Elasticsearch提供了將索引細(xì)分為多個(gè)碎片(分片)的功能现斋。創(chuàng)建索引時(shí)喜最,只需定義所需的分片數(shù)量即可。每個(gè)分片本身就是一個(gè)功能齊全且獨(dú)立的“索引”庄蹋,它們可以托管在群集中的任何節(jié)點(diǎn)上瞬内。

副本(Replicas)

為了以防分片/節(jié)點(diǎn)因?yàn)槟承┰蛎摍C(jī)或消失(提供高可用機(jī)制),強(qiáng)烈建議使用故障轉(zhuǎn)移機(jī)制限书。為此虫蝶,Elasticsearch允許將索引分片的一個(gè)或多個(gè)副本制作為所謂的副本分片(簡稱副本)。

近實(shí)時(shí)搜索

隨著按段(per-segment)搜索的發(fā)展倦西,一個(gè)新的文檔從索引到可被搜索的延遲顯著降低了能真。新文檔在幾分鐘之內(nèi)即可被檢索,但這樣還是不夠快。
磁盤在這里成為了瓶頸粉铐。提交(Commiting)一個(gè)新的段到磁盤需要一個(gè) fsyn 操作來確保段被物理性地寫入磁盤疼约,這樣在斷電的時(shí)候就不會(huì)丟失數(shù)據(jù)。 但是 fsyn 操作代價(jià)很大蝙泼;如果每次索引一個(gè)文檔都去執(zhí)行一次的話會(huì)造成很大的性能問題程剥。
我們需要的是一個(gè)更輕量的方式來使一個(gè)文檔可被搜索,這意味著** fsyn** 要從整個(gè)過程中被移除汤踏。
在Elasticsearch和磁盤之間是文件系統(tǒng)緩存织鲸。像之前描述的一樣, 在內(nèi)存索引緩沖區(qū)中的文檔會(huì)被寫入到一個(gè)新的段中茎活。但是這里新段會(huì)被先寫入到文件系統(tǒng)緩存——這一步代價(jià)會(huì)比較低昙沦,稍后再被刷新到磁盤——這一步代價(jià)比較高。不過只要文件已經(jīng)在緩存中载荔, 就可以像其它文件一樣被打開和讀取了盾饮。
Lucene 允許新段被寫入和打開—使其包含的文檔在未進(jìn)行一次完整提交時(shí)便對搜索可見。 這種方式比進(jìn)行一次提交代價(jià)要小得多懒熙,并且在不影響性能的前提下可以被頻繁地執(zhí)行丘损。

持久化更新

即使通過每秒刷新(refresh)實(shí)現(xiàn)了近實(shí)時(shí)搜索,我們?nèi)匀恍枰?jīng)常進(jìn)行完整提交來確保能從失敗中恢復(fù)工扎。但在兩次提交之間發(fā)生變化的文檔怎么辦徘钥?我們也不希望丟失掉這些數(shù)據(jù)。
Elasticsearch 增加了一個(gè) translog 肢娘,或者叫事務(wù)日志醉鳖,在每一次對 Elasticsearch 進(jìn)行操作時(shí)均進(jìn)行了日志記錄。通過 translog 瞬铸,整個(gè)流程看起來是下面這樣:

  1. 一個(gè)文檔被索引之后台妆,就會(huì)被添加到內(nèi)存緩沖區(qū),并且追加到了 translog 拘荡。
  2. 刷新(refresh)使分片處于“刷新(refresh)完成后, 緩存被清空但是事務(wù)日志不會(huì)” 的狀態(tài)臼节,分片每秒被刷新(refresh)一次:
    ①這些在內(nèi)存緩沖區(qū)的文檔被寫入到一個(gè)新的段中,且沒有進(jìn)行 fsyn 操作珊皿。
    ②這個(gè)段被打開网缝,使其可被搜索。
    ③內(nèi)存緩沖區(qū)被清空蟋定。
  3. 這個(gè)進(jìn)程繼續(xù)工作粉臊,更多的文檔被添加到內(nèi)存緩沖區(qū)和追加到事務(wù)日志
  4. 每隔一段時(shí)間—例如 translog 變得越來越大—索引被刷新(flush);一個(gè)新的 translog 被創(chuàng)建驶兜,并且一個(gè)全量提交被執(zhí)行(“在刷新(flush)之后维费,段被全量提交果元,并且事務(wù)日志被清空”):
    ①所有在內(nèi)存緩沖區(qū)的文檔都被寫入一個(gè)新的段。
    ②緩沖區(qū)被清空犀盟。
    ③一個(gè)提交點(diǎn)被寫入硬盤而晒。
    ④文件系統(tǒng)緩存通過 fsyn 被刷新(flush)。
    ⑤老的 translog 被刪除阅畴。

Elasticsearch安裝配置

版本選擇

Elasticsearch 5.6.15
JDK 版本最少 JDK 1.8.0_133

下載并解壓

# 下載elasticsearch-5.6.16
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.16.tar.gz
# 解壓文件
$ tar xvzf elasticsearch-5.6.16.tar.gz
# 移動(dòng)到指定目錄
$ mv ./elasticsearch-5.6.16 /usr/path/to

配置

配置文件詳解
配置項(xiàng) 配置項(xiàng)說明
cluster.name Elasticsearch集群名稱倡怎。默認(rèn)名稱為elasticsearch
node.name 節(jié)點(diǎn)名稱。默認(rèn)情況下贱枣,Elasticsearch使用隨機(jī)生成UUID的前七個(gè)字符作為節(jié)點(diǎn)ID监署。節(jié)點(diǎn)ID是持久的在重新啟動(dòng)時(shí)也不會(huì)更改,因此默認(rèn)節(jié)點(diǎn)名稱也不會(huì)更改纽哥。
node.attr.rack 節(jié)點(diǎn)服務(wù)器所在的機(jī)架信息
path.data 設(shè)置索引數(shù)據(jù)的存儲路徑钠乏,默認(rèn)是Elasticsearch根目錄下data文件夾〈核可以設(shè)置多個(gè)存儲路徑晓避,用逗號隔開
path.log 設(shè)置日志文件的存儲路徑,默認(rèn)是Elasticsearch根目錄下logs文件夾
bootstrap.memory_lock 設(shè)置為true代表任何JVM內(nèi)存都不會(huì)交換到磁盤上只壳,防止Elasticsearch內(nèi)存被交換出去影響性能俏拱。
network.host 指定Elasticsearch節(jié)點(diǎn)的IP地址
http.port 設(shè)置Elasticsearch對外服務(wù)的http端口號。默認(rèn)9200
discovery.zen.ping.unicast.hosts 設(shè)置集群中master節(jié)點(diǎn)的初始列表吼句,可以通過這些節(jié)點(diǎn)來自動(dòng)發(fā)現(xiàn)新加入集群的節(jié)點(diǎn)
discovery.zen.minimum_master_nodes 該參數(shù)是為了防止”腦裂”的產(chǎn)生锅必,定義了為形成群集而必須可見的符合主機(jī)要求的最小數(shù)量。默認(rèn)為1惕艳。
gateway.recover_after_nodes 只要預(yù)期的節(jié)點(diǎn)數(shù)已加入集群搞隐,就會(huì)啟動(dòng)本地分片的恢復(fù)。默認(rèn)為0
action.destructive_requires_name 只能刪除指定了名稱的數(shù)據(jù)远搪,而不允許通過 _all 或通配符來刪除匹配的索引庫劣纲。可以Rest API 動(dòng)態(tài)的更新這個(gè)設(shè)置终娃。

系統(tǒng)配置文件

memory_lock配置

如果memory_lock設(shè)置為true,出現(xiàn)報(bào)錯(cuò)蒸甜,則需要修改下面2個(gè)Linux系統(tǒng)文件:
修改 /etc/security/limits.conf

soft nofile 65536
hard nofile 65536
soft nproc 32000
hard nproc 32000
hard memlock unlimited
soft memlock unlimited

修改/etc/systemd/system.conf

DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity

max_map_count警告
臨時(shí)設(shè)置棠耕,當(dāng)Linux重新啟動(dòng)會(huì)恢復(fù)到設(shè)置之前的值。

$ sysctl -w vm.max_map_count=262144

# 查看結(jié)果:
$ sysctl -a|grep vm.max_map_count

# 顯示:
$ vm.max_map_count = 262144

永久設(shè)置
在 /etc/sysctl.conf文件最后添加一行

vm.max_map_count=262144

啟動(dòng)

$ cd $ES_HOME/bin

# 啟動(dòng)elasticsearch
$ ./elasticsearch

# 帶參數(shù)覆蓋配置啟動(dòng)(通過自定義名稱覆蓋集群默認(rèn)的名稱或節(jié)點(diǎn)名稱)
$ ./elasticsearch -Ecluster.name=my_cluster_name -Enode.name=my_node_name

至此柠新,有關(guān)于Elasticsearch簡介和安裝和大家分享完了窍荧,后續(xù)陸續(xù)為大家分享有關(guān)Elasticsearch先關(guān)的知識點(diǎn),歡迎大家持續(xù)關(guān)注恨憎,相互探討學(xué)習(xí)蕊退!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末郊楣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子瓤荔,更是在濱河造成了極大的恐慌净蚤,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件输硝,死亡現(xiàn)場離奇詭異今瀑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)点把,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評論 3 385
  • 文/潘曉璐 我一進(jìn)店門橘荠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人郎逃,你說我怎么就攤上這事哥童。” “怎么了褒翰?”我有些...
    開封第一講書人閱讀 157,921評論 0 348
  • 文/不壞的土叔 我叫張陵贮懈,是天一觀的道長。 經(jīng)常有香客問我影暴,道長错邦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評論 1 284
  • 正文 為了忘掉前任型宙,我火速辦了婚禮撬呢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘妆兑。我一直安慰自己魂拦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評論 6 386
  • 文/花漫 我一把揭開白布搁嗓。 她就那樣靜靜地躺著芯勘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪腺逛。 梳的紋絲不亂的頭發(fā)上荷愕,一...
    開封第一講書人閱讀 49,950評論 1 291
  • 那天,我揣著相機(jī)與錄音棍矛,去河邊找鬼安疗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛够委,可吹牛的內(nèi)容都是我干的荐类。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼茁帽,長吁一口氣:“原來是場噩夢啊……” “哼玉罐!你這毒婦竟也來了屈嗤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,817評論 0 268
  • 序言:老撾萬榮一對情侶失蹤吊输,失蹤者是張志新(化名)和其女友劉穎饶号,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體璧亚,經(jīng)...
    沈念sama閱讀 44,275評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讨韭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了癣蟋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片透硝。...
    茶點(diǎn)故事閱讀 38,724評論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖疯搅,靈堂內(nèi)的尸體忽然破棺而出濒生,到底是詐尸還是另有隱情,我是刑警寧澤幔欧,帶...
    沈念sama閱讀 34,409評論 4 333
  • 正文 年R本政府宣布罪治,位于F島的核電站,受9級特大地震影響礁蔗,放射性物質(zhì)發(fā)生泄漏觉义。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評論 3 316
  • 文/蒙蒙 一浴井、第九天 我趴在偏房一處隱蔽的房頂上張望晒骇。 院中可真熱鬧,春花似錦磺浙、人聲如沸洪囤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘤缩。三九已至,卻和暖如春伦泥,著一層夾襖步出監(jiān)牢的瞬間剥啤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評論 1 266
  • 我被黑心中介騙來泰國打工不脯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留府怯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評論 2 361
  • 正文 我出身青樓跨新,卻偏偏與公主長得像富腊,于是被迫代替她去往敵國和親坏逢。 傳聞我的和親對象是個(gè)殘疾皇子域帐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 灰蒙蒙的天 飄落著淅淅瀝瀝的小雨 我站在這壞天氣里 心情格外沉重 于是轉(zhuǎn)身向大海走去 微冷的風(fēng)將我吹醒 我告訴自己...
    廣電1702趙曉宇21閱讀 123評論 1 1
  • 2018.12.18 這一個(gè)星期在擔(dān)心赘被、害怕焦慮中度過⌒ごВ惶惶不可終日民假。 老爸病了,由于突發(fā)狀況120拉去醫(yī)院急救室...
    JMY鈺閱讀 1,849評論 4 11
  • 我們總是在慣性中生活,在教導(dǎo)下學(xué)習(xí)彤断,在成規(guī)中思考野舶,在勸解中決定,并在無助的結(jié)果中自責(zé)宰衙。是時(shí)候放下這一切平道。精進(jìn),成為...
    夏沫er閱讀 405評論 1 2
  • 對日常生活瑣事的回憶是一件說矯情就矯情的事供炼,可又有誰能不偶爾想起過去走過的一串串歲月織成的蜘蛛網(wǎng)一屋?很多時(shí)候...
    曾經(jīng)歷過閱讀 169評論 0 0
  • 暮春送客 唐·韓琮 綠暗紅稀出鳳城, 暮云樓閣古今情袋哼。 行人莫聽宮前水冀墨, 流盡年光是此聲。 譯注 花飛卉謝涛贯,葉茂枝...
    老丑先生閱讀 353評論 1 0