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