假设存在三个节点 NODE1、NODE2、NODE3。其中NODE1 会接受客户端的请求,它作为Coordinate Node 或者成为Master Node。将索引放到两个分片中,主分片分别为 P0 和P1,P0对应的两个副本R0、R0,P1对应的两个副本R1、R1。

1.Elasticsearch创建文档流程

  1. 客户端向Node1 发送索引文档请求。
  2. Node1 通过路由算法和文档ID计算出该文档应该属于P0,然后请求路由到NODE3的P0分片上。
  3. Node3在P0上执行了请求。如果请求成功,则将请求并行的路由至NODE1,NODE2的R0上。当所有的副本报告成功后,NODE3向请求的NODE1发送成功报告,NODE1再报告至客户端。当客户端收到执行成功后,操作已经在分片和所有的副本上执行成功了。

97427400_1629696313.png

2.Elasticsearch查询文档流程

  1. 客户端发送查询请求到NODE1。
  2. 接着NODE1使用文档的id决定文档属于P0 分片,由于分片和对应的副本都可以读取数据,此时算法可以随机选择分片或者副本进行路由,此时选择R0副本并且获取R0的副本的地址,将请求路由至NODE2。
  3. NODE2中的R0接到请求以后将文档返回给NODE1,NODE1将文档返回给客户端。 对于读请求。

34329400_1629696314.png

3.Elasticsearch修改文档流程

  1. 客户端发送更新操作请求至NODE1。
  2. NODE1将请求路由至NODE3,也就是主分片P0所在的位置。
  3. NODE3从P0读取文档,改变source字段的JSON内容,然后试图重新对修改后的数据在P0做索引。如果此时这个文档已经被其他的进程修改了,那么它将重新执行3步骤,这个过程如果超过了retryon_conflict设置的次数,就放弃。
  4. 如果NODE3成功更新了文档,它将新版本的文档同步到NODE1和NODE2的副本R0中,重新建立索引。一旦所有的副本报告同步成功,NODE3向节点NODE1返回成功,然后NODE1向客户端返回成功。


69417500_1629696314.png

4.Elasticsearch删除文档流程

删除流程和创建数据索引类似,删除只是标记这个文档不可用,并不是立即删除。如图所示:

  1. 客户端向 NODE1 发送删除请求。
  2. 节点使用文档id 确定文档属于P0 ,请求会被转发到 NODE 3。
  3. NODE3在主分片上面执行请求。如果成功了,它将请求并行转发到 NODE1 和 NODE 2 的副本分片上。一旦所有的副本分片都报告成功, NODE 3 将向协调节点报告成功,协调节点向客户端报告成功。

12915100_1629696315.png