ElasticSearch 學(xué)習(xí)筆記 之基本概念

前言

ELK Stack 簡介

ELK 是三個開源軟件的縮寫,分別為:Elasticsearch钢颂、Logstash 以及 Kibana蜻韭,它們都是開源軟件蔑担。不過現(xiàn)在還新增了一個 Beats左电,它是一個輕量級的日志收集處理工具(Agent)廉侧,Beats 占用資源少,適合于在各個服務(wù)器上搜集日志后傳輸給 Logstash篓足,官方也推薦此工具段誊,目前由于原本的 ELK Stack 成員中加入了 Beats 工具所以已改名為 Elastic Stack。

Logstash 已經(jīng)逐漸被beats 替代了栈拖。按照官方說法:

Logstash adds powerful data parsing and transformation features, but usually isn’t required.

Elastic Stack 包含:

  • Elasticsearch 是個開源分布式搜索引擎连舍,提供搜集、分析辱魁、存儲數(shù)據(jù)三大功能烟瞧。詳細(xì)可參考 Elasticsearch 權(quán)威指南
  • Logstash 主要是用來日志的搜集诗鸭、分析染簇、過濾日志的工具,支持大量的數(shù)據(jù)獲取方式强岸。一般工作方式為 c/s 架構(gòu)锻弓,client 端安裝在需要收集日志的主機上,server 端負(fù)責(zé)將收到的各節(jié)點日志進行過濾蝌箍、修改等操作在一并發(fā)往 Elasticsearch 上去青灼。
  • Kibana 也是一個開源和免費的工具,Kibana 可以為 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面妓盲,可以幫助匯總杂拨、分析和搜索重要數(shù)據(jù)日志。
  • Beats 在這里是一個輕量級日志采集器悯衬,其實 Beats 家族有 6 個成員弹沽,早期的 ELK 架構(gòu)中使用 Logstash 收集、解析日志,但是 Logstash 對內(nèi)存策橘、cpu炸渡、io 等資源消耗比較高。相比 Logstash丽已,Beats 所占系統(tǒng)的 CPU 和內(nèi)存幾乎可以忽略不計蚌堵。

目前 Beats 包含六種工具:

  • Packetbeat: 網(wǎng)絡(luò)數(shù)據(jù)(收集網(wǎng)絡(luò)流量數(shù)據(jù))
  • Metricbeat: 指標(biāo)(收集系統(tǒng)、進程和文件系統(tǒng)級別的 CPU 和內(nèi)存使用情況等數(shù)據(jù))
  • Filebeat: 日志文件(收集文件數(shù)據(jù))
  • Winlogbeat: windows 事件日志(收集 Windows 事件日志數(shù)據(jù))
  • Auditbeat:審計數(shù)據(jù)(收集審計日志)
  • Heartbeat:運行時間監(jiān)控(收集系統(tǒng)運行時的數(shù)據(jù))

是什么沛婴?

Elasticsearch is a real-time, distributed storage, search, and analytics engine

Elasticsearch 是一個實時分布式存儲吼畏、搜索、分析的引擎瘸味。

介紹那兒有幾個關(guān)鍵字:

  • 實時
  • 分布式
  • 搜索
  • 分析(通過聚合來實現(xiàn))

ES基于Apache Lucene(TM)的開源搜索引擎宫仗,是Lucene的集群版本。

為什么需要 Elasticsearch旁仿?

相對于傳統(tǒng)關(guān)系型數(shù)據(jù)庫藕夫,Elasticsearch的強大之處就是可以模糊查詢

主要表現(xiàn)在 :

  • Elasticsearch對模糊搜索非常擅長(搜索速度很快)
  • 從Elasticsearch搜索到的數(shù)據(jù)可以根據(jù)評分過濾掉大部分的枯冈,只要返回評分高的給用戶就好了(原生就支持排序)
  • 沒有那么準(zhǔn)確的關(guān)鍵字也能搜出相關(guān)的結(jié)果(能匹配有相關(guān)性的記錄)

Elasticsearch的術(shù)語

  • Index:一個索引就是一個擁有相似特征的文檔的集合毅贮。相當(dāng)于數(shù)據(jù)庫的database 。
  • Type:這個在新的Elasticsearch版本已經(jīng)廢除(在以前的Elasticsearch版本尘奏,一個Index下支持多個Type--有點類似于消息隊列一個topic下多個group的概念)
  • Document:ES是面向文檔(document oriented)的滩褥,這意味著它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲炫加,還會索引(index)每個文檔的內(nèi)容使之可以被搜索瑰煎。在ES中,你可以對文檔(而非成行成列的數(shù)據(jù))進行索引俗孝、搜索酒甸、排序、過濾赋铝。
    Document相當(dāng)于數(shù)據(jù)庫的一行記錄插勤。由于es存儲的數(shù)據(jù)是文檔型的,一條數(shù)據(jù)對應(yīng)一篇文檔即相當(dāng)于mysql數(shù)據(jù)庫中的一行數(shù)據(jù)row革骨, 一個文檔中可以有多個字段也就是mysql數(shù)據(jù)庫一行可以有多列农尖。一個文檔是一個可被索引的基礎(chǔ)信息單元。比如良哲,你可以擁有某一個客戶的文檔盛卡、某一個產(chǎn)品的一個文檔、某個訂單的一個文檔筑凫。文檔以JSON格式來表示滑沧,而JSON是一個到處存在的互聯(lián)網(wǎng)數(shù)據(jù)交互格式喇颁。
  • Field:相當(dāng)于數(shù)據(jù)庫的Column的概念
  • Mapping:相當(dāng)于數(shù)據(jù)庫的Schema的概念,定義 field 的類型嚎货。
  • DSL:(Domain Specific Language特定領(lǐng)域語言)以JSON請求體的形式出現(xiàn)橘霎。 相當(dāng)于數(shù)據(jù)庫的SQL(給我們讀取Elasticsearch數(shù)據(jù)的API)
  • shards and replicas:分片和復(fù)制
  • segment:真實的寫入單位
  • GET/PUT/POST/DELETE 分別類似與mysql中的select/update/delete
RDBMS(關(guān)系型數(shù)據(jù)庫) ElasticSearch
Database Index
Row Document
Column Field
Schema Mapping
SQL DSL

相信大家看完上面的對比圖,對Elasticsearch的一些術(shù)語就不難理解了殖属。

一個Elasticsearch集群會有多個Elasticsearch節(jié)點姐叁,所謂節(jié)點實際上就是運行著Elasticsearch進程的機器。

在眾多的節(jié)點中洗显,其中會有一個Master Node外潜,它主要負(fù)責(zé)維護索引元數(shù)據(jù)、負(fù)責(zé)切換主分片和副本分片身份等工作(后面會講到分片的概念)挠唆,如果主節(jié)點掛了处窥,會選舉出一個新的主節(jié)點。

Elasticsearch最外層的是Index(相當(dāng)于數(shù)據(jù)庫 表的概念)玄组;一個Index的數(shù)據(jù)我們可以分發(fā)到不同的Node上進行存儲滔驾,這個操作就叫做分片

比如現(xiàn)在我集群里邊有4個節(jié)點俄讹,我現(xiàn)在有一個Index哆致,想將這個Index在4個節(jié)點上存儲,那我們可以設(shè)置為4個分片患膛。這4個分片的數(shù)據(jù)合起來就是Index的數(shù)據(jù)摊阀。

為什么要分片?原因也很簡單:

  • 如果一個Index的數(shù)據(jù)量太大踪蹬,只有一個分片胞此,那只會在一個節(jié)點上存儲,隨著數(shù)據(jù)量的增長跃捣,一個節(jié)點未必能把一個Index存儲下來漱牵。
  • 多個分片,在寫入或查詢的時候就可以并行操作(從各個節(jié)點中讀寫數(shù)據(jù)枝缔,提高吞吐量)

現(xiàn)在問題來了布疙,如果某個節(jié)點掛了蚊惯,那部分?jǐn)?shù)據(jù)就丟了嗎愿卸?顯然Elasticsearch也會想到這個問題,所以分片會有主分片和副本分片之分(為了實現(xiàn)高可用

數(shù)據(jù)寫入的時候是寫到主分片截型,副本分片會復(fù)制主分片的數(shù)據(jù)趴荸,讀取的時候主分片和副本分片都可以讀

Index需要分為多少個主分片和副本分片都是可以通過配置設(shè)置的

ES中節(jié)點的角色 Role

ES中節(jié)點分為四種類型:Node Roles

  1. 主節(jié)點 master節(jié)點

主要職責(zé)就是負(fù)責(zé)集群管理宦焦,如索引創(chuàng)建或刪除发钝,發(fā)現(xiàn)集群其它節(jié)點并確定那些分片分配到相應(yīng)的節(jié)點顿涣,默認(rèn)情況下任何一個節(jié)點都有可能被選舉為master節(jié)點,但是索引數(shù)據(jù)何搜索查詢等操作會占用大量CPU酝豪、內(nèi)存和IO資源涛碑,為了保證集群的穩(wěn)定,通常分離主節(jié)點和數(shù)據(jù)節(jié)點孵淘;

node.master: true
node.data: false
node.ingest: false

2)數(shù)據(jù)節(jié)點 data節(jié)點

數(shù)據(jù)節(jié)點主要是存儲索引數(shù)據(jù)蒲障,主要對文檔進行增刪改查操作,數(shù)據(jù)節(jié)點對CPU瘫证、內(nèi)存和IO要求較高揉阎;

node.master: false
node.data: true
node.ingest: false

3)負(fù)載均衡節(jié)點 client節(jié)點

當(dāng)一個節(jié)點既不配置為主節(jié)點也不配置為數(shù)據(jù)節(jié)點時,該節(jié)點只能處理路由請求背捌,處理搜索毙籽,分發(fā)索引操作;

node.master: false
node.data: false
node.ingest: false

4) 預(yù)處理節(jié)點 ingest節(jié)點

預(yù)處理節(jié)點在索引數(shù)據(jù)之前可以對數(shù)據(jù)做預(yù)處理毡庆,默認(rèn)所有的節(jié)點都支持ingest操作坑赡,但是也可以專門設(shè)置一個Ingest節(jié)點;

node.master: false
node.data: false
node.ingest: true

Elasticsearch更新和刪除

Elasticsearch的更新和刪除操作流程:

  • 給對應(yīng)的doc記錄打上.del標(biāo)識么抗,如果是刪除操作就打上delete狀態(tài)垮衷,如果是更新操作就把原來的doc標(biāo)志為delete,然后重新新寫入一條數(shù)據(jù)

前面提到了乖坠,每隔1s會生成一個segement 文件搀突,那segement文件會越來越多越來越多。Elasticsearch會有一個merge任務(wù)熊泵,會將多個segement文件合并成一個segement文件仰迁。

在合并的過程中,會把帶有delete狀態(tài)的doc物理刪除掉顽分。

Elasticsearch查詢

查詢我們最簡單的方式可以分為兩種:

  • 根據(jù)ID查詢doc -- 類似傳統(tǒng)關(guān)系型數(shù)據(jù)庫
  • 根據(jù)query(搜索詞)去查詢匹配的doc -- 這才是ES 的優(yōu)勢(全文檢索)

根據(jù)ID去查詢具體的doc的流程是:

  • 檢索內(nèi)存的Translog文件
  • 檢索硬盤的Translog文件
  • 檢索硬盤的Segement文件

根據(jù)query去匹配doc的流程是:

  • 同時去查詢內(nèi)存和硬盤的Segement文件

因為segement文件是每隔一秒才生成一次的
Elasticsearch查詢又分可以為三個階段:

  • QUERY_AND_FETCH(查詢完就返回整個Doc內(nèi)容)
  • QUERY_THEN_FETCH(先查詢出對應(yīng)的Doc id 徐许,然后再根據(jù)Doc id 匹配去對應(yīng)的文檔)
  • DFS_QUERY_THEN_FETCH(先算分,再查詢)
  • 「這里的分指的是 詞頻率和文檔的頻率(Term Frequency卒蘸、Document Frequency)眾所周知雌隅,出現(xiàn)頻率越高,相關(guān)性就更強」

一般我們用得最多的就是QUERY_THEN_FETCH缸沃,第一種查詢完就返回整個Doc內(nèi)容(QUERY_AND_FETCH)只適合于只需要查一個分片的請求恰起。

QUERY_THEN_FETCH總體的流程流程大概是:

  • 客戶端請求發(fā)送到集群的某個節(jié)點上。集群上的每個節(jié)點都是coordinate node(協(xié)調(diào)節(jié)點)
  • 然后協(xié)調(diào)節(jié)點將搜索的請求轉(zhuǎn)發(fā)到所有分片上(主分片和副本分片都行)
  • 每個分片將自己搜索出的結(jié)果(doc id)返回給協(xié)調(diào)節(jié)點趾牧,由協(xié)調(diào)節(jié)點進行數(shù)據(jù)的合并检盼、排序、分頁等操作翘单,產(chǎn)出最終結(jié)果吨枉。
  • 接著由協(xié)調(diào)節(jié)點根據(jù) doc id 去各個節(jié)點上拉取實際document 數(shù)據(jù)蹦渣,最終返回給客戶端。

Query Phase階段時節(jié)點做的事:

  • 協(xié)調(diào)節(jié)點向目標(biāo)分片發(fā)送查詢的命令(轉(zhuǎn)發(fā)請求到主分片或者副本分片上)
  • 數(shù)據(jù)節(jié)點(在每個分片內(nèi)做過濾貌亭、排序等等操作)柬唯,返回doc id給協(xié)調(diào)節(jié)點

Fetch Phase階段時節(jié)點做的是:

  • 協(xié)調(diào)節(jié)點得到數(shù)據(jù)節(jié)點返回的doc id,對這些doc id做聚合圃庭,然后將目標(biāo)數(shù)據(jù)分片發(fā)送抓取命令(希望拿到整個Doc記錄)
  • 數(shù)據(jù)節(jié)點按協(xié)調(diào)節(jié)點發(fā)送的doc id权逗,拉取實際需要的數(shù)據(jù)返回給協(xié)調(diào)節(jié)點

主流程我相信大家也不會太難理解,說白了就是:由于Elasticsearch是分布式的冤议,所以需要從各個節(jié)點都拉取對應(yīng)的數(shù)據(jù)斟薇,然后最終統(tǒng)一合成給客戶端

安裝

測試環(huán)境:VirtualBox,ubuntu16 虛機

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
sudo apt-get update && sudo apt-get install elasticsearch

當(dāng)前安裝的版本是7.9

refs

Linux 源碼方式

從官網(wǎng)下載linux源碼包 https://www.elastic.co/downloads/elasticsearch

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-linux-x86_64.tar.gz
tar -xzvf elasticsearch-7.9.2-linux-x86_64.tar.gz
cd elasticsearch-7.9.2
./bin/elasticsearch

配置

The config directory location defaults to /etc/elasticsearch.

Elasticsearch has three configuration files:

  • elasticsearch.yml for configuring Elasticsearch
  • jvm.options for configuring Elasticsearch JVM settings
  • log4j2.properties for configuring Elasticsearch logging
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末恕酸,一起剝皮案震驚了整個濱河市堪滨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕊温,老刑警劉巖袱箱,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異义矛,居然都是意外死亡发笔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門凉翻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來了讨,“玉大人,你說我怎么就攤上這事制轰∏凹疲” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵垃杖,是天一觀的道長男杈。 經(jīng)常有香客問我,道長调俘,這世上最難降的妖魔是什么伶棒? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮彩库,結(jié)果婚禮上肤无,老公的妹妹穿的比我還像新娘。我一直安慰自己侧巨,他們只是感情好舅锄,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布鞭达。 她就那樣靜靜地躺著司忱,像睡著了一般皇忿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上坦仍,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天鳍烁,我揣著相機與錄音,去河邊找鬼繁扎。 笑死幔荒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的梳玫。 我是一名探鬼主播爹梁,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼提澎!你這毒婦竟也來了姚垃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤盼忌,失蹤者是張志新(化名)和其女友劉穎积糯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體谦纱,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡看成,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了跨嘉。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片川慌。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祠乃,靈堂內(nèi)的尸體忽然破棺而出窘游,到底是詐尸還是另有隱情,我是刑警寧澤跳纳,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布忍饰,位于F島的核電站,受9級特大地震影響寺庄,放射性物質(zhì)發(fā)生泄漏艾蓝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一斗塘、第九天 我趴在偏房一處隱蔽的房頂上張望赢织。 院中可真熱鬧,春花似錦馍盟、人聲如沸于置。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽八毯。三九已至搓侄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間话速,已是汗流浹背讶踪。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泊交,地道東北人乳讥。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像廓俭,于是被迫代替她去往敵國和親云石。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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