2.Elasticsearch基本概念

1 概述

2.文档(document)

  • Elasticsearch是面向文档的,文档是所有可搜索数据的最小单元
    • 日志文件中的日志项
    • 一本电影的具体信息/一张唱片的详细信息
    • MP3播放器里的一首歌/一片PDF文档中的具体内容
  • 文档会被序列化成JSON格式,保存在Elasticsearch中
    • JSON对象由字段组成
    • 每个字段都有对应的字段类型(字符串、数值、布尔、日期、二进制、范围类型)
  • 每个文档都有一个Unique ID
    • 你可以自己制定ID
    • 或者通过Elasticsearch自动生成

2.1 JSON文档

  • 一篇文档包含了一系列的字段。类似数据库表中的一条记录
  • JSON文档,格式灵活,不需要预先定义格式
    • 字段的类型可以指定或者通过Elasticsearch自动推算
    • 支持数组、支持嵌套

2.2 文档的元数据

{
	"_index":"movies", 	//_index 文档所属的索引名
	"_type" :"_doc",    //文档所属的类型名
	”_id":"1", 			// 文档唯一ID
	“_score":14.59 	    //相关性打分
	“_source":{         // 文档的原始Json数据
	    "year":1995,
	    "@version":"1",
	    "genre":[
	    "adventure",
	    "animation",
	    "childre"],
	    "id":"1",
	    "title":"Toy Story"
	    	}
	   }

2.3 索引

index(索引)是文档的容器,是一类文档的结合。
index体现了逻辑空间的概念:每个索引都有自己的mapping定义,用于定义包含的文档的字段名和字段类型。
Shard体现了物理空间的概念:索引中的数据分散在Shard之上
Mapping定义文档字段的类型
Setting定义不同的数据分布

2.3.1 索引的不同语义

  • 名词:一个Elasticsearch 集群中,可以创建很多个不同的索引
  • 动词:保存一个文档到Elasticsearch的过程也叫索引(indexing)
    • ES中,创建一个倒排索引的过程

B树索引
倒排索引
可以参考 Elasticsearch倒排索引结构

2.4 抽象与类比

  1. 在7.0之前,一个Index可以设置多个Types 但7.0之后一个索引只能创建一个Type 即 "_doc"
  2. type:每个索引里都可以有一个或多个type,type是index中的一个逻辑数据分类,一个type下的document都有相同的field,比如博客系统,有一个索引,可以定义用户数据type,博客数据type,评论数据type;在ES6.x版本之后,一个index只有一个type了
  3. 传统关系型数据库和Elasticsearch的区别
    Elasticsearch:Schemaless 相关性高、高性能全文检索
    RDMS:事务性、Join

3 REST API

REST API很容易被各种语言调用

3.1 demo

以下命令可以在kibana中输入 数据是加载的样例数据

	//查看索引相关信息
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

4 集群

4.1 分布式特性

  • Elasticsearch的分布式架构的好处
    • 存储的水平扩容
    • 提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
  • Elasticsearch的分布式架构
    • 不同的集群通过不同的名字来区分,默认名字是“elasticsearch"
    • 通过配置文件修改,或者在命令行中 -E cluster.name=clustername 进行设定
    • 一个集群可以有一个或者多个节点

5 节点

  • 节点是一个Elasticsearch的实例
    • 本质上是一个JAVA进程
    • 一台机器上可以运行多个Elasticsearch进程,但是生产环境一般建议一台机器上只运行一个Elasticsearch实例
    • 每一个节点都有名字,通过配置文件配置,或者启动的时候 -E node.name=node1指定
    • 每一个节点再启动之后,会分配一个UID,保存在data目录下

5.1 Master-eligible nodes 和 Master Node

1.每个节点启动后,默认就是一个Master-eligible节点 但是可以设置 node.master:false来禁止
2.Master-eligible节点可以参加选主流程,称为Master节点
3.当第一个节点启动时候,它会将自己选举成Master节点。
4.每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息。任意节点都能修改信息会导致数据的不一致性。

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

  • 所有的节点信息
  • 所有的索引和其相关的Mapping与Setting信息
  • 分片的路由信息

5.2 Data Node 和 Coordinating Node

Data Node

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

Coordinating Node

负责接受Client的请求,将请求分发到合适的节点,最终把结果汇集到一起。
每个节点都起到了Coordinating Node的职责

5.3其他的节点类型

Hot & Warm Node

不同硬件配置的Data Node,用来实现Hot & Warm 架构,降低集群部署的成本

Machine Learning Node

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

5.4配置节点类型

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

6.分片

6.1 主分片(Primary Shard)

主分片,用以解决数据水平扩展的问题。通过主分片,可以将数据分布到集群内的所有节点之上。
一个分片是一个运行的Lucene实例
主分片数在索引创建时指定,后续不允许修改,除非Reindex

6.2 副本(Replica Shard)

副本用以解决数据高可用的问题。分片是主分片的拷贝
副本分片数可以动态调整
增加副本数,还可以在一定程度上提高服务的可用性(读取的吞吐)

6.3 分布

一个三节点的集群中,blogs索引的分片分布情况

6.4分片的设定

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

  • 分片数设置过小
    • 导致后续无法增加节点实现水平扩展
    • 单个分片的数据量过大,导致数据重新分配耗时
  • 分片数设置过大,7.0开始,默认主分片设置为1,解决了over-sharding的问题
    • 影响搜索结果的相关性打分,影响统计结果的准确性
    • 单个节点上过多的分片,会导致资源浪费,同事也会影响性能

6.5 查看集群状态

6.6 demo

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值