Elastic search點點滴滴

2021-07-09 04:31:02 字數 2716 閱讀 2706

在打造集中化日誌那篇中,稍微提了下elastic search。

elk打造集中化日誌

elastic search是elk的核心,寫的時候重點也放在它上面,不過還是覺得深度挖掘得不是太夠,所以決定再另寫一篇重點介紹下elastic search。

正如elastic的本義一樣,es就是為擴充套件而生,天生就是支援分布式。這意味著我們可以對es進行橫向擴充套件,且不需要付出沉重的代價。新增或者刪除節點,es都能很好的處理。

首先介紹幾個概念:

cluster

代表集群。集群有多個節點,其中有乙個為主節點,所有有master資格的節點都有可能被選舉成為leader。主從節點是相對集群內部來而言,es集群是去中心化的,對於集群外部,集群是沒有中心節點的,從外部來看,es集群就是個邏輯整體,與任何乙個節點的通訊和與整個es集群通訊是等價的。leader主要是負責在集群內部維護集群的狀態,對外則和所有其他節點是一樣的。這就不會發生hadoop那樣namenode故障導致集群不可用的狀況。

shards

代表索引分片。es將乙個完整的索引分成多個分片,這樣就可以把乙個大的索引拆分成多個,分布到不同的節點上,構成分布式搜尋。分片的數量只能在索引建立前指定,並且索引建立後不能更改,預設是5個。可以通過index.number_of_shards 修改。

replicas

代表索引副本,es可以設定多個索引的副本,副本的作用主要就是容錯。預設是1個,可以通過index.number_of_replicas修改。

recovery

代表資料恢復或叫資料重新分布,es在有節點加入或退出時會根據機器的負載對索引分片進行重新分配,掛掉的節點重新啟動時也會進行資料恢復。

gateway

代表es索引的持久化儲存方式,es預設是先把索引存放到記憶體中,當記憶體滿了時再持久化到硬碟。當這個es集群關閉再重新啟動時就會從gateway中讀取索引資料。es支援多種型別的gateway,有本地檔案系統(預設),分布式檔案系統,hadoop的hdfs和amazon的s3雲儲存服務。

discovery.zen

代表es的自動發現節點機制,es是乙個基於p2p的系統,它先通過廣播尋找存在的節點,再通過多播協議來進行節點之間的通訊,同時也支援點對點的互動。

transport

代表es內部節點或集群與客戶端的互動方式,預設內部是使用tcp協議進行互動。

先測試一下,我啟動了三個es例項分別在:

10.0.250.90 9200 9300

10.0.250.90 9201 9301

10.0.250.91 9200 9200

es上有兩個索引,乙個是.es乙個是logstash-*。開啟head節點看下集群的節點狀態

.es索引有乙個分片,而logstash索引總共有10個分片,各自都是1個副本,總共就是22個分片均勻分布在不同的es節點上。節點1和2各有7個分片,而節點3有8個。

這時候如果我們繼續做擴充套件,比如加乙個節點。這時候就會進行reshard,

22個節點被均勻分布到4個節點上。如果節點被擴到22個,那就正好每個節點 1個分片。如果繼續擴,那就意味著有節點不需要處理寫請求,可以將多出來的專門用於處理讀請求。

我們此時再將節點4的程序kill掉

集群健康值變為了黃色,在黃色前應該有個紅色的狀態,當有主分片的節點故障時會顯示紅色,代表集群不能正常提供服務,此時進行reshard,leader會把相應副本分片提公升為主分片,此時集群可以正常提供服務,就變成了黃色。

索引是乙個邏輯儲存空間,分片才是實際的物理儲存,每個分片都只有索引資料一部分 。節點會通過集群內部的gossip協議交換集群狀態,從而所有節點資訊都是對等的。

以上圖的索引分布為例,

1. 客戶端訪問es-node-1,要求獲取.eslogs的相關文件。

2. es-node-1計算出該文件歸屬於分片0,於是將請求**給es-node-3,由節點3繼續處理。

3. 節點3處理完請求後將結果返回給節點1,再返回給客戶端。

4. 節點1為請求節點,相應的節點3為處理節點

對於寫請求,也是類似的,但是有點差別,請求節點將寫請求根據路由規則**後,處理節點對主分片做寫操作,做完後該處理節點再**請求給相應的備份分片節點,備份分片寫操作完成後,處理節點會匯報成功給請求節點,由請求節點報告成功給客戶端。

預設情況下,主分片需要通過仲裁(quorum),確認大部分分片拷貝(分片拷貝可以使主要分片或者副本分片,兩者均可)有效時,才會發起乙個寫操作。這樣做的目的是為了防止將資料寫入到網路中」錯誤的一側(wrong side)」。仲裁的公式如下:

int

( (primary + number_of_replicas) / 2 ) + 1

number_of_replicas是指定在索引設定中的副本分片的數量,不是當前處於活動狀態的副本分片數量。如果在索引中指定了有3個副本分片的話,那麼quorum的值就是3

那麼當只啟動了兩個節點時,那麼就無法滿足quorum,從而導致備份分片的寫操作不會執行。

如果不能通過仲裁,es會等待一段時間,預設是1分鐘。

C 知識點點點點點 1

指標與引用 int i 5 int a i int a int a int a int b i 模板是對型別進行引數化的工具。包括 函式模板和類模板 函式模板typename class template 返回型別 函式名 引數列表 eg.template void swap t a,t b swa...

答辯點點點

5.20答辯結束,為三年的研究生生涯畫上句點。這個句點也是在校學生生涯的句點。答辯很圓滿,老師都沒有很苛刻,反而是一種詢問,了解的姿態在提問,之前的種種擔憂在結束之後成為回看,成為一種多餘,然而,在過程中確實存在反應出很多問題。閒言閒語,記錄幾點感悟 答辯前 1 答辯分組確實存在運氣成分,然而,在面...

mysql筆記點點點。。。

一直使用mysqlfront 很多命令懶得記 note一下吧 一 create table 方法 整表複製 create table 新錶 select from 舊表 結構複製 create table 新錶 select from 舊表 where 1 1 二 insert into 方法 得到...