文章目录

  • Elasticsearch学习的第三天
  • 一、ES图解
  • 二、ES原理梳理
  • 1、shard和replica机制
  • 2、shard和replica的创建
  • 3、ES扩容极限和容错性提升
  • 4、ES容错机制
  • 三、ES元数据
  • 1、_index元数据
  • 2、_type元数据
  • 3、_id元数据
  • 4、_source元数据
  • 5、_version元数据


Elasticsearch学习的第三天

一、ES图解
  • 1 > Elasticsearch对复杂分布式机制的透明隐藏特性
  • 2 >Elasticsearch的垂直扩容与水平扩容
  • 3> 增减节点时的数据rebalance
  • 4> master节点
  • 5> 节点对等的分布式架构
二、ES原理梳理
1、shard和replica机制
  • index包含多个shard。
  • 每个shard都是一个最小的工作单元,承载部分数据,是一个luceme实例,拥有完整的建立索引和处理请求的能力。
  • 增删节点时,shard会自动在nodes中负载均衡。
  • 每个docment肯定只存在于一个primary shard以及其对应的1个或多个replica shard,不可能存在于多个primary shard。
  • replica shard是primary shard的副本,负责容错,以及承担读请求负载。
  • primary shard的数量在创建索引的时候就固定了,replica shard的数量随时修改、
  • primary shard的默认数量是5,replica shard默认是1默认有10个shard,5个prima shard和5个replica shard。
  • primary shard 不能和自己的replica shard存在同一个节点上,否则节点宕机primary shard和replica shard的数据都丢失,但是可以和其他的replica shard放在同一节点上。
2、shard和replica的创建
  • 单node创建3个prim shard和每个prima shard对应一个replica shard
PUT test_index
{
	"setting":{
		"number_of_shards":3,
		"number_of_replicas":1
	}
}

(1)单node环境下,创建一个index,有3个prim shard和3个replica shard
(2)集群status是yellow
(3)这个时候,只会将3个prima shard分配到仅有的一个node上去,另外3个replica shard是无法分配的
(4)集群可以正常工作,但是一旦出现宕机,数据全部丢失,而且集群不可用,无法承担任何请求

3、ES扩容极限和容错性提升

(1)primary和replica自动负载均衡,6个shard,其中3个primary和3个replica
(2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好
(3)扩容极限,6个shard(3个primary,3个replica),最多扩容到6台服务器,每个shard可以占用单台服务器的所有资源,性能最后
(4)超出扩容极限后,动态修改replica数量,9个shard(3个primary,6个replica),扩容到9台服务器,比3台服务器,拥有3倍的读吞吐量
(5)3台服务器下,9个shard(3个primary,6个replica),资源更少,但是容错性更高,最多容忍2台服务器宕机,6个shard(3个primary,3个replica)只能容忍1台服务器宕机

4、ES容错机制

es查看占用多大硬盘 es怎么查看shard大小_es查看占用多大硬盘

三、ES元数据

    es元数据:_index元数据、_type元数据、_id元数据。

1、_index元数据

(1)代表一个docment存放在哪个index中

(2)类似的数据放在一个索引,非类似的数据放在不同的索引

(3)index中包含了很多类似的docment

(4)索引名称必须是小写的,不能用下划线开头,不能包含逗号

es查看占用多大硬盘 es怎么查看shard大小_java_02

2、_type元数据

(1)代表docment属于哪个index中的哪个类别
(2)一个索引通常会划分为多个type,逻辑上对index中的有些许不同的几类数据进行分类,因为一批相同的数据,可能有很多相同的fields,但是还可能会有少数feilds不一样
(3)type名称可以是大写或者小写,但不能用下划线开头,不能包含逗号

3、_id元数据

(1)代表docment的唯一标识,与index和type一起,可以唯一标识和定位一个docment
(2)可以手动指定docment的id,也可以不指定,由es自动为我们创建

  • 手动指定id:
PUT index/type/id
  • 自动生成id:长度为20个字符,base64编码,GUID,分布式系统并行生成时不会发生
POST index/type
4、_source元数据

我们创建docment的时候,使用的那个放在request body中的json串,默认情况下,在get的时候会原封不动的返回。

  • 指定返回的字段
GET ecommerce/product/3?_source=name,price
5、_version元数据

用于乐观锁进行并发控制

  • ?_version=1 基于默认的版本号
  • ?_version=1&version_type=external 基于自定义的版本号