1 对于写请求
(1)客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)
(2)coordinating node,对document进行路由,将请求转发给对应的node(有primary shard)
(3)实际的node上的primary shard处理请求,然后将数据同步到replica node
而对于ES来说,客户端向ES 索引 写一篇文档,根据文档ID(如果不指定会自动生成)murmur3 哈希选择该索引的某个primary shard,将这篇文档写入到primary shard上,然后再将文档同步到replica,这里的同步过程:我的理解是,同步给 In-sync 集合里面的副本。这样,当insync集合里面的replica都写入成功后,各个replica向primary shard返回确认,当primary shard 所在节点认为in-sync副本列表集合里面的rpelica都写入成功后,primary shard再向ES 客户端返回写入成功的响应。由于 replica 分布在不同的ES节点上,当某台节点宕机,就可以通过”副本”保证了数据不丢失
同步是同步给所有副本的,不只是In-sync,如果部分副本没有返回或者超时,返回给客户端的信息里面会体现出这些副本数据没有同步成功,同时会把这些副本从In-sync里面去掉
(4)coordinating node,如果发现primary node和所有replica node都搞定之后,就返回响应结果给客户端
数据复制是同步的
2 读请求
1 客户端选择一个node发送请求过去,这个node就是coordinating node(协调节点)
2 副本也可以服务请求,round-robin随机算法请求。
