一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

云服務器|WEB服務器|FTP服務器|郵件服務器|虛擬主機|服務器安全|DNS服務器|服務器知識|Nginx|IIS|Tomcat|

服務器之家 - 服務器技術 - 服務器知識 - Elasticsearch分布式架構原理,我們真的需要知道,很重要

Elasticsearch分布式架構原理,我們真的需要知道,很重要

2019-11-10 22:23今日頭條架構師修煉 服務器知識

Elasticsearch用于構建高可用和可擴展的系統。擴展的方式可以是購買更好的服務器(縱向擴展(vertical scale or scaling up))或者購買更多的服務器(橫向擴展(horizontal scale or scaling out))。

Elasticsearch用于構建高可用和可擴展的系統。擴展的方式可以是購買更好的服務器(縱向擴展(vertical scale or scaling up))或者購買更多的服務器(橫向擴展(horizontal scale or scaling out))。

Elasticsearch分布式架構原理,我們真的需要知道,很重要

Elasticsearch雖然能從更強大的硬件中獲得更好的性能,但是縱向擴展有它的局限性。真正的擴展應該是橫向的,它通過增加節點來均攤負載和增加可靠性。

對于大多數數據庫而言,橫向擴展意味著你的程序將做非常大的改動才能利用這些新添加的設備。對比來說,Elasticsearch天生就是分布式的:它知道如何管理節點來提供高擴展和高可用。這意味著你的程序不需要關心這些。

ES 如何實現分布式

添加索引

es 中存儲數據的基本單位是索引,我們為了將數據添加到ES中,就需要添加索引(index)

這里需要說一下ES中索引與分片(shard)的關系:一個分片(shard)是一個最小級別“工作單元(worker unit)”,它只是保存了索引中所有數據的一部分;所有的文檔均存在分片中,而直接與應用程序進行交互的再而三索引。

下面我們以酒店搜索為例,添加所有酒店索引hotel_idx

PUT/hotel_idx

{

"settings":{

"number_of_shards":3,

"number_of_replicas":1

}

}

我們啟動三個ES節點,當前hotel_idx 分配3個主分片(primary shard),每個主分片1個副本分片(replica shard)。

Elasticsearch分布式架構原理,我們真的需要知道,很重要

1,ES Client 會挑一個Node,上面挑選了NODE1,則成為協調節點,進行寫入數據,此時ES怎么才能知道將一個文檔(一條酒店數據)路由到哪個分片中呢,實際上,他是根據這個公式:

shard=hash(routing)%number_of_primary_shards

routing 是一個可變值,默認是文檔的 _id ,也可以設置成一個自定義的值,這里可以是酒店的hotel_id。routing 通過 hash 函數生成一個數字,然后這個數字再除以 number_of_primary_shards (主分片的數量)后得到 余數 。這個分布在 0 到 number_of_primary_shards-1 之間的余數,就是我們所尋求的文檔所在分片的位置。

2,寫完P0后就會同步到他的副本R0中去,同步成功則會返回給協調節點Node1,最后返回Client

3,ES client讀取數據均可以讀取主副分片

如何保證高可用

如上NODE1-master節點宕機了,ES則會進行重新選舉(如果需要后面考慮分享一下分布式選舉專題),假如選了NODE2為master。

如果是非master宕機(node2),master節點node1則會將Node3的R1副本轉為主分片P1接收寫操作,如果NODE2恢復了,則之前的P1轉為R1副本。

如何可擴展

ES在創建索引時就需要指定主分片的數量,所以主分片指定了是不能再擴充的,當存儲容量超過了目前的ES節點,一般有些生產做法是,重新再建立了新索引比目前多一點shard,然后導入數據,但這種也是有些缺點的:這樣做將消耗的時間是我們無法提供的;

我們一般的做法是事先進行預分配,通過事先規劃,我們可以使用 預分配 的方式來完全避免這個問題。

其中,副本分片是可以動態擴展的,在讀取很大的場景下,適當的擴充副本會增加吞吐量。

PUT/hotel_idx/_settings

{

"number_of_replicas":2

}

如何預估分片容量

其實這個是不好解釋的,因為實在有太多相關的因素了:你使用的硬件、文檔的大小和復雜度、文檔的索引分析方式、運行的查詢類型、執行的聚合以及你的數據模型等等。

生產中經驗建議:

1,基于你準備用于生產環境的硬件創建一個擁有單個節點的集群。

2,創建一個和你準備用于生產環境相同配置和分析器的索引,但讓它只有一個主分片無副本分片。索引實際的文檔(或者盡可能接近實際)。

3,運行實際的查詢和聚合(或者盡可能接近實際)。

基本來說,你需要復制真實環境的使用方式并將它們全部壓縮到單個分片上直到它“掛掉。” 實際上 掛掉 的定義也取決于你:一些用戶需要所有響應在 50 毫秒內返回;另一些則樂于等上 5 秒鐘。

所以,一旦你定義好了單個分片的容量,很容易就可以推算出整個索引的分片數。用你需要索引的數據總數加上一部分預期的增長,除以單個分片的容量,結果就是你需要的主分片個數。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产91精品久久久久久 | 欧美区视频 | 91高清免费国产自产 | 亚洲高清无在码在线电影 | 恩不要好大好硬好爽3p | 18无删减羞羞网站动漫 | 好湿好滑好硬好爽好深视频 | 无码一区国产欧美在线资源 | 女主被男主为催奶药h | 男女一级簧色带 | 国内精品哆啪啪 | 色在线亚洲视频www 色欲麻豆国产福利精品 | 国产精品免费 | 美女和男人差差 | 视频一区二区 村上凉子 | 9久re在线观看视频精品 | 大象传媒短视频网站 | 精品久久久久亚洲 | 日本漫画工囗全彩内番e绅 日本伦理动漫在线观看 | 91视频免费观看网站 | 轻轻色在线视频中文字幕 | 美女脱了内裤让男生尿囗 | 俄罗斯海滩厕所偷窥 | 韩国最新三级网站在线播放 | 久久精品黄AA片一区二区三区 | 亚洲日本视频在线观看 | 国产在线精品观看 | 四虎永久在线精品国产馆v视影院 | 亚洲女人国产香蕉久久精品 | 免费成年视频 | 欧美综合在线 | 日本xxxⅹ69xxxx护士 | 9l国产精品久久久久麻豆 | 国产真实偷乱视频在线观看 | 欧美综合在线 | 丁香五香天堂 | 国产精品嫩草影院一二三区 | 九九影院午夜理论片无码 | 美女翘臀内疯狂进出 | 黑人好大好硬好深好爽想要h | 99精品国产久热在线观看66 |