国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

SolrCloud:基于規(guī)則的副本放置

2018-01-10 10:50 更新

當(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ù)。

此功能在以下情況使用:

  • 集合創(chuàng)建
  • 碎片創(chuàng)建
  • 副本創(chuàng)建
  • 碎片分各

常見用例

有以下幾種情況可以使用這個(gè)功能。下面列出了一些可以實(shí)施的規(guī)則:

  • 不要將多個(gè)副本分配給主機(jī)。
  • 將所有副本分配給具有超過100GB可用磁盤空間的節(jié)點(diǎn),或者,在存在更多磁盤空間的情況下分配副本。
  • 不要在給定的主機(jī)上分配任何副本,因?yàn)槲蚁朐谀抢镞\(yùn)行一個(gè)overseer。
  • 只在機(jī)架中分配一個(gè)分片的一個(gè)副本。
  • 在承載少于5個(gè)核心的節(jié)點(diǎn)中分配副本。
  • 在承載最小內(nèi)核數(shù)的節(jié)點(diǎn)中分配副本。

規(guī)則條件

規(guī)則是一個(gè)節(jié)點(diǎn)必須滿足的一組條件,然后才能創(chuàng)建一個(gè)副本核心。

有以下三種可能的情況:

  • 碎片:這是一個(gè)碎片或通配符的名稱(*表示所有碎片)。如果未指定碎片,則該規(guī)則適用于整個(gè)集合。
  • 副本:這可以是數(shù)字或通配符(*表示任何數(shù)字從零到無窮大)。
  • 標(biāo)簽:這是集群中可用于規(guī)則的節(jié)點(diǎn)的屬性,例如“freedisk”、“cores”、“rack”、“dc”等。標(biāo)簽名稱可以是自定義字符串。如果創(chuàng)建一個(gè)自定義標(biāo)簽,則一個(gè)告密者負(fù)責(zé)提供標(biāo)簽和值。下面的Snitches部分描述了如何添加自定義標(biāo)簽,并定義了六個(gè)預(yù)定義的標(biāo)簽(核心(cores),freedisk,主機(jī)(host),端口(port),節(jié)點(diǎn)(node)和sysprop)。

規(guī)則運(yùn)算符

條件可以有以下運(yùn)算符之一來設(shè)置規(guī)則的參數(shù):

  • 等于(不需要運(yùn)算符):tag:x 表示標(biāo)簽值必須等于'x'。
  • 大于(>):tag:>x 表示大于'x'的標(biāo)簽值;x必須是一個(gè)數(shù)字。
  • 小于(<):tag:<x 表示小于'x'的標(biāo)簽值;x必須是一個(gè)數(shù)字。
  • 不等于(!):tag:!x 表示標(biāo)簽值不能等于'x';對(duì)字符串值執(zhí)行等號(hào)檢查。

Fuzzy運(yùn)算符(?)

這可以用作任何條件的后綴。這將首先試圖嚴(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)。

在等號(hào)間選擇

首先對(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ī)則

規(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)的碎片。

Snitch

標(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)簽:

  • 核心(cores):節(jié)點(diǎn)中的核心數(shù)量
  • freedisk:節(jié)點(diǎn)中可用的磁盤空間
  • 主機(jī)(host):節(jié)點(diǎn)的主機(jī)名
  • 端口(port):節(jié)點(diǎn)的端口
  • 節(jié)點(diǎn)(node):節(jié)點(diǎn)名稱
  • 角色(role):節(jié)點(diǎn)的角色。唯一支持的角色是“overseer”
  • ip_1,ip_2,ip_3,ip_4:這些是每個(gè)節(jié)點(diǎn)的ip分段。例如,在具有IP 192.168.1.2的主機(jī)中:ip_1 = 2,ip_2 =1,ip_3 = 168和`IP_4 = 192`
  • sysprop.{PROPERTY_NAME}:這些是從系統(tǒng)屬性可用的值。sysprop.key表示在節(jié)點(diǎn)啟動(dòng)時(shí)傳遞給-Dkey=keyValue的節(jié)點(diǎn)的值。有可能使用像sysprop.key:expectedVal,shard:*的規(guī)則

如何配置Snitches

可以對(duì)一組規(guī)則使用一個(gè)或多個(gè)snit。如果規(guī)則只需要默認(rèn)的snitch標(biāo)簽,就不需要顯式配置。例如:

snitch=class:fqn.ClassName,key1:val1,key2:val2,key3:val3

如何收集標(biāo)簽值:

  1. 確定規(guī)則中的一組標(biāo)簽
  2. 創(chuàng)建指定的Snitches的實(shí)例。默認(rèn)的snitch總是被創(chuàng)建。
  3. 詢問每個(gè)Snitch是否可以為任何標(biāo)簽提供值。如果存在一個(gè)標(biāo)簽沒有snitch,分配也會(huì)失敗。
  4. 在識(shí)別出Snitches之后,它們?yōu)榧褐械拿總€(gè)節(jié)點(diǎn)提供標(biāo)簽值。
  5. 如果給定節(jié)點(diǎn)沒有獲得標(biāo)簽的值,則不能參與分配。

副本放置示例

在任何節(jié)點(diǎn)上保留少于2個(gè)副本(最多1個(gè)副本)

對(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ì)于給定的分片,在任何節(jié)點(diǎn)上保留少于2個(gè)副本

對(duì)于這個(gè)規(guī)則,我們使用shard條件來定義任何碎片,replica運(yùn)算符為“少于2”的條件,最后是一個(gè)預(yù)定義的標(biāo)記,node用于定義具有任何名稱的節(jié)點(diǎn)。

shard:*,replica:<2,node:*

將shard1中的所有副本分配到機(jī)架730

此規(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

僅在少于5個(gè)核心的節(jié)點(diǎn)中創(chuàng)建副本

此規(guī)則使用該replica條件來定義任意數(shù)量的副本,但會(huì)添加一個(gè)預(yù)定義的標(biāo)簽“core”,并使用“少于5”的運(yùn)算符。

replica:*,cores:<5

再次,我們可以簡化這個(gè)使用replica的默認(rèn)值,如下所示:

cores:<5

不要在主機(jī)192.45.67.3中創(chuàng)建任何副本

此規(guī)則僅使用預(yù)定義標(biāo)簽host來定義不應(yīng)放置副本的IP地址。

host:!192.45.67.3

定義規(guī)則

規(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)行修改。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)