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

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

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

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

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

廣播

單播

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

廣播方式

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

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

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

單播方式

當(dāng)節(jié)點(diǎn)的ip(想象一下我們的ip地址是不是一直在變)不經(jīng)常變化的時候,或者es只連接特定的節(jié)點(diǎn)。單播發(fā)現(xiàn)是個很理想的模式。使用單播時,我們告訴es集群其他節(jié)點(diǎn)的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é)點(diǎn)內(nèi)的\config\elasticsearch.yml文件。每個節(jié)點(diǎn)的配置如下(原配置文件都被注釋了,可以理解為空,我寫好各節(jié)點(diǎn)的配置,直接粘貼進(jìn)去,沒有動注釋的,出現(xiàn)問題了好恢復(fù)):
#1 elasticsearch2節(jié)點(diǎn),,集群名稱是my_es1,集群端口是9300;節(jié)點(diǎn)名稱是node1,監(jiān)聽本地9200端口,可以有權(quán)限成為主節(jié)點(diǎn)和讀寫磁盤(不寫就是默認(rèn)的)。
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é)點(diǎn),集群名稱是my_es1,集群端口是9302;節(jié)點(diǎn)名稱是node2,監(jiān)聽本地9202端口,可以有權(quán)限成為主節(jié)點(diǎn)和讀寫磁盤。
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é)點(diǎn),集群名稱是my_es1,集群端口是9303;節(jié)點(diǎn)名稱是node3,監(jiān)聽本地9203端口,可以有權(quán)限成為主節(jié)點(diǎn)和讀寫磁盤。
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é)點(diǎn),集群名稱是my_es1,集群端口是9304;節(jié)點(diǎn)名稱是node4,監(jiān)聽本地9204端口,僅能讀寫磁盤而不能被選舉為主節(jié)點(diǎn)。
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é)點(diǎn)有一個共同的名字my_es1,但由于是本地環(huán)境,所以各節(jié)點(diǎn)的名字不能一致,我們分別啟動它們,它們通過單播列表相互介紹,發(fā)現(xiàn)彼此,然后組成一個my_es1集群。誰是老大則是要看誰先啟動了!

選取主節(jié)點(diǎn)

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

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

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

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

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

discovery.zen.minimum_master_nodes: 3

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

什么是腦裂

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

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

這個時候,可能有兩個不同的集群在相互運(yùn)行著,這就是腦裂一詞的由來,因?yàn)閱我患罕环殖闪藘刹糠帧?/p>

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

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

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

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

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

因?yàn)閙inimum_master_nodes參數(shù)是3,所以node3、4、5可以組成集群,并且選舉出了主節(jié)點(diǎn)node3。

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

除了設(shè)置minimum_master_nodes參數(shù),有時候還需要設(shè)置node_master參數(shù),比如有兩個節(jié)點(diǎn)的集群,如果出現(xiàn)腦裂問題,那么它們自己都無法選舉,因?yàn)槎疾环习霐?shù)以上。

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

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

錯誤識別

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

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

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

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

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

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

相關(guān)文章

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

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

    這篇文章主要為大家介紹了python機(jī)器學(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報(bào)ERROR:No?matching?distribution?found?for解決方法

    python3安裝及pip3報(bào)ERROR:No?matching?distribution?found?for解

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

    深入解析Python中的JSON比較

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

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

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

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

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

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

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

    python subprocess 殺掉全部派生的子進(jìn)程方法

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

最新評論

鲁山县| 濮阳市| 宁远县| 黎川县| 鸡西市| 凯里市| 沙雅县| 喜德县| 凯里市| 惠水县| 宜良县| 新昌县| 开鲁县| 堆龙德庆县| 镇原县| 兴化市| 灵石县| 蕉岭县| 于田县| 永仁县| 繁昌县| 满城县| 杨浦区| 宁南县| 新建县| 额敏县| 海宁市| 日照市| 沛县| 富川| 洪湖市| 七台河市| 宁都县| 灯塔市| 南投县| 洪江市| 沙洋县| 广平县| 调兵山市| 漳平市| 黄大仙区|