<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
es使用兩種不同的方式來發現對方:
廣播
單播
也可以同時使用兩者,但預設的廣播,單播需要已知節點列表來完成
當es範例啟動的時候,它傳送了廣播的ping請求到地址224.2.2.4:54328。而其他的es範例使用同樣的叢集名稱響應了這個請求。
一般這個預設的叢集名稱就是上面的cluster_name
對應的elasticsearch
。通常而言,廣播是個很好地方式。想象一下,廣播發現就像你大吼一聲:別說話了,再說話我就發紅包了!然後所有聽見的紛紛響應你。
但是,廣播也有不好之處,過程不可控。
當節點的ip(想象一下我們的ip地址是不是一直在變)不經常變化的時候,或者es只連線特定的節點。單播發現是個很理想的模式。使用單播時,我們告訴es叢集其他節點的ip及(可選的)埠及埠範圍。我們在elasticsearch.yml
組態檔中設定:
discovery.zen.ping.unicast.hosts: ["10.0.0.1", "10.0.0.3:9300", "10.0.0.6[9300-9400]"]
大家就像交換微信名片一樣,相互傳傳就加群了.....
一般的,我們沒必要關閉單播發現,如果你需要廣播發現的話,組態檔中的列表保持空白即可。
#現在,我們為這個叢集增加一些單播設定,開啟各節點內的configelasticsearch.yml檔案。每個節點的設定如下(原組態檔都被註釋了,可以理解為空,我寫好各節點的設定,直接貼上進去,沒有動註釋的,出現問題了好恢復): #1 elasticsearch2節點,,叢集名稱是my_es1,叢集埠是9300;節點名稱是node1,監聽本地9200埠,可以有許可權成為主節點和讀寫磁碟(不寫就是預設的)。 cluster.name: my_es1 node.name: node1 network.host: 127.0.0.1 http.port: 9200 transport.tcp.port: 9300 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9303", "127.0.0.1:9304"] # 2 elasticsearch3節點,叢集名稱是my_es1,叢集埠是9302;節點名稱是node2,監聽本地9202埠,可以有許可權成為主節點和讀寫磁碟。 cluster.name: my_es1 node.name: node2 network.host: 127.0.0.1 http.port: 9202 transport.tcp.port: 9302 node.master: true node.data: true discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9303", "127.0.0.1:9304"] # 3 elasticsearch3節點,叢集名稱是my_es1,叢集埠是9303;節點名稱是node3,監聽本地9203埠,可以有許可權成為主節點和讀寫磁碟。 cluster.name: my_es1 node.name: node3 network.host: 127.0.0.1 http.port: 9203 transport.tcp.port: 9303 discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9303", "127.0.0.1:9304"] # 4 elasticsearch4節點,叢集名稱是my_es1,叢集埠是9304;節點名稱是node4,監聽本地9204埠,僅能讀寫磁碟而不能被選舉為主節點。 cluster.name: my_es1 node.name: node4 network.host: 127.0.0.1 http.port: 9204 transport.tcp.port: 9304 node.master: false node.data: true discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:9302", "127.0.0.1:9303", "127.0.0.1:9304"]
由上例的設定可以看到,各節點有一個共同的名字my_es1,但由於是本地環境,所以各節點的名字不能一致,我們分別啟動它們,它們通過單播列表相互介紹,發現彼此,然後組成一個my_es1叢集。誰是老大則是要看誰先啟動了!
無論是廣播發現還是到單播發現,一旦叢集中的節點發生變化,它們就會協商誰將成為主節點,elasticsearch認為所有節點都有資格成為主節點。
如果叢集中只有一個節點,那麼該節點首先會等一段時間,如果還是沒有發現其他節點,就會任命自己為主節點。
對於節點數較少的叢集,我們可以設定主節點的最小數量,雖然這麼設定看上去叢集可以擁有多個主節點。
實際上這麼設定是告訴叢集有多少個節點有資格成為主節點。
怎麼設定呢?修改組態檔中的:
discovery.zen.minimum_master_nodes: 3
一般的規則是叢集節點數除以2(向下取整)再加一。比如3個節點叢集要設定為2。這麼著是為了防止腦裂(split brain)問題。
腦裂這個詞描述的是這樣的一個場景:
(通常是在重負荷或網路存在問題時)elasticsearch叢集中一個或者多個節點失去和主節點的通訊,然後各節點就開始選舉新的主節點,繼續處理請求。
這個時候,可能有兩個不同的叢集在相互執行著,這就是腦裂一詞的由來,因為單一叢集被分成了兩部分。
為了防止這種情況的發生,我們就需要設定叢集節點的總數,規則就是節點總數除以2再加一(半數以上)。這樣,當一個或者多個節點失去通訊,小老弟們就無法選舉出新的主節點來形成新的叢集。因為這些小老弟們無法滿足設定的規則數量。
我們通過下圖來說明如何防止腦裂。比如現在,有這樣一個5個節點的叢集,並且都有資格成為主節點:
為了防止腦裂,我們對該叢集設定引數:
discovery.zen.minimum_master_nodes: 3 # 3=5/2+1
之前原叢集的主節點是node1,由於網路和負荷等原因,原叢集被分為了兩個switch:node1 、2和node3、4、5。
因為minimum_master_nodes引數是3,所以node3、4、5可以組成叢集,並且選舉出了主節點node3。
而node1、2節點因為不滿足minimum_master_nodes條件而無法選舉,只能一直尋求加入叢集(還記得單播列表嗎?),要麼網路和負荷恢復正常後加入node3、4、5組成的叢集中,要麼就是一直處於尋找叢集狀態,這樣就防止了叢集的腦裂問題。
除了設定minimum_master_nodes引數,有時候還需要設定node_master引數,比如有兩個節點的叢集,如果出現腦裂問題,那麼它們自己都無法選舉,因為都不符合半數以上。
這時我們可以指定node_master,讓其中一個節點有資格成為主節點,另外一個節點只能做儲存用。當然這是特殊情況。
那麼,主節點是如何知道某個節點還活著呢?這就要說到錯誤識別了。
其實錯誤識別,就是當主節點被確定後,建立起內部的ping機制來確保每個節點在叢集中保持活躍和健康,這就是錯誤識別。
主節點ping叢集中的其他節點,而且每個節點也會ping主節點來確認主節點還活著,如果沒有響應,則宣佈該節點失聯。想象一下,老大要時不常的看看(迴圈)小弟們是否還活著,而小老弟們也要時不常的看看老大還在不在,不在了就趕緊再選舉一個出來!
但是,怎麼看?多久沒聯絡算是失聯?這些細節都是可以設定的,不是一拍腦門子,就說某個小老弟掛了!在組態檔中,可以設定:
discovery.zen.fd.ping_interval: 1 discovery.zen.fd.ping_timeout: 30 discovery_zen.fd.ping_retries: 3
每個節點每隔discovery.zen.fd.ping_interval的時間(預設1秒)傳送一個ping請求,等待discovery.zen.fd.ping_timeout的時間(預設30秒),並嘗試最多discovery.zen.fd.ping_retries次(預設3次),無果的話,宣佈節點失聯,並且在需要的時候進行新的分片和主節點選舉。
根據開發環境,適當修改這些值。
以上就是Elasticsearches的叢集搭建及資料分片過程詳解的詳細內容,更多關於Elasticsearches叢集搭建資料分片的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45