es寫一致性原理以及quorum機制深入剖析

2022-09-23 10:51:06 字數 1497 閱讀 9984

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時才生效

quroum = 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機制,必須在不同的節點上,如果說只有1臺機器的話,是不是有可能出現說,3個shard都沒法分配齊全,此時就可能會出現寫操作無法執行的情況

1個primary shard,replica=3,quorum=((1 + 3) / 2) + 1 = 3,要求1個primary shard + 3個replica shard = 4個shard,其中必須有3個shard是要處於active狀態的。如果這個時候只有2臺機器的話,會出現什麼情況呢?

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=30,這個就是說自己去設定quorum不齊全的時候,es的timeout時長,可以縮短,也可以增長

十 寫一致性原理

一 綜述 在傳送增刪改操作的時候,可以帶上乙個consistency引數來指明寫一致性是什麼。put index type id?consistency quorum 有三種寫一致性 1.one 只要有乙個primary shard是active活躍可用的,就可以執行。2.all 要求所有的prim...

強一致性 弱一致性 最終一致性

這種方式在es等分布式系統中也有體現,可以設定主shard提交即返回成功,或者需要replica shard提交成功再返回。提到分布式架構就一定繞不開 一致性 問題,而 一致性 其實又包含了資料一致性和事務一致性兩種情況,本文主要討論資料一致性 事務一致性指acid 複製是導致出現資料一致性問題的唯...

Elsticsearch的寫一致性以及相關引數

我們在傳送任何乙個增刪改操作的時候,比如說put index type id,都可以帶上乙個consistency引數,指明我們想要的寫一致性是什麼?put index type id?consistency quorum one 要求我們這個寫操作,只要有乙個primary shard是activ...