
設(shè)置根據(jù)集群中機(jī)器的狀態(tài)來重新分配分片,可以設(shè)置為always, indices_PRimaries_active和indices_all_active,默認(rèn)是設(shè)置成indices_all_active來減少集群初始啟動(dòng)時(shí)機(jī)器之間的交互。
Java代碼
設(shè)置在集群中最大允許同時(shí)進(jìn)行分片分布的個(gè)數(shù),默認(rèn)為2,也就是說整個(gè)集群最多有兩個(gè)分片在進(jìn)行重新分布。
Java代碼
設(shè)置指定初始每個(gè)節(jié)點(diǎn)。由于多數(shù)情況下是使用local的gateway,這應(yīng)該會(huì)更快,
Java代碼
設(shè)置在節(jié)點(diǎn)中最大允許同時(shí)進(jìn)行分片分布的個(gè)數(shù),默認(rèn)為2
Java代碼
使主要分片或副本的分布失效。要知道,如果主分片不存在(那個(gè)節(jié)點(diǎn)掛了)那么其副本仍然會(huì)被提升為主分片,這個(gè)設(shè)置只有在動(dòng)態(tài)地使用集群更新設(shè)置api調(diào)用時(shí)才生效。
Java代碼
使副本分布失效。和上一個(gè)設(shè)置一樣,只有動(dòng)態(tài)地使用集群更新設(shè)置api調(diào)用時(shí)才生效。
Java代碼
當(dāng)從一個(gè)點(diǎn)(peer)恢復(fù)分片時(shí)當(dāng)前節(jié)點(diǎn)最多允許的文件讀取流的個(gè)數(shù),默認(rèn)為5自定義分片分布規(guī)則可以通過設(shè)置分片的分布規(guī)則來人為地影響分片的分布,下面是個(gè)例子:假設(shè)我們有幾個(gè)機(jī)架。當(dāng)我們啟動(dòng)一個(gè)節(jié)點(diǎn),我們可以設(shè)置一個(gè)叫rack_id(其它名字也可以)的屬性,例如下面設(shè)置:
Java代碼
上面這個(gè)例子設(shè)置了一個(gè)屬性叫rack_id,它的值為rack_one。現(xiàn)在,我們要設(shè)置rack_id作為分片分布規(guī)則的一個(gè)屬性(在所有節(jié)點(diǎn)都要設(shè)置)。
Java代碼
上面設(shè)置意味著rack_id會(huì)用來作為分片分布的依據(jù)。例如:我們啟動(dòng)兩個(gè)node.rack_id設(shè)置rack_one的節(jié)點(diǎn),然后建立一個(gè)5個(gè)分片,一個(gè)副本的索引。這個(gè)索引就會(huì)完全分布在這兩個(gè)節(jié)點(diǎn)上。如果再啟動(dòng)另外兩個(gè)節(jié)點(diǎn),node.rack_id設(shè)置成rack_two,分片會(huì)重新分布,但是一個(gè)分片和它的副本不會(huì)分配到同樣rack_id值的節(jié)點(diǎn)上。可以為分片分布規(guī)則設(shè)置多個(gè)屬性,例如:
Java代碼
注意:當(dāng)設(shè)置了分片分布屬性時(shí),如果集群中的節(jié)點(diǎn)沒有設(shè)置其中任何一個(gè)屬性,那么分片就不會(huì)分布到這個(gè)節(jié)點(diǎn)中。強(qiáng)制分布規(guī)則更多的時(shí)候,我們不想更多的副本被分布到相同分布規(guī)則屬性值的一群節(jié)點(diǎn)上,那么,我們可以強(qiáng)制分片規(guī)則為一個(gè)指定的值。例如,我們有一個(gè)分片規(guī)則屬性叫zone,并且我們知道有兩個(gè)zone,zone1和zone2.下面是設(shè)置:
Java代碼
現(xiàn)在我們啟動(dòng)兩個(gè)node.zone設(shè)置成zone1的節(jié)點(diǎn),然后創(chuàng)建一個(gè)5個(gè)分片,一個(gè)副本的索引。索引建立完成后只有5個(gè)分片(沒有副本),只有當(dāng)我們啟動(dòng)node.zone設(shè)置成zone2的節(jié)點(diǎn)時(shí),副本才會(huì)分配到那節(jié)點(diǎn)上。分片分布過濾允許通過include/exclude過濾器來控制分片的分布。這些過濾器可以設(shè)置在索引級(jí)別上或集群級(jí)別上。下面是個(gè)索引級(jí)別上的例子:假如我們有四個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都有一個(gè)叫tag(可以是任何名字)的屬性。每個(gè)節(jié)點(diǎn)都指定一個(gè)tag的值。如:節(jié)點(diǎn)一設(shè)置成node.tag: value1,節(jié)點(diǎn)二設(shè)置成node.tag: value2,如此類推。我們可以創(chuàng)建一個(gè)索引然后只把它分布到tag值為value1和value2的節(jié)點(diǎn)中,可以通過設(shè)置index.routing.allocation.include.tag 為value1,value2達(dá)到這樣的效果,如:
Java代碼
與此相反,通過設(shè)置index.routing.allocation.exclude.tag為value3,我們也可以創(chuàng)建一個(gè)索引讓其分布在除了tag設(shè)置為value3的所有節(jié)點(diǎn)中,如:
Java代碼
include或exclude過濾器的值都會(huì)使用通配符來匹配,如value*。一個(gè)特別的屬性名是_ip,它可以用來匹配節(jié)點(diǎn)的ip地址。顯然,一個(gè)節(jié)點(diǎn)可能擁有多個(gè)屬性值,所有屬性的名字和值都在配置文件中配置。如,下面是多個(gè)節(jié)點(diǎn)的配置:
Java代碼
同樣的方法,include和exclude也可以設(shè)置多個(gè)值,如:
Java代碼
上面的設(shè)置可以通過索引更新的api實(shí)時(shí)更新到索引上,允許實(shí)時(shí)移動(dòng)索引分片。集群范圍的過濾器也可以定義,可以通過集群更新api實(shí)時(shí)更新到集群上。這些設(shè)置可以用來做讓一些節(jié)點(diǎn)退出集群的操作。下面是通過ip地址去掉一個(gè)節(jié)點(diǎn)的操作:
Java代碼
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注