1. 程式人生 > >寫一致性原理以及quorum機制

寫一致性原理以及quorum機制

想要 操作 節點 0ms har int 出現 就會 ons

(1)consistency,one(primary shard),all(all shard),quorum(default)
我們在發送任何一個增刪改操作的時候,比如 PUT /index/type/id,都可以帶上一個consistency參數,指明我們想要的寫一致性是什麽。
PUT /index/type/id?consistency=quorum
one:要求我們這個寫操作,只要有一個primary shard是active活躍可用的,就可以執行
all:要求我們這個寫操作,必須所有的primary shard和replica shard都是活躍的,才可以執行
quorum:默認的值,要求所有的shard,必須大部分的shard都是活躍的,才可以執行這個操作

(2)quorum機制,寫之前必須確保大多數shard都是可用的,int((primary + number_of_replicas)/2)+1,當number_of_replicas>1時才生效。
quorum = int((primary + number_of_replicas) / 2) + 1
例如:3個primary shard,number_of_replicas = 1,總共有 3 + 3 * 1 = 6 個shard。
quorum = int((3 + 1) / 2) + 1 =3
所以,要求6個shard中至少有3個shard是active狀態的,才可以執行寫操作。

(3)如果節點數少於quorum數量,可能導致quorum不齊全,進而導致無法執行任何寫操作
3個primary shard,replica=1,要求至少3個shard是active,3個shard按照之前學習的shard&replica機制,必須在不同的節點上,如果說只有2臺機器的話,是不是有可能出現說,3個shard都沒法分配齊全,此時就可能會出現寫操作無法執行的情況。es提供了一種特殊的處理場景,就是說當number_of_replicas>1時才生效,因為假如說,你就一個primary shard,replica=1,此時就2個shard。(1 + 1 / 2) + 1 = 2,要求必須有2個shard是活躍的,但是可能就1個node,此時就1個shard是活躍的,如果你不特殊處理的話,導致我們的單節點集群就無法工作。


(4)quorum不齊全時,wait,默認1分鐘,timeout,100,30s
等待期間,期望活躍的shard數量可以增加,最後實在不行,就會timeout
我們其實可以在寫操作的時候,加一個timeout參數,比如說put /index/type/id?timeout=30ms,這個就是說自己去設定quorum不齊全的時候,es的timeout時長,可以縮短,也可以增長。ms毫秒,s秒,m分鐘

寫一致性原理以及quorum機制