Replication
分布式系统的另外一方面就是复制(replication)了. 通过复制我们可以得到2个主要的好处:
- High Availability (HA高可用性). 如果一个节点挂了,另外一个节点能从它趴下的地方应头顶上,如果一个节点上面持有索引分片,而另一个节点持有该分片的副本,那么我们的数据就有了一个备份.
- 拥有数据多个副本的另一个好处就是 scalability (可伸缩性). 我们没有理由不通过增加副本来提高搜索能力,而我们只需要简单的增加几个副本或从节点(slave nodes)就能提升我们搜索的吞吐,何乐而不为呢.
一般有两种方式来实现复制: Push Replication(推模式) 和 Pull Replication(拉模式). Elasticsearch 使用的是Push Replication(推模式).
Push Replication
工作起来非常简单, 当你往 [master] 主分片上面索引一个文档,该分片会复制该文档(document)到剩下的所有 [replica] 副本分片中,这些分片也会索引这个文档.
缺点
- 同一个文档重复索引多次,相比拉模式而言,要传输相对较少的数据(众所周知,Lucene索引速度非常快).
- You index the same document several times, but we transfer much less data compared to Pull replication (and Lucene is known to index very fast).
- 这就需要在并发索引的时候进行一些微妙的控制,比如对同一个文档进行非常频繁的索引,在主分片和副本分片上面执行索引操作的时候,你必须保证每次更新是按照正确的顺序,或者通过版本(versioning)来拒绝旧版本的操作,而拉模式就没有这个问题.
优点
- 一旦文档索引完毕,那么该文档在所有的分片及副本上都是立即可用的. 索引操作会等待直到确认所有的副本也执行了同样的索引操作(注意: 如果需要,你也可以使用异步复制). 这意味着索引的实时性. 然后你只需要 refresh 一下 IndexReader 就能搜索到新的数据了.
- 这样的架构能让你非常方便的在节点之间进行切换,假如包含主分片(primary shard)的节点挂了,我们能够很快的进行切换,因为其它的分片和主分片都是一模一样的.
Pull Replication
拉模式是一种主从方式(master – slave)(Solr 用的就是这种). 当一个文档在master上面进行索引,并且数据通过commit操作产生了新的段文件(segment),这个时候,从节点(slave)把这些段文件(segments)拉到自己的机器然后再执行相应的刷新操作,并保证lucene能够使用这些新的数据.
缺点
- 需要在master上面执行commit操作来产生这些段文件(segment),这样slave才能够执行pull操作. 不知道你还记不记得前面说过,lucene的commit的开销是非常大的,如果可能,commit次数越少越好.
- 数据的传输会有不必要的冗余. 在分布式系统里面,网络通常来说是非常宝贵的资源(如果你跑在EC2上面,那将更加宝贵,$$$) 并且最终要移动的数据会越来越多,举例来说,如果你有2个段文件,里面包含了文档,文档里面的字段都是存储的(stored fields),并且Lucene决定要合并这2个段文件,那么你也必须要传输这部分数据(合并之后的段文件),因为这是一个新的段文件,但是实际上你传输的是一份相同的数据.
这将造成一个这样的局面,所有的slaves确实是在master后面. 也可能是确实没有理由每次都进行commit或者花大量时间来传输一个大的段文件。但是至少意味着你的slave会丢失 high availability,并且不可能当成是一个实时的slave(a real time high available slave). 实时搜索不可能存在,并且(使用拉模式)也不可能有这种1秒的刷新率,然后lucene就能实时搜索.
NEXT: 我们仍然忽略了一个重要的章节,就是保证所有文档的持久化.
相关推荐
Elasticsearch-HBase Replication是一种技术方案,旨在实现在HBase和Elasticsearch之间进行数据同步,以便在两个系统间共享和检索数据。HBase是一个分布式、版本化的NoSQL数据库,适合大规模数据存储,而Elastic...
Elasticsearch 7.17.10 是一个强大的开源搜索引擎和分析引擎,主要用于全文搜索、结构化搜索、近实时分析以及大数据处理。这个版本特别强调对Java 1.8(即Java 8)的支持,这意味着它可以在运行Java 8的环境中稳定...
**Elasticsearch 6.8.1:一个强大的开源分布式搜索引擎** Elasticsearch,作为一款全球广泛应用的开源搜索引擎,以其高效、可扩展和实时的特性赢得了广大开发者的喜爱。6.8.1版本是Elasticsearch的一个重要里程碑,...
4. **包结构**:压缩包中的"es"文件夹很可能包含Elasticsearch的核心库文件,这些文件是运行Elasticsearch服务的基础。"other"文件夹中的内容可能包含额外的依赖或辅助工具,其具体用途可能需要进一步探索或文档说明...
Elasticsearch的核心特性包括分布式、RESTful工作方式以及自动的sharding和replication,这些都使得它能够处理大规模数据集群。 Kibana 7.7.1 是一个强大的数据分析和可视化平台,与Elasticsearch紧密集成,用于...
4. **Sharding & Replication**:Elasticsearch通过分片(Sharding)实现水平扩展,每个分片可以分布在不同的节点上,提高读写性能。同时,通过副本分片(Replica Shards)实现数据冗余和容错。 二、全文搜索引擎 ...
通过Sharding和Replication机制,Elasticsearch能够确保数据的高可用性和容错性。Sharding将大型索引分成多个小部分,称为分片,分片可以在不同的节点上独立存储和搜索,这使得大型数据集的管理变得高效。...
ES(Elasticsearch的简称)的核心特性包括:分布式、可扩展性、实时性和灵活性。 **一、分布式架构** Elasticsearch的分布式特性使其能够在多节点环境中运行,每个节点都可以存储和处理数据。通过Sharding和...
1. 分布式:Elasticsearch是基于Lucene构建的分布式搜索引擎,这意味着数据可以被分散在多个节点上,通过Sharding和Replication提供高可用性和容错性。 2. 实时:Elasticsearch具有实时索引和搜索的能力,数据一旦被...
Improve users' search experience with Elasticsearch's functionalities and develop your own Elasticsearch plugins A comprehensive, step-by-step guide to master the intricacies of ElasticSearch with ...
2. **分片和复制(Sharding and Replication)**:为了提高可用性和性能,ElasticSearch将数据分成多个分片,并为每个分片创建副本,这些副本分布在集群的不同节点上。 3. **近实时搜索(Near Real-Time Search)**:当...
2. **分布式架构**:Elasticsearch设计为分布式系统,可以自动进行数据的分片(Sharding)和复制(Replication),确保高可用性和容错性。在5.2.2版本中,它能更好地管理节点间的通信和数据平衡。 3. **RESTful API...
### ElasticSearch中文学习教程知识点梳理 #### 一、总述 **1.1. 简介** ElasticSearch是一款基于Lucene构建的开源、分布式、RESTful搜索引擎。它专为云计算环境设计,具备实时搜索能力,且稳定、可靠、快速、...
4. **Sharding and Replication**:为了实现高可用性和容错性,Elasticsearch将索引划分为多个分片(shards),并且可以设置副本分片(replicas)。这样,即使某个节点失败,数据也能在其他节点上恢复,确保服务不...
**Elasticsearch 5.5 源码分析** Elasticsearch 5.5 是一个重要的版本,它属于 Elasticsearch 的核心版本系列,该版本在功能、性能和稳定性方面都有显著的提升。Elasticsearch 是一个分布式、开源的全文搜索引擎,...
通过Sharding和Replication机制,Elasticsearch 实现了数据的水平扩展和冗余备份,确保在节点故障时仍能提供服务。 2. **RESTful API** Elasticsearch 提供了基于HTTP的RESTful API,使得用户可以通过简单的HTTP...
ElasticSearch通过分片(sharding)和复制(replication)机制,来实现数据的分布式存储和查询的负载均衡。分片可以将数据分布到多个节点上,而复制则能保证高可用性和容错性。 全文搜索系统中一个关键的组成部分是...
Elasticsearch是分布式的,可以将数据分散在多个节点上,通过Sharding和Replication实现数据的分片与复制,提高系统的扩展性和容错性。Sharding将大索引分成多个小的部分,而Replication则确保数据的冗余备份,防止...