最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Elasticsearches的集群搭建及數(shù)據(jù)分片過程詳解

 更新時間:2022年04月19日 14:47:30   作者:Jeff的技術(shù)棧  
這篇文章主要為大家介紹了Elasticsearches的集群搭建及數(shù)據(jù)分片過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Elasticsearch高級之集群搭建,數(shù)據(jù)分片

es使用兩種不同的方式來發(fā)現(xiàn)對方:

廣播

單播

也可以同時使用兩者,但默認的廣播,單播需要已知節(jié)點列表來完成

廣播方式

當(dāng)es實例啟動的時候,它發(fā)送了廣播的ping請求到地址224.2.2.4:54328。而其他的es實例使用同樣的集群名稱響應(yīng)了這個請求。

一般這個默認的集群名稱就是上面的cluster_name對應(yīng)的elasticsearch。通常而言,廣播是個很好地方式。想象一下,廣播發(fā)現(xiàn)就像你大吼一聲:別說話了,再說話我就發(fā)紅包了!然后所有聽見的紛紛響應(yīng)你。
但是,廣播也有不好之處,過程不可控。

  • 在本地單獨的目錄中,再復(fù)制一份elasticsearch文件
  • 分別啟動bin目錄中的啟動文件
  • 在瀏覽器里輸入:http://127.0.0.1:9200/_cluster/health?pretty
  • 通過number_of_nodes可以看到,目前集群中已經(jīng)有了兩個節(jié)點了

單播方式

當(dāng)節(jié)點的ip(想象一下我們的ip地址是不是一直在變)不經(jīng)常變化的時候,或者es只連接特定的節(jié)點。單播發(fā)現(xiàn)是個很理想的模式。使用單播時,我們告訴es集群其他節(jié)點的ip及(可選的)端口及端口范圍。我們在elasticsearch.yml配置文件中設(shè)置:

discovery.zen.ping.unicast.hosts: ["10.0.0.1", "10.0.0.3:9300", "10.0.0.6[9300-9400]"]

大家就像交換微信名片一樣,相互傳傳就加群了.....

一般的,我們沒必要關(guān)閉單播發(fā)現(xiàn),如果你需要廣播發(fā)現(xiàn)的話,配置文件中的列表保持空白即可。

#現(xiàn)在,我們?yōu)檫@個集群增加一些單播配置,打開各節(jié)點內(nèi)的\config\elasticsearch.yml文件。每個節(jié)點的配置如下(原配置文件都被注釋了,可以理解為空,我寫好各節(jié)點的配置,直接粘貼進去,沒有動注釋的,出現(xiàn)問題了好恢復(fù)):
#1 elasticsearch2節(jié)點,,集群名稱是my_es1,集群端口是9300;節(jié)點名稱是node1,監(jiān)聽本地9200端口,可以有權(quán)限成為主節(jié)點和讀寫磁盤(不寫就是默認的)。
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節(jié)點,集群名稱是my_es1,集群端口是9302;節(jié)點名稱是node2,監(jiān)聽本地9202端口,可以有權(quán)限成為主節(jié)點和讀寫磁盤。
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節(jié)點,集群名稱是my_es1,集群端口是9303;節(jié)點名稱是node3,監(jiān)聽本地9203端口,可以有權(quán)限成為主節(jié)點和讀寫磁盤。
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節(jié)點,集群名稱是my_es1,集群端口是9304;節(jié)點名稱是node4,監(jiān)聽本地9204端口,僅能讀寫磁盤而不能被選舉為主節(jié)點。
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"]

由上例的配置可以看到,各節(jié)點有一個共同的名字my_es1,但由于是本地環(huán)境,所以各節(jié)點的名字不能一致,我們分別啟動它們,它們通過單播列表相互介紹,發(fā)現(xiàn)彼此,然后組成一個my_es1集群。誰是老大則是要看誰先啟動了!

選取主節(jié)點

無論是廣播發(fā)現(xiàn)還是到單播發(fā)現(xiàn),一旦集群中的節(jié)點發(fā)生變化,它們就會協(xié)商誰將成為主節(jié)點,elasticsearch認為所有節(jié)點都有資格成為主節(jié)點。

如果集群中只有一個節(jié)點,那么該節(jié)點首先會等一段時間,如果還是沒有發(fā)現(xiàn)其他節(jié)點,就會任命自己為主節(jié)點。

對于節(jié)點數(shù)較少的集群,我們可以設(shè)置主節(jié)點的最小數(shù)量,雖然這么設(shè)置看上去集群可以擁有多個主節(jié)點。

實際上這么設(shè)置是告訴集群有多少個節(jié)點有資格成為主節(jié)點。

怎么設(shè)置呢?修改配置文件中的:

discovery.zen.minimum_master_nodes: 3

一般的規(guī)則是集群節(jié)點數(shù)除以2(向下取整)再加一。比如3個節(jié)點集群要設(shè)置為2。這么著是為了防止腦裂(split brain)問題。

什么是腦裂

腦裂這個詞描述的是這樣的一個場景:

(通常是在重負荷或網(wǎng)絡(luò)存在問題時)elasticsearch集群中一個或者多個節(jié)點失去和主節(jié)點的通信,然后各節(jié)點就開始選舉新的主節(jié)點,繼續(xù)處理請求。

這個時候,可能有兩個不同的集群在相互運行著,這就是腦裂一詞的由來,因為單一集群被分成了兩部分。

為了防止這種情況的發(fā)生,我們就需要設(shè)置集群節(jié)點的總數(shù),規(guī)則就是節(jié)點總數(shù)除以2再加一(半數(shù)以上)。這樣,當(dāng)一個或者多個節(jié)點失去通信,小老弟們就無法選舉出新的主節(jié)點來形成新的集群。因為這些小老弟們無法滿足設(shè)置的規(guī)則數(shù)量。

我們通過下圖來說明如何防止腦裂。比如現(xiàn)在,有這樣一個5個節(jié)點的集群,并且都有資格成為主節(jié)點:

為了防止腦裂,我們對該集群設(shè)置參數(shù):

discovery.zen.minimum_master_nodes: 3   # 3=5/2+1

之前原集群的主節(jié)點是node1,由于網(wǎng)絡(luò)和負荷等原因,原集群被分為了兩個switch:node1 、2和node3、4、5。

因為minimum_master_nodes參數(shù)是3,所以node3、4、5可以組成集群,并且選舉出了主節(jié)點node3。

而node1、2節(jié)點因為不滿足minimum_master_nodes條件而無法選舉,只能一直尋求加入集群(還記得單播列表嗎?),要么網(wǎng)絡(luò)和負荷恢復(fù)正常后加入node3、4、5組成的集群中,要么就是一直處于尋找集群狀態(tài),這樣就防止了集群的腦裂問題。

除了設(shè)置minimum_master_nodes參數(shù),有時候還需要設(shè)置node_master參數(shù),比如有兩個節(jié)點的集群,如果出現(xiàn)腦裂問題,那么它們自己都無法選舉,因為都不符合半數(shù)以上。

這時我們可以指定node_master,讓其中一個節(jié)點有資格成為主節(jié)點,另外一個節(jié)點只能做存儲用。當(dāng)然這是特殊情況。

那么,主節(jié)點是如何知道某個節(jié)點還活著呢?這就要說到錯誤識別了。

錯誤識別

其實錯誤識別,就是當(dāng)主節(jié)點被確定后,建立起內(nèi)部的ping機制來確保每個節(jié)點在集群中保持活躍和健康,這就是錯誤識別。
主節(jié)點ping集群中的其他節(jié)點,而且每個節(jié)點也會ping主節(jié)點來確認主節(jié)點還活著,如果沒有響應(yīng),則宣布該節(jié)點失聯(lián)。想象一下,老大要時不常的看看(循環(huán))小弟們是否還活著,而小老弟們也要時不常的看看老大還在不在,不在了就趕緊再選舉一個出來!

但是,怎么看?多久沒聯(lián)系算是失聯(lián)?這些細節(jié)都是可以設(shè)置的,不是一拍腦門子,就說某個小老弟掛了!在配置文件中,可以設(shè)置:

discovery.zen.fd.ping_interval: 1
discovery.zen.fd.ping_timeout: 30
discovery_zen.fd.ping_retries: 3

每個節(jié)點每隔discovery.zen.fd.ping_interval的時間(默認1秒)發(fā)送一個ping請求,等待discovery.zen.fd.ping_timeout的時間(默認30秒),并嘗試最多discovery.zen.fd.ping_retries次(默認3次),無果的話,宣布節(jié)點失聯(lián),并且在需要的時候進行新的分片和主節(jié)點選舉。

根據(jù)開發(fā)環(huán)境,適當(dāng)修改這些值。

以上就是Elasticsearches的集群搭建及數(shù)據(jù)分片過程詳解的詳細內(nèi)容,更多關(guān)于Elasticsearches集群搭建數(shù)據(jù)分片的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python機器學(xué)習(xí)MATLAB最小二乘法的兩種解讀

    python機器學(xué)習(xí)MATLAB最小二乘法的兩種解讀

    這篇文章主要為大家介紹了python機器學(xué)習(xí)中MATLAB最小二乘法的兩種解讀方式,有需要的朋友可以借鑒參考下希望能夠有所幫助
    2022-02-02
  • Python 變量類型詳解

    Python 變量類型詳解

    變量可以指定不同的數(shù)據(jù)類型,這些變量可以存儲整數(shù),小數(shù)或字符。這篇文章主要介紹了Python 變量類型詳解,需要的朋友可以參考下
    2018-10-10
  • 在Python中存儲字符串

    在Python中存儲字符串

    這篇文章主要介紹了在Python中存儲字符串,文章通過unicode展開主題相關(guān)內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 對tf.reduce_sum tensorflow維度上的操作詳解

    對tf.reduce_sum tensorflow維度上的操作詳解

    今天小編就為大家分享一篇對tf.reduce_sum tensorflow維度上的操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python3安裝及pip3報ERROR:No?matching?distribution?found?for解決方法

    python3安裝及pip3報ERROR:No?matching?distribution?found?for解

    這篇文章主要給大家介紹了關(guān)于python3安裝及pip3報ERROR:No?matching?distribution?found?for解決的相關(guān)資料,文中通過代碼以及圖文介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • 深入解析Python中的JSON比較

    深入解析Python中的JSON比較

    進行接口自動化時,有時候我們需要斷言的數(shù)據(jù)比較多,一個字段一個字段進行斷言比較麻煩,那么如何利用Python實現(xiàn)輕松判斷數(shù)據(jù)格式是否相同呢,下面小編就為大家詳細講講
    2023-09-09
  • Pandas.DataFrame重置Series的索引index(reset_index)

    Pandas.DataFrame重置Series的索引index(reset_index)

    本文主要介紹了Pandas.DataFrame重置Series的索引index(reset_index),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • PIL包中Image模塊的convert()函數(shù)的具體使用

    PIL包中Image模塊的convert()函數(shù)的具體使用

    這篇文章主要介紹了PIL包中Image模塊的convert()函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 詳解Python中HTML解析庫pyquery的使用

    詳解Python中HTML解析庫pyquery的使用

    在工作中難免會遇到解析 HTML 的場景,比如將網(wǎng)頁下載下來之后,要解析出里面圖片的路徑、指定標簽里的文本等等,而 pyquery 專門負責(zé)做這件事,下面我們就來學(xué)習(xí)一下他的具體用法吧
    2023-12-12
  • python subprocess 殺掉全部派生的子進程方法

    python subprocess 殺掉全部派生的子進程方法

    下面小編就為大家?guī)硪黄猵ython subprocess 殺掉全部派生的子進程方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01

最新評論

忻城县| 特克斯县| 北川| 从江县| 喀什市| 开远市| 凤凰县| 会宁县| 廊坊市| 固阳县| 中西区| 玛多县| 阿图什市| 西安市| 湾仔区| 沂南县| 南和县| 北碚区| 清流县| 边坝县| 富蕴县| 哈巴河县| 定陶县| 定襄县| 长垣县| 乌拉特前旗| 江北区| 卓尼县| 南澳县| 江川县| 灵武市| 和静县| 循化| 砚山县| 商洛市| 横山县| 彰武县| 蒙阴县| 肇源县| 额尔古纳市| 和林格尔县|