增删改流程:

1. 客户端和任一节点(假设 Node1)发出请求,这个node就是coordinating node(协调节点)

2. coordinating node,对document进行路由,将请求转发给对应的node(有primary shard,假设是 Node2)

3. Node2上的primary shard处理请求,然后将数据同步到replica node

4. coordinating node,如果发现primary node和所有replica node都搞定之后,就返回响应结果给客户端

写一致性

(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机制,必须在不同的节点上,如果说只有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=30,这个就是说自己去设定quorum不齐全的时候,es的timeout时长,可以缩短,也可以增长

最新文章

  1. WebApi系列~StringContent参数需要添加MetaType对象
  2. div浮动框居于浏览器窗口中间
  3. IBinder对象在进程间传递的形式(一)
  4. socket小解
  5. 命令模式(Command Pattern)
  6. UITabbarController左右滑动切换标签页
  7. pc端常規頁面實現
  8. mobile_1 物理像素
  9. jq点击事件未生效
  10. go web framework gin 启动流程分析
  11. C# 后台访问webapi
  12. 第一次使用Android Studio时你应该知道的一切配置(一)
  13. 牛客网练习赛12---A and B
  14. LeetCode--44 通配符匹配
  15. 任务三 简单程序测试及 GitHub Issues 的使用
  16. Java程序设计17——多线程-Part-B
  17. MR案例:单表关联查询
  18. JS获取网页高度和宽度
  19. pthread_getspecific和pthread_setspecific使用
  20. cowboy实现websocket

热门文章

  1. jQuery - 获取/设置内容和属性
  2. ES doc_values介绍——本质是field value的列存储,做聚合分析用,ES默认开启,会占用存储空间(列存储压缩技巧,除公共除数或者同时减去最小数,字符串压缩的话,直接去重后用数字ID压缩)
  3. 201621123014《JAVA程序设计》第1周学习总结
  4. Android App在Google App Store中搜不到
  5. [转]CSS禁止文字选择
  6. sessionStorage,localStorage,cookies
  7. Netty,Netty
  8. 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
  9. VisualGDB系列1:VisualGDB总体概述
  10. py xrange