跳转至

ELK基础知识

文档

  • elasticsearch是面向文档的,文档是所有可搜索数据的最小单位
  • 文档会被序列化json格式,保存在elasticsearch中
  • 每个文档都有一个UniqueID
  • ID可以自己指定
  • 这个ID也可以通过elastcisearch自动生成
  • 文档的元数据,用于标注文档的相关资料
  • _index:文档所属的索引名

索引

type 在7.0开始,一个index只能有一个type

正排索引

倒排索引

  • 单词词典
  • 倒排列表
  • 倒排索引项

RESTAPI

节点

生产环境建议一台机器只运行一个elasticsearch进程

Master-eligible nodes && Master nodes

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

Data Node && Coordinating Node

  • Data Node
  • 可以保存数据的节点,叫做Data Node。负责保存分片数据。在数据扩展上起到了只管重要的作用
  • 节点启动后,默认就是数据节点,可以通过设置node.data的值为false禁止
  • Coordinating Node
  • 负责接收Client的请求,将请求分发到合适的节点,最总把结果汇集到一起
  • 每个节点默认起到了Coordinating Node的职责
  • 其他节点类型
  • Hot&Warm Node
    • 不同硬件配置的Data Node,用来实现Hot&Warm架构,降低集群部署成本
  • Machine Learning Node
    • 负责跑机器学习的job,用来做异常检测

节点类型的配置

  • 开发测试环境中一个节点可以承担多种角色

  • 生产环境中,应该设置单一的角色的节点

节点类型 配置参数 默认值
master eligible node.master true
data node.data true
ingest node.ingest true
coordinating only 每个节点默认都是coordinating节点。设置其他类型为false
machine learning node.ml true(需enable x-pack)

分片(Primary Shard & Replica Share)

  • 主分片,用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点上
  • 一个分片是一个运行 lucene的实例
  • 主分片数在索引创建时指定,后续不允许修改,除非Reindex
  • 副本,用以解决数据高可用的问题。分片是主分片的拷贝
  • 副本分片数,可以动态调整
  • 增加副本数,还可以在一定成都上提高服务的可用性(读取的吞吐)

分片的设定

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