3.1-ES基本概念

ElasticSearch的文件目录结构

目录 配置文件 描述
bin 脚本文件,包括启动 ElasticSearch,安装插件,运行统计数据等
config elasticSearch.yml 集群配置文件,user,role based相关配置
JDK Java运行环境
data path.data 数据文件
lib Java类库
logs path.log 日志文件
modules 包含所有ES模块
plugins 包含所有已安装插件

文档的元数据

  • 元数据,用于标注文档的相关信息

    • _index -- 文档所属的索引名

    • _type -- 文档所属的类型名

    • _id -- 文档的唯一id

    • _source -- 文档的原始json数据

    • _all -- 整合所有字段内容到该字段,7.0已被废除

    • _version -- 文档的版本信息

    • _score -- 相关性打分

索引

  • Index - 索引是文档的容器,是一类文档的结合

    • Index体现了逻辑空间的概念:每个索引都有自己的Mapping定义,用于定义包含的文档的字段名和字段类型

    • Shard体现了物理空间的概念:索引中的数据分散在Shard上

  • 索引的Mapping与Setting

    • Mapping定义文档字段的类型

    • Setting定义不同的数据分布

抽象类比

RDBMS ElasticSearch
Table Index(Type)
Row Document
Column Filed
Schema Mapping
SQL DSL
  • 在7.0之前,一个Index可以设置多个Types

  • 目前Type已经被Deprecated, 7.0开始,一个索引只能创建一个Type - "_doc"

  • 传统关系型数据库和ElasticSearch和区别

    • ElasticSearch - Schemaless/相关性/高性能全文索引

    • RDMS - 事务性/Join

分布式系统的可用性与扩展性

  • 高可用性

    • 服务可用性 - 允许有节点停止服务

    • 数据可用性 - 部分节点丢失, 不会丢失数据

  • 可扩展性

    • 请求量提升/数据的不断增长 (将数据分布到所有节点上)

分布式特性

  • ElasticSearch的分布式架构的好处

    • 存储的水平扩容

    • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响

  • ElasticSearch的分布式架构

    • 不同的集群通过不同的名字来区分, 默认名字 "elasticsearch"

    • 通过配置文件的修改,或者在命令行中 -E cluster.name=geektime进行设定

    • 一个集群可以有一个或者多个节点

节点

  • 节点是一个ElasticSearch的实例

    • 本质上就是一个java进程

    • 一台机器上可以运行多个ElasticSearch进程,但是生产环境一般建议一台机器上只运行一个ElasticSearch实例

  • 每一个节点都有名字,通过配置文件配置,或者启动的时候 -E node.name=node1指定

  • 每一个节点在启动后, 会分配一个UID,保存在目录下

Master-eligible nodes 和 Master Node

  • 每个节点启动后,默认就是一个Master eligible 节点

    • 可以设置 node.master:false 禁止
  • Master-eligible节点可以参加选举主流程, 成为Master节点

  • 当第一个节点上启动的时候,它会将自己选举成Master节点

  • 每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息

    • 集群状态(Cluster State),维护了一个集群中: 必要的信息

      • 所有的节点信息

      • 所有的索引和其相关的Mapping与Setting信息

      • 分片的路由信息

    • 任意节点都能修改信息会导致数据的不一致性

Data Node & Corrdinating Node

  • Data Node

    • 可以保存数据的节点, 叫做Data Node. 负责保存分片数据. 在数据扩展上起到了至关重要的作用
  • Corrdinating Node

    • 负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起

    • 每个节点默认都起到了Coordinating Node 的职责

其他的节点类型

  • Hot & Warm Node

    • 不同硬件配置的Data Node, 用来事先 Hot & Warm 架构, 降低集群部署的成本
  • Machine Learning Node

    • 负责跑机器学习的Job,用来做异常检测
  • Tribe Node

    • (5.3开始使用 Cross Cluster Search) Tribe Node 连接到不同的ElasticSearch集群, 并且支持将这些集群当一个单独的集群处理

配置节点类型

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

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

节点类型 配置参数 默认值
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 Shard)

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

    • 一个分片是一个运行的Lucene的实例

    • 主分片数在索引创建时指定,后续不允许修改,除非Reindex

  • 副本,用以解决数据高可用的问题.分片是主分片的拷贝

    • 副本分片数, 可以动态调整

    • 增加副本数, 还可以在一定程度上提高服务的可用性

分片的设定

  • 对于生产环境中分片的设定, 需要提前做好容量规划

    • 分片数设置过小

      • 导致后续无法增加节点实现水平扩展

      • 单个分片的数据量太大,导致数据重新分配耗时

    • 分片数设置过大, 7.0开始, 默认主分片设置成1, 解决了over-sharding的问题

      • 影响搜索结果的相关性打分, 影响统计结果的准确性

      • 单个节点上过多的分片,会导致资源浪费,同时也会影响性能

查看集群的健康状况 GET _cluster/health

  • Green - 主分片与副分片都正常分配

  • Yellow - 主分片全部正常分配,有副本分片未能正常分配

  • Red - 有主分片未能正常分配

    • 例如: 当服务器的磁盘容量超过85%时,去创建了一个新的索引

Index 相关 API

#查看索引相关信息
GET kibana_sample_data_ecommerce

#查看索引的文档总数
GET kibana_sample_data_ecommerce/_count

#查看前10条文档,了解文档格式
POST kibana_sample_data_ecommerce/_search
{
}

#_cat indices API
#查看indices
GET /_cat/indices/kibana*?v&s=index

#查看状态为绿的索引
GET /_cat/indices?v&health=green

#按照文档个数排序
GET /_cat/indices?v&s=docs.count:desc

#查看具体的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt

#How much memory is used per index?
GET /_cat/indices?v&h=i,tm&s=tm:desc

相关阅读

  • 为什么不再支持单个Index下,多个Tyeps https://www.elastic.co/cn/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0
  • CAT Index API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-indices.html

课程DEMO

  • 需要通过Kibana导入Sample Data的电商数据。
get _cat/nodes?v
GET /_nodes/es7_01,es7_02
GET /_cat/nodes?v
GET /_cat/nodes?v&h=id,ip,port,v,m


GET _cluster/health
GET _cluster/health?level=shards
GET /_cluster/health/kibana_sample_data_ecommerce,kibana_sample_data_flights
GET /_cluster/health/kibana_sample_data_flights?level=shards

#### cluster state
The cluster state API allows access to metadata representing the state of the whole cluster. This includes information such as
GET /_cluster/state

#cluster get settings
GET /_cluster/settings
GET /_cluster/settings?include_defaults=true

GET _cat/shards
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

相关阅读

  • CAT Nodes API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-nodes.html
  • Cluster API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cluster.html
  • CAT Shards API https://www.elastic.co/guide/en/elasticsearch/reference/7.1/cat-shards.html

你可能感兴趣的:(3.1-ES基本概念)