目录
Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位
文档会被序列化成json格式,保存在Elasticsearch中
文档
Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位
<1>日志文件中的日志项
<2>一部电影的具体信息
文档会被序列化成json格式,保存在Elasticsearch中
<1>json对象由字段组成
<2>每个字段有对应的字段类型(字符串,布尔,日期,二进制)
每个文档有一个Unique ID
<1>可以自己指定
<2>也可以通过Elasticsearch自动生成
JSON文档
<1>一篇文档包含了一系列的字段,类似数据库表中的一条记录
<2>JSON文档,格式灵活,不需要预先定义格式,支持数组/嵌套
文档中的元数据
当有大量并发时,版本信息可以很好的解决文档冲突问题
索引
索引是文档的容器,是一类文档的结合
<1>索引体现了逻辑空间的概念,每个索引都有自己的Mapping定义,用于定义包含的文档字段名和字段类型
<2>分片体现了物理空间的概念,索引中的数据分散在分片上
索引的Mapping与Settings
<1>Mapping定义文档字段的类型
<2>Settings定义不同的数据分布
索引的不同语义
Type
REST API
为了方便其他语言的整合,es提供了rest api来给其他程序进行调用,当程序需要与es集成时,只需要发出http请求就行
实例:索引相关的api
<1>创建索引:默认配置
<2>创建索引:定义配置(分片数及副本数)
<3>创建索引:定义映射
<4>删除索引
<5>获取索引
<6>检测索引是否存在
<7>关闭索引
<8>打开索引
分布式系统
高可用性
<1>服务可用性:允许有节点停止服务
<2>数据可用性:部分节点丢失,不会丢失数据
可扩展性
数据不断增加(系统有能力将数据分布到所有节点上,实现水平扩展)
好处:
<1>存储的水平扩容
<2>提高系统的可用性,部分节点停止服务,整个集群的服务不受影响
es的分布式架构:
<1>不同的集群通过不同的名字来区分,默认是'elasticsearch'
<2>通过配置文件修改,或者在命令行中 -E cluster.name=test 指定
<3>一个集群可以有一个或者多个节点
节点
概述
<1>节点是一个es的实例
- 本质上是一个java进程
- 一台机器可以运行多个es进程,但生产环境建议一台机器只运行一台
<2>每个节点都有名字,通过配置文件修改,或者在命令行中 -E node.name=node1 指定
<3>每个节点启动后,会分配一个uuid,保存在data目录下
Master 节点
Master-eligible节点
<1>每个节点启动后,默认是一个Master-eligible节点(可以设置node.master:false禁止)
<2>Master-eligible节点可以参选主流程,成为master节点
<3>当第一个节点启动的时候,他会将自己选举成master节点
<4>每个节点都保存了集群状态,只有master节点能修改集群状态(集群状态,维护了一个集群中必要的信息,任意节点都能修改信息则会导致数据的不一致性)
Data节点
(协调节点)
<1>负责接收client的请求,将请求发送到合适的节点,最终把结果汇总到一起
<2>每个节点都起到了coordinating节点的作用
Hot / Warm节点
<1>不同硬件配置的数据节点,用来实现Hot Warm架构,降低集群部署的成本
<2>热节点是配置比较高的节点,它可以有更好cpu,更好的磁盘吞吐量,冷节点存储一些比较旧的节点,这些机器的配置也会比较低,通过冷热节点,可以在硬件上节省很多费用
配置节点类型:
<1>开发环境中一个节点可以承担多种角色
<2>生产环境中,应该设置单一的角色节点。因为每个节点配置不同的角色,这样会有更好的性能,且职责非常明确,能为其做对应的硬件配置
分片
将索引划分为多份的能力,允许水平分割和扩展容量,多个分片响应请求,提高性能和吞吐量(分片之间有路由关系)
主分片(Primary Shard)
用于解决数据水平扩展的问题,通过主分片,可以将数据分布到集群中的所有节点上,实现数据的水平扩展
<1>一个分片是一个运行的lucene实例
<2>主分片在索引创建时指定,后续不允许更改,除非Reindex。(一旦数据增长很快,超过了磁盘空间的时候,要重建索引)
副本(Replica Shard)
创建分片的一份或者多份的能力,在一个节点失败其余节点可以顶上。用于解决数据高可用的问题,是主分片的拷贝
<1>副分片数,可以动态的调整
<2>增加副本数,可以在一定程度上提高服务的可用性(读取的吞吐)
分片的设定
对于生产环境中分片的设定,需要提前做好容量规划
7.0开始,默认主分片数是1,解决了over-sharding的问题
<1>分片数设置过小:
- 导致后续无法增加节点实现水平扩展
- 单个分片数据量太大,导致数据重新分配耗时
<2>分片数设置过大
- 影响搜索结果的相关性打分,影响统计结果的准确性
- 单个节点上过多的分片,会导致资源浪费,同时会影响性能
实例
主分片分散在三个节点上,当某个节点发生故障时,es内部会产生故障转移机制
集群的健康状态
集群状态信息
与关系数据库类比
关系数据库 | Elasticsearch |
---|---|
数据库(Database) | 索引(Index) |
表(Table) | 类型(Type) |
记录(Row) | 文档(Document) |
字段(Column) | 字段(Fields) |
http方法
方法 | 描述 |
GET | 请求指定的页面信息,并返回实体主体 |
POST | 向指定资源提交数据进行处理请求。数据被包含在请求体中,POST请求可能会导致新的资源的建立或已有资源的修改 |
PUT | 向服务器传送的数据取代指定的文档的内容 |
DELETE | 请求服务器删除指定的页面 |