es概念核心概念

677 阅读3分钟

文档地址:es.xiaoleilu.com/

倒排索引

对比:

  • 正排索引 文档id到文档内容和文档单词的关联

  • 倒排索引 单词到文档id的关联

  • 正排索引 - 目录页

  • 倒排索引 - 索引页(书的最后会有单词对应的出现位置)

举例:

id 文档内容
1 elaset search
2 hello search
3 word search

转成倒排索引

word count id:position
elastic 1 1:0
hello 1 2:0
word 1 3:0
search 3 1:1,2:1,3:1

概念

  • 文档 数据库中的具体一条记录
  • type 7.0之前一个索引会有多个type,一个type会有多个相同结构的文档。7.0之后一个索引只有一个文档_doc
  • 索引 一类文档的集合
  • 分片 创建索引的时候可以指定分片数量。
  • 节点 一个节点是一个es实例,是一个java进程

分布式系统的可用性和高扩展性

  • 可用性:允许部分服务宕机
  • 数据可用性:部分节点数据丢失,不会丢失数据
  • 可扩展性:数据增多,数据可以分布到不同机器

节点

一个es的实例,就是java的一个进程。每一个节点都有一个名字,启动的时候制定,每个节点在启动之后会生成一个uid保存在data目录下。不同的节点可以承担不同的角色

  • 每个节点启动后默认是master-eligible,可以在启动的时候指定 (node.master = true)。
    • master-eligible可以参加选主流程,成为主节点
  • 第一个节点启动的时候,默认为主节点
  • 每个节点都保存了集群的状态,只有master可以修改集群的状态
    • 集群状态
      • 所有节点的信息
      • 所有的索引和相关的setting和mapping
      • 分片的路由信息
      • 任意阶段如果都能修改会导致集群的不一致性

data节点

可以存储数据的节点,负责保存分片上的数据(node.data=true)

coordinate节点

负责接受client请求,将请求发送到合适的节点,然后把结果汇集起来。 每个节点都默认起到coordinate node的职责 冷热节点...

配置节点类型

  • 开发环境一个节点可以承担多个角色
  • 生成环境应该设置成单一的角色

分片

  • 主分片 用来解决数据水平扩展问题,通过主分片,可以将数据复制到集群内的所有节点上
    • 一个分片就是一个Lucene实例
    • 主分片在创建索引的时候指定,后续不允许修改。
  • 副本分片 用来解决高可用的问题,是主分片的copy
    • 数量可以动态调整
    • 分片设定
      • 过小导致后续无法增加分片实现水平扩展(添加分片无效)
      • 单个分片数据量过大,导致数据重新分配耗时

目录

  • bin 启动脚本 安装插件 运行统计数据
  • config
  • Data 数据文件
  • lib java 类库
  • logs
  • Modules 包含所有es模块
  • Plugins 包含已经安装的插件
  • 查看哪些插件 ./elasticsearch-plugin list

使用插件可以搞一些安全策略来保护数据

多实例部署命令

搭建elk环境进行测试
elasticsearch启动
./bin/elasticsearch -E node.name=node1 -E cluster.name=cluster_group -E path.data=node1_data -d
./bin/elasticsearch -E node.name=node2 -E cluster.name=cluster_group -E path.data=node2_data -d
./bin/elasticsearch -E node.name=node3 -E cluster.name=cluster_group -E path.data=node3_data -d

  • cluster_group 为集群名称,集群是通过名称来区分的。默认名称为elasticsearch,一个集群可以有多个节点
  • path.data 为数据存储位置

kibana启动(版本要一致) kibana 端口 5601 依赖es,所以先启动es 7.0 支持汉化:kibana.yml 中加入 i18n.locale: "zh-CN" 启动:./bin/kibana

GET _cluster/health
GET _cat/nodes 
GET _cat/shards
GET blogs/_mapping  
GET blogs/_settings