ES 笔记三:基本概念-文档、索引和 REST API

文档

  1. ES时面向文档的,文档是所有课搜索的最小单位
  2. 文档会被序列化城JSON格式,保存在ES里面
  3. 每个文档有个UNIQUE ID -可以自动生成也可以指定

    JSON文档

  4. 一篇文档包含一系列的字段,类似数据库-表里的一条记录(ROW)
  5. 文档格式灵活,不需要预先规定格式类似MYSQL里面的CHAR\VARCHAR类型,可以自己指定,也可以ES自动推算,支持数组、跟嵌套TODO未懂
    ES 笔记三:基本概念

    文档的元数据

    ES 笔记三:基本概念

    索引

    ES 笔记三:基本概念
    文档里的_index 对应索引的名

    TYPE

    7.0开始,一个索引只能创建一个TYPE-'_doc'类似INODB的概念

    抽象与类比

    ES 笔记三:基本概念-文档、索引和 REST API

    REST API-方便被各种语言调用

    ES 笔记三:基本概念-文档、索引和 REST API

    节点

    节点是一个ES的实例

    • 本质就是一个JAVA进程
    • 一台机器上可以运行多个ES进程
    • 每个节点都有名字,通过配置文件配置,或者启动 -E node.name=lsk指定
    • 每个节点启动之后,会分配一个UID,保存在data目录下
    • 不同节点承担不同角色。

      Master-eligible nodes

    • 每个节点启动之后,默认就是Master eligible节点
      • 可以设置 node.master:false 禁止
    • Mater-eligible 节点可参加选主流程,成为Master节点
    • 当第一个节点启动时候,它会将自己选举城Mater节点
    • 每个节点都保存了集群的状态,只有Master节点才能修改集群的状态信息
      • 集群状态(Cluster State) ,维护了一个集群中必要的信息
        • 所有节点信息
          -所有的索引和其相关的Mapping 与 Setting 信息
          -分片的路由信息
        • 如果任意节点都能修改信息导致数据不一致

    Data Node

    - 可以保存数据的节点,负责保存分片数据。

    Coordinating Node

    - 负责接收Client的请求,将请求分发到合适的节点,最终把结果汇聚到一起
    - 每个节点默认都起到 **Coorinating Node**的职责

    其他的节点类型

    - Hot & Warm Node (冷热节点)
        - 不同的硬件配置的Data Node,用来实现Hot(热数据) & Warn(旧数据)架构,以降低集群部署的成本
    - Machine Learning Node
        - 负责跑机器学习的JOB,用来做异常检测
    - Tribe Node ( 未来要被淘汰)
      -  5.3 开始使用 Cross Cluster Serach 

    配置节点类型

    ES 笔记三:基本概念-文档、索引和 REST API

分片(Primary Shard & Replica Shard)

  • 主分片,用来解决数据水平扩展问题。通过中分片,可以将数据分布到集群内的所有节点之上

    • 一个分片是一个运行的Lucene的实例
    • 主分片数在索引创建时指定,后期不允许修改,除非 Reindex
  • 副本,解决数据高可用问题。分片是主分片的拷贝

    • 副本分片数,可以动态的调整
    • 增加副本数,可以在一个程度上提高服务的可用性(读取的吞吐)
  • 图中,3个主分片分散到3个节点上,副本分配到其他节点上
    ES 笔记三:基本概念-文档、索引和 REST API

    分片的设定

    • 对于生产环境中分片的设定,需要提前组好容量规划
      • 分片数设置过小
        • 导致后续无效增加节点实现水平扩展
        • 单个分片的数据量太大,导致数据重新分配耗时
      • 分片数设置过大,7.0开始,默认主分片设置成1(之前是5),解决了 over-sharding 的问题
        • 影响搜素结果的相关性打分,影响统计结果的准确性
        • 单个节点上过多的分片,会导致资源的浪费,同时也会影响性能

    ES提供API ,了解集群情况

    • Green - 主分片跟副本都正常分配
    • Yellow - 主分片全部分配正常,有副本分片问能正常分配
    • Red - 有主分片未能分配
      • 例如:有磁盘容量超过85%时,去创建新的索引
        GET _cluster/health //查看健康
        {
        "cluster_name" : "lsk",
        "status" : "green",
        "timed_out" : false,
        "number_of_nodes" : 2,
        "number_of_data_nodes" : 2,
        "active_primary_shards" : 2,
        "active_shards" : 4,
        "relocating_shards" : 0,
        "initializing_shards" : 0,
        "unassigned_shards" : 0,
        "delayed_unassigned_shards" : 0,
        "number_of_pending_tasks" : 0,
        "number_of_in_flight_fetch" : 0,
        "task_max_waiting_in_queue_millis" : 0,
        "active_shards_percent_as_number" : 100.0
        }
        GET _cat/nodes // 相关node信息
        //172.22.0.2 35 96 1 0.00 0.01 0.05 dim * es7_01
        //172.22.0.4 33 96 1 0.00 0.01 0.05 dim - es7_02
        GET _cat/shards //分片信息
        .kibana_1            0 p STARTED 4 18.3kb 172.22.0.2 es7_01
        .kibana_1            0 r STARTED 4 18.3kb 172.22.0.4 es7_02
        .kibana_task_manager 0 p STARTED 2 29.6kb 172.22.0.2 es7_01
        .kibana_task_manager 0 r STARTED 2 29.6kb 172.22.0.4 es7_02
es
本作品采用《CC 协议》,转载必须注明作者和本文链接

快乐就是解决一个又一个的问题!

讨论数量: 2

GET _cat/nodes // 相关node信息
楼主你好,我想问下你上边这些命令在什么地方运行的?
我是win10 安装了docker ,在git工具 提供的命令行里边很不方便。。。

2个月前 评论
CrazyZard

@Yii515 这个是在kibana里面运行的,具体安装流程你看我前几章笔记

2个月前 评论
Yii515 2个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!