首页 > 代码库 > Elasticsearch 学习笔记2 集群和数据

Elasticsearch 学习笔记2 集群和数据

集群术语

- 节点:   一个elasticsearch实例(一个elasticsearch进程)就是一个节点- 集群:   由一个或者多个elasticsearch节点组成- 主节点: 临时管理集群级别变更:新建/删除索引,新建/移除节点,不参与文档级别变更或者搜索,当数据量增长时,不会成为集群瓶颈,集群只有一个主节点,通过各个节点选举产生- 分片(shard):是最小级别工作单元,它只是保存了索引中所有数据的一部分- 主分片:每个文档属于一个单独主分片,主分片数量可以在创建索引时指定,默认个数在配置中指定(index.number_of_shards),一个index默认有5个主分片- 复制分片:主分片副本,用于搜索加速,可以在创建索引时指定,默认复制分片数在配置中设定(index.number_of_replicas)
 

集群状态

查看集群状态:

- 查看集群状态:/_cluster/health:可以获取当前集群状态(green/yellow/red),以及副本个数等信息- green:  所有主分片和复制分片状态都ok- yellow: 主分片ok,复制分片未完全ok- red:    存在主分片不OK- 修改index配置:{index}/_setting,可以动态修改{index}复制分片个数
 

文档

  • 检索文档:

    • id:默认es会生成一个22位,经过base64编码的id,是urlsafe的,当然在创建文档时,也可以指定id
    • _source字段:里面存储了用户自定义的数据
    • 检索部分文档:GET /sailor/user/1/_source,表示只需要_source字段
    • GET /website/blog/123?_source=name,表示只检索_source字段中的name字段
    • pretty:检索文档时,可以增加pretty把结果的json美化输出
    • 当文档存在时http code为200,如果文档不存在则,code为404 Not Found
  • 更新文档:

    • 更新文档: 使用PUT,同时version会加1
  • 创建文档:

    • 创建文档:使用POST方式
    • 当文档不存在时创建,使用POST /website/blog/123?op_type=create,如果创建成功,http code为201,如果存在,则创建失败,http code为409(conflict)
  • 删除文档

    • 删除文档时,使用DELETE方法,文档的version加1
    • 如果文档正常删除,返回200,如果文档不存在,返回404
  • 文档版本:

    • 分布式版本冲突控制方法:悲观(提前锁定数据,如mysql),乐观(默认不会发生冲突,如果发生重复返回失败)
    • 乐观方法:PUT /website/blog/1?version=1,修改时带上version
    • 返回值:正常返回200,如果版本不匹配返回409(conflict)
    • 修改时指定修改版本:PUT /website/blog/2?version=5&version_type=external,需要定义version_type为外部
    • 如果定义的version小于当前version,则返回409,如果文档不存在,返回404,如果修改正常返回200
  • 局部更新:

    • POST /website/blog/1/_update,注意这里使用了POST
    • 如果文档不存在则创建,如果文档存在则更新,使用upsert
    • 文档冲突重试:使用retry_on_conflict参数
  • 批量操作:

    • bulk:可以批量进行增删改查
    • 每个批量的数据量大小在:5-15M是比较合适的
 

分布式策略:

  • 路由:

    • 公式:shard = hash(routing) % number_of_primary_shards,基于routing进行哈希分片
    • routing默认是id,也可以自己指定
  • 副本工作方式:

    • 默认是sync,只有当副本分片都进行操作后,才返回给客户端
    • 可以设置为async,不过不建议设置,因为异步时,可能因为在不等待其它分片就绪的情况下发送过多的请求而使Elasticsearch过载
  • consistency策略:

    • 默认是quorum:公式int( (primary + number_of_replicas) / 2 ) + 1,过半节点都操作完成后返回
    • one:一个主分片完成即可返回
    • all:所有主分片和复制分片都操作完成返回
  • timeout

    • 默认一分钟,比如设定all,es会等待1分钟,等待所有副本返回
    • 可以设置超时时间,如100表示100ms,30s表示30秒

Elasticsearch 学习笔记2 集群和数据