Elasticsearch 分享

主要从以下几点做一下入门介绍

基础理论

索引、类型
增删改查
近实时(Near Realtime NRT)

查询

filter
bool

聚合

terms 聚合
时间聚合

文本分析与映射

分词、mapping 数据类型

节点与分片

一些术语说明

cluster

集群,一个ES集群由一个或多个节点(Node)组成,每个集群都有一个 cluster name作为标识。

node

节点,一个 ES 实例就是一个节点,一个机器可以有多个实例,所以并不能说一台机器就是一个节点,大多数情况下每个节点运行在一个独立的环境或虚拟机上。

index

索引,即一系列 documents 的集合。

type

类型,索引下的分类,低版本中可以存在多个类型,高版本中逐步修正该策略,一个索引只允许有一个类型

shard
  1. 分片,ES是分布式搜索引擎,每个索引有一个或多个分片,索引的数据被分配到各个分片上,相
    当于一桶水用了 N 个杯子装。
    2.分片有助于横向扩展,N 个分片会被尽可能平均地(rebalance)分配在不同的节点上(例如你有
    2个节点,4个主分片(不考虑备份),那么每个节点会分到 2 个分片,后来你增加了 2 个节点,那么你
    这 4 个节点上都会有 1 个分片,这个过程叫 Relocation,ES感知后自动完成)。
  2. 每个分片都是一个 Lucene Index,所以一个分片存放的文档数量是有限的。

replica
  1. 复制,可以理解为备份分片或者从分片,相应地有 primary shard(主分片)。
  2. 主分片和从分片不会出现在同一个节点上(防止单点故障),默认情况下一个索引创建 5 个分片,1
    个备份,即 5 * (primary + replica) = 10个分片
  3. 如果你只有一个节点,那么 5 个 replica 都无法分配(unassigned)。

用一个图来表示:

需要修改配置文件,重启服务

节点

ES 作为一个分布式应用,
区分协调(coordinating)、摄取(ingest)、主(master)、数据(data)等节点

监控与诊断

监控

借助一些可视化管理工具,可以很直观的看到集群各方面的状态。目前 ES 可用的监控工具或插件很多,主要为以下几种:

  1. X-Pack+kibana,索引信息、集群整体信息很有帮助,尤其是各索引的索引、搜索速率,索引延迟数据等;其中,X-Pack 是官方给出的插件,各方面完善,推荐使用,缺点是只能试用一个月。
  2. ElasticHQ 支持监控,并提供了折线图,方便查看变化;支持实时搜索;支持索引列表信息查看等功能;支持 docker 安装。
  3. cerebro 支持查看分片分配、索引操作、监控等功能;可以使用 docker 安装;
  4. elasticsearch-head 谷歌浏览器插件,支持查看分片分配、索引操作等功能,简单方便,数据量大界面会有卡顿,显示不友好;
  5. _cat es 自带,可以在命令行使用,提供一些常用的监控项输出;

诊断

  1. 集群健康度
    • Status:状态群集的状态。红色:部分主分片未分配。黄色:部分副本分片未分配。绿色:所有分片分配ok。
    • Unassigned Shards。未分配的分片。尚未创建或分配副本的分片计数。
  2. 查询性能
    • 查询队列长度(队列里堆积的查询任务太多)
  3. 索引性能
    • 刷新数,可以配置 refresh_interval
  4. JVM 健康度
    • 堆使用情况
    • gc 情况
  5. 系统健康度
    • 内存
    • 磁盘
    • cpu

参考

  1. Elasticsearch: 权威指南(2.x 版本)
  2. https://blog.csdn.net/laoyang360/article/details/90117385
  3. https://www.zhihu.com/question/26446020/answer/113425214