关于Elasticsearch的学习

Elasticsearch详解

ES的核心概念

  • Cluster:集群,由一个或多个节点组成。
  • Node:节点,同一集群内节点的名字不能重复,通常给节点分配一个或多个分片。
  • Shards:分片,ES支持PB级检索,当索引上数据量太大时,会分成多个分片,类似数据库的分库,写入数据时通过路由来决定写入哪个分片,所以在创建索引的时候要指定分片的数量,并且一旦确定数量后就无法更改。每个分片都是Lucene中的一个索引文件,每个分片必须有一个主分片和多个副本分片。
"number_of_replicas": "2"  //指定每个主分片副本分片数量为2
  • Replicas:副本分片,是主分片的备份,二者都能提供查询功能,主分片写入数据后会同步到副本分片。当主分片不可用时,会从副分片中选举出一个来作为主分片,提高程序的可用性,但是副本分片过多会在写入操作同步时增加负担。
  • Index:索引,由一个或者多个分片组成,在集群中以索引名当作唯一标识。
  • Type:类别,指的是索引内部的逻辑分区,通过type名在索引内作唯一标识,在查询时如果没有该值则搜索整个索引。
  • Document:文档,Index中一条数据就是一个文档,相当于关系型数据库的一条数据,在Type内以_id作唯一标识。
  • Settings:对集群中索引的参数设置。
  • Mapping:相当于关系型数据库中的表结构信息,用于定义信息中字段的类型、分词方式、是否存储等信息。ES的mapping是可以自动识别的,如不存在特定需求则不需要手动创建mapping,ES会自动识别数据类型,mapping创建后若存入数据则无法修改。
  • Analyzer:字段的分词方式定义。

ES的节点类型

  • 主节点(Master Node) :主节点,负责创建索引、删除索引、分配分片、追踪集群中节点状态等工作。通过在配置文件中设置node.master=true来设置该节点成为候选主节点(但该节点不一定是主节点,主节点是集群在候选节点中选举出来的),在ES集群中只有候选节点才有选举权和被选举权。
 node.master=true
  • 数据节点(Data Node):数据节点,负责数据的存储相关工作,如创建、修改、删除、搜索、聚合等。对机器配置要求较高,对内存需求大,可通过设置多个数据节点来提升可用性,配置文件中配置node.data=true来设置该节点成为数据节点。
 node.data=true 
  • 客户端节点(Client Node):既不做候选主节点,也不做数据节点的节点,负责数据的分发、汇总等,其实任何节点都可完成该工作,单独增加该节点是为了提升并发性。

ES的集群状态

  • Green:绿色,健康。所有的主分片和副本分片都可正常工作,集群100%健康。
  • Yellow:黄色,预警。所有的主分片都可正常工作,但至少有一个副本分片是无法工作的,此时集群虽然可以正常运行,但是降低了集群的高可用性。
  • Red:红色,集群不可正常使用。此时集群至少有一个主分片和它的所有副分片不可用,查询操作虽然可以执行但只能返回部分数据,分配到该分片的写入数据操作会报错,造成数据的丢失。

3C与脑裂

  • 共识性(Consensus):共识性是分布式系统中最基础也是最重要的组件,需要保证系统中所有节点对数据或者节点状态达成共识,ES没有采用Zookeeper实现,而是使用zen discovery自己实现共识,zen discovery使用了八卦传播的方式实现单播。

  • 并发性(Concurrency):ES是分布式系统,当写入请求发送到主分片的同时,同时以并行的方式发送到副本分片,但是这些请求的送达时间可能是无序的,ES采用乐观并发控制(Optimistic Concurrency Control)来防止新版本的数据被旧版本的数据覆盖。

    • 乐观并发控制(OCC):是一种用来解决写-写冲突的无锁并发控制,认为事务间的竞争不激烈时,就先进行修改,在提交事务前检查数据有没有变化,如果没有就提交,如果有就放弃并重试。乐观并发控制类似于自选锁,适用于低数据竞争且写冲突比较少的环境。
  • 一致性(Consistency):ES集群保证一致性的方式是在写入操作时检查集群中可供写入的分片数量,达到要求时才执行写入,否则等待,默认时间一分钟。可通过如下几种设置控制写入:

    • ONE:只要有主分片可用,执行写入。

    • ALL:只有主分片和所有副本分片可用时,才执行写入。

    • Quorum(法定人数):是ES的默认选项,只有当大部分的分片可用时,执行写入。计算公式为:

         int((primary+number_of_replicas)/2)+1
      

    ES为了保证读写一致性,备份被设置为sync(默认值),写操作只有在主分片以及副本分片都成功之后才会返回结果,这样无论请求哪个分片都会返回最新的结果。如果对写的要求很高,可以修改备份分片设置为replication=async,只要主分片请求成功就会返回结果。

  • 脑裂:在ES集群中,主节点会通过ping来检查其他节点是否处于可用状态,其他节点也会通过ping检查主节点是否可用。当集群网络不稳定时,可能会发生ping不通主节点的情况,则认为主节点出了故障,会重新选举一个节点作为主节点,就会导致一个集群内有多个主节点,可能造成数据的丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值