一、查看索引信息命令

curl -X GET "localhost:9200/_cat/indices/my-index-000001?v&s=index&pretty"

preview

2.插入一条数据

curl -X PUT "localhost:9200/my-index-000001/_doc/0825?pretty" -H 'Content-Type: application/json' -d'
{
  "name": "liuzhihang"
}
'

3.一条数据该存放在哪个 shard

通过命令可以看出:在存放数据时并没有指定到哪个 shard,那数据是存在哪里的呢?

当一条数据进来,会默认会根据 id 做路由

shard = hash(routing) % number_of_primary_shards

从而确定存放在哪个 shard。 routing 默认是 _id, 也可以设置其他。

这个 id 可以自己指定也可以系统给生成, 如果不指定则会系统自动生成。

4.put 一条数据的过程是什么样的?

preview

写入过程主要分为三个阶段

  1. 协调阶段:Client 客户端选择一个 node 发送 put 请求,此时当前节点就是协调节点(coordinating node)。协调节点根据 document 的 id 进行路由,将请求转发给对应的 node。这个 node 上的是 primary shard 。
  2. 主要阶段:对应的 primary shard 处理请求,写入数据 ,然后将数据同步到 replica shard。
  3. primary shard 会验证传入的数据结构
  4. 本地执行相关操作
  5. 将操作转发给 replica shard
  6. 当数据写入 primary shard 和 replica shard 成功后,路由节点返回响应给 Client。
  7. 副本阶段:每个 replica shard 在转发后,会进行本地操作。

在写操作时,默认情况下,只需要 primary shard 处于活跃状态即可进行操作。

在索引设置时可以设置这个属性

index.write.wait_for_active_shards

默认是 1,即 primary shard 写入成功即可返回。

如果设置为 all 则相当于 number_of_replicas+1 就是 primary shard 数量 + replica shard 数量。 就是需要等待 primary shard 和 replica shard 都写入成功才算成功。

可以通过索引设置动态覆盖此默认设置。

5.如何查看数据在哪个 shard 上呢?

curl -X GET "localhost:9200/my-index-000001/_search_shards?routing=0825&pretty"

 

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐