W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
當(dāng)Solr需要將節(jié)點(diǎn)分配給集合時(shí),它可以自動(dòng)為它們分配,也可以指定一組節(jié)點(diǎn)來創(chuàng)建副本。
對(duì)于非常大的群集,很難指定確切的節(jié)點(diǎn)名稱,但它仍然不能精確地控制如何選擇節(jié)點(diǎn)。用戶應(yīng)完全控制分配給每個(gè)集合、碎片和副本的節(jié)點(diǎn)的位置。這有助于在整個(gè)群集上優(yōu)化配置硬件資源。
基于規(guī)則的副本分配允許創(chuàng)建規(guī)則來確定副本在群集中的位置。將來,此功能將有助于在系統(tǒng)停機(jī)或需要更高的吞吐量時(shí)自動(dòng)添加或刪除副本。這使得對(duì)群集的管理更加不干預(yù)。
此功能在以下情況使用:
有以下幾種情況可以使用這個(gè)功能。下面列出了一些可以實(shí)施的規(guī)則:
規(guī)則是一個(gè)節(jié)點(diǎn)必須滿足的一組條件,然后才能創(chuàng)建一個(gè)副本核心。
有以下三種可能的情況:
條件可以有以下運(yùn)算符之一來設(shè)置規(guī)則的參數(shù):
這可以用作任何條件的后綴。這將首先試圖嚴(yán)格滿足規(guī)則。如果Solr找不到足夠的節(jié)點(diǎn)來匹配標(biāo)準(zhǔn),它會(huì)嘗試找到下一個(gè)可能不符合標(biāo)準(zhǔn)的最佳匹配。例如,如果我們有一個(gè)規(guī)則:freedisk:>200~,Solr將嘗試在具有超過200GB可用磁盤空間的節(jié)點(diǎn)上分配此集合的副本。如果這是不可能的,將選擇具有最多可用磁盤空間的節(jié)點(diǎn)。
首先對(duì)這些節(jié)點(diǎn)進(jìn)行排序,然后使用規(guī)則對(duì)它們進(jìn)行排序。這確保即使許多節(jié)點(diǎn)匹配規(guī)則,最佳節(jié)點(diǎn)也被挑選出來用于節(jié)點(diǎn)分配。例如,如果存在諸如以下規(guī)則:freedisk:>20,則首先在磁盤空間對(duì)節(jié)點(diǎn)進(jìn)行降序排序并且首先拾取具有最多磁盤空間的節(jié)點(diǎn)?;蛘撸绻?guī)則是:cores:<5,則節(jié)點(diǎn)按照核心數(shù)量升序排序,并且首先拾取具有最少內(nèi)核數(shù)的節(jié)點(diǎn)。
規(guī)則與集合狀態(tài)一起被保存。所以,當(dāng)一個(gè)新的副本被創(chuàng)建時(shí),系統(tǒng)將分配滿足規(guī)則的副本。當(dāng)使用Collection API的CREATESHARD命令創(chuàng)建新的分片時(shí),請(qǐng)確保已經(jīng)為該分片名稱創(chuàng)建了特定的規(guī)則??梢允褂? MODIFYCOLLECTION命令更改規(guī)則。但是,如果規(guī)則沒有指定明確的分片名稱,則不需要這樣做。例如,諸如規(guī)則:shard:shard1,replica:*,ip_3:168:將不適用于所創(chuàng)建的任何新的碎片。但是,如果你的規(guī)則是replica:*,ip_3:168,那么它將適用于任何新創(chuàng)建的碎片。
這同樣適用于碎片分割。碎片拆分的處理方式與碎片創(chuàng)建的方式完全相同。即使 shard1_1 和 shard1_2 可能是從 shard1 創(chuàng)建的,規(guī)則將它們視為獨(dú)立、不相關(guān)的碎片。
標(biāo)記值來自一個(gè)名為Snitch的插件。如果在規(guī)則中有一個(gè)名為“rack”的標(biāo)簽,那么必須為Snitch提供集群中每個(gè)節(jié)點(diǎn)的“rack”值。一個(gè)小告警實(shí)現(xiàn)了Snitch接口。Solr默認(rèn)提供了一個(gè)默認(rèn)的snitch,它提供了以下標(biāo)簽:
可以對(duì)一組規(guī)則使用一個(gè)或多個(gè)snit。如果規(guī)則只需要默認(rèn)的snitch標(biāo)簽,就不需要顯式配置。例如:
snitch=class:fqn.ClassName,key1:val1,key2:val2,key3:val3
如何收集標(biāo)簽值:
對(duì)于這個(gè)規(guī)則,我們用“小于2”的運(yùn)算符來定義replica條件,并使用預(yù)定義的標(biāo)簽node來定義具有任何名稱的節(jié)點(diǎn)。
replica:<2,node:*
// this is equivalent to replica:<2,node:*,shard:**. We can omit shard:** because ** is the default value of shard
對(duì)于這個(gè)規(guī)則,我們使用shard條件來定義任何碎片,replica運(yùn)算符為“少于2”的條件,最后是一個(gè)預(yù)定義的標(biāo)記,node用于定義具有任何名稱的節(jié)點(diǎn)。
shard:*,replica:<2,node:*
此規(guī)則將shard條件限制為“shard1”,但將任何數(shù)量的副本限制在內(nèi)。我們還引用了一個(gè)名為“rack”的自定義標(biāo)簽。在定義這個(gè)規(guī)則之前,我們需要配置一個(gè)為標(biāo)簽提供值的自定義Snitch rack。
shard:shard1,replica:*,rack:730
在這種情況下,replica的默認(rèn)值是*(或所有副本)。所以可以省略,規(guī)則可以簡化為:
shard:shard1,rack:730
此規(guī)則使用該replica條件來定義任意數(shù)量的副本,但會(huì)添加一個(gè)預(yù)定義的標(biāo)簽“core”,并使用“少于5”的運(yùn)算符。
replica:*,cores:<5
再次,我們可以簡化這個(gè)使用replica的默認(rèn)值,如下所示:
cores:<5
此規(guī)則僅使用預(yù)定義標(biāo)簽host來定義不應(yīng)放置副本的IP地址。
host:!192.45.67.3
規(guī)則在集合創(chuàng)建期間被指定為請(qǐng)求參數(shù)。在這個(gè)例子中,可以指定多個(gè)“rule”和“snitch”參數(shù):
snitch=class:EC2Snitch&rule=shard:*,replica:1,dc:dc1&rule=shard:*,replica:<2,dc:dc3
這些規(guī)則被保存在ZooKeeper的clusterstate.json中,并且在整個(gè)生命周期中都可用。這使系統(tǒng)能夠執(zhí)行任何未來的節(jié)點(diǎn)分配而無需用戶直接交互。創(chuàng)建集合期間添加的規(guī)則可以稍后使用MODIFYCOLLECTION API 進(jìn)行修改。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: