elasticsearch理论部分

概述

elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,它不仅可以进行全文搜索,还可以进行以下工作:

  • 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索
  • 实时分析的分布式搜索引擎
  • 可以扩展到上百台服务器,处理PB级别的结构化或非及结构化数据
  • 提供了REST API的操作接口,开箱即用

存储单位:
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
1PB=1024TB
1EB=1024PB
1ZB=1024EB
1YB=1024ZB

基本概念

elasticsearch是面向文档型数据库,一条数据在这里就是一个文档

  1. 索引(Index)
    索引是具有相似特性的文档集合。例如,可以为客户数据提供索引,为产品目录建立另一个索引,以及为订单数据建立另一个索引。索引由名称(必须全部为小写)标识,该名称用于在对其中的文档执行索引、搜索、更新和删除操作时引用索引。在单个群集中,您可以定义尽可能多的索引。

  2. 文档(document)
    Elasticsearch文档是一个存储在索引中的JSON文档。每个文档都有一个类型和对应的ID,这是惟一的。
    如:

 	{
			  "_index" : "packtpub",
			  "_type" : "elk",
			  "_id" : "1",
			  "_version" : 1,
			  "found" : true,
			  "_source":{
				book_name : "learning elk",
				book_author:"鲁迅"
			  }
		}
  1. 字段(Field)
    文档内的一个基本单位,键值对形式(book_name : “learning elk”)

  2. 类型(Type)
    类型是index下的一个逻辑分类。比如weather这个index里,可以按照城市分组,也可以按照气候类型分组,这种分组就叫做类型

  3. 映射(Mapping)
    映射用于映射文档的每个field及其对应的数据类型,例如字符串、整数、浮点数、双精度数、日期等等。

  4. 分片(Shard)
    shard:单台机器无法存储大量数据,es可以将一个索引中的数据切分为多个shard,分布在多台服务器上存储。有了shard就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。
    在这里插入图片描述

  5. 分词
    把一段文本中的词按一定规则进行切分

  6. 主分片(Primary shard)与复制分片(replica shard)
    复制分片通常驻留在一个不同的节点上,在故障转移和负载平衡的情况下,可以满足多个请求。

  7. 集群(Cluster)
    集群是存储索引数据的节点集合。elasticsearch提供了水平的可伸缩性用以存储集群中的数据。每个集群都由一个集群名称来表示,不同的节点指明集群名称连接在一起。

  8. 节点(Node)
    节点是一个单独运行的elasticsearch实例,它属于一个集群。默认情况下,elasticsearch中的每个节点都加入名为“elasticsearch”的集群。每个节点都可以在elasticsearch中使用自己的elasticsearch.yml,它们可以对内存和资源分配有不同的设置。

ES集群

集群节点分类

  1. 数据节点(Data Node)
    数据节点索引文档并对索引文档执行搜索。建议添加更多的数据节点,以提高性能或扩展集群。通过在elasticsearch中设置这些属性,可以使节点成为一个数据节点。elasticsearch.yml配置
    node.master = false
    node.data=true
  2. 管理节点(Master Node)
    主节点负责集群的管理。对于大型集群,建议有三个专用的主节点(一个主节点和两个备份节点),它们只作为主节点,不存储索引或执行搜索。在elasticsearch.yml配置声明节点为主节点:
    node.master = true
    node.data=false
  3. 路由节点亦称负载均衡节点(Routing Node or load balancer node)
    这些节点不扮演主或数据节点的角色,但只需执行负载平衡,或为搜索请求路由,或将文档编入适当的节点。这对于高容量搜索或索引操作非常有用。
    node.master = false
    node.data=false
  4. 提取节点(lngest节点)
    可以创建多个预处理管道,用以修改传入文档

Zendiscovery通信

默认ES进程会绑定在自己的回环地址上,然后扫描本机的9300-9305号端口,尝试跟其他端口上的启动的es进程进行通信,然后自动形成一个集群。如果修改了监听地址为非回环地址,ES按照配置文件里指定的地址或自动扫描当前网段其他节点,自动跟其他节点上的es node进行通信

Master选举

如下图所示
在这里插入图片描述

脑裂

因为网络或者其他故障,导致一个集群被划分成了两伙或者多方势力,这些群伙都有多个node以及一个master,那么原来的集群就出现了多个master。master主宰了集群状态的维护以及shard的分配,因此如果有多个master,可能会导致数据被破坏

容错机制

状态 意义
green 所有主分片和从分片都可用
yellow 所有主分片可用,但存在不可用的从分片
red 存在不可用的主分片
  • 宕机瞬间

master node宕机的一瞬间,该节点的primary shard(主分片)就没有了,此时状态就不是active status,那么集群中就不是所有的主分片都是active的了

  • 容错步骤一

master选举,es自动选举另一个node成为master,承担起master的责任

  • 容错步骤二

新master将丢失掉的主分片的某个复制分片提升为主分片,此时cluster status会变成yellow,因为所有的主分片都变成active status了,但是少了一个复制分片

  • 容错步骤三

重启node,新master会将缺失的副本都copy一份到该节点,而且该节点会使用之前已有的分片数据,只是同步一下宕机的修改,cluster status变为green

发布了76 篇原创文章 · 获赞 60 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43557605/article/details/104377000