1、consistency,one(primary shard),all(all shard),quorum(default)
我們?cè)诎l(fā)送任何一個(gè)增刪改操作的時(shí)候,比如說(shuō)put /index/type/id,都可以帶上一個(gè)consistency參數(shù),指明我們想要的寫一致性是什么?
put /index/type/id?consistency=quorum
one:要求我們這個(gè)寫操作,只要有一個(gè)primary shard是active活躍可用的,就可以執(zhí)行
all:要求我們這個(gè)寫操作,必須所有的primary shard和replica shard都是活躍的,才可以執(zhí)行這個(gè)寫操作
quorum:默認(rèn)的值,要求所有的shard中,必須是大部分的shard都是活躍的,可用的,才可以執(zhí)行這個(gè)寫操作
2、quorum機(jī)制,寫之前必須確保大多數(shù)shard都可用,int( (primary + number_of_replicas) / 2 ) + 1,當(dāng)number_of_replicas>1時(shí)才生效
quroum = int( (primary + number_of_replicas) / 2 ) + 1
舉個(gè)例子,3個(gè)primary shard,number_of_replicas=1,總共有3 + 3 * 1 = 6個(gè)shard
quorum = int( (3 + 1) / 2 ) + 1 = 3
所以,要求6個(gè)shard中至少有3個(gè)shard是active狀態(tài)的,才可以執(zhí)行這個(gè)寫操作
3、如果節(jié)點(diǎn)數(shù)少于quorum數(shù)量,可能導(dǎo)致quorum不齊全,進(jìn)而導(dǎo)致無(wú)法執(zhí)行任何寫操作
3個(gè)primary shard,replica=1,要求至少3個(gè)shard是active,3個(gè)shard按照之前學(xué)習(xí)的shard&replica機(jī)制,必須在不同的節(jié)點(diǎn)上,如果說(shuō)只有1臺(tái)機(jī)器的話,是不是有可能出現(xiàn)說(shuō),3個(gè)shard都沒(méi)法分配齊全,此時(shí)就可能會(huì)出現(xiàn)寫操作無(wú)法執(zhí)行的情況
1個(gè)primary shard,replica=3(滿足number_of_replicas>1時(shí)才生效),quorum=((1 + 3) / 2) + 1 = 3,要求1個(gè)primary shard + 3個(gè)replica shard = 4個(gè)shard,其中必須有3個(gè)shard是要處于active狀態(tài)的。如果這個(gè)時(shí)候只有2臺(tái)機(jī)器的話,會(huì)出現(xiàn)什么情況呢?也會(huì)不行,所以要合理設(shè)置

es提供了一種特殊的處理場(chǎng)景,就是說(shuō)當(dāng)number_of_replicas>1時(shí)才生效,因?yàn)榧偃缯f(shuō),你就一個(gè)primary shard,replica=1,此時(shí)就2個(gè)shard
(1 + 1 / 2) + 1 = 2,要求必須有2個(gè)shard是活躍的,但是可能就1個(gè)node,此時(shí)就1個(gè)shard是活躍的,如果你不特殊處理的話,導(dǎo)致我們的單節(jié)點(diǎn)集群就無(wú)法工作
4、quorum不齊全時(shí),wait,默認(rèn)1分鐘,timeout,100,30s
等待期間,期望活躍的shard數(shù)量可以增加,最后實(shí)在不行,就會(huì)timeout
我們其實(shí)可以在寫操作的時(shí)候,加一個(gè)timeout參數(shù),比如說(shuō)put /index/type/id?timeout=30,這個(gè)就是說(shuō)自己去設(shè)定quorum不齊全的時(shí)候,es的timeout時(shí)長(zhǎng),可以縮短,也可以增長(zhǎng),默認(rèn)ms