热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

es的分布式原理?es是如何实现分布式的?

Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思

Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思想是在多台机器上启动多个es进程实例,组成一个es集群。


es中存储数据的基本单位是索引,比如说你现在要在es中存储一些订单数据,你就应该在es创建一个索引order_idx,所有的订单数据都会写入这个索引里面去,一个索引差不多相当于mysql中的一个数据库。为了方面记忆,可以跟传统的数据库对比来看,但记住不是一样的概念。

    index(database) -> type(table) --> mapping(struct) --> document(行) --> field(字段的值)


    很多情况下,一个index里可能就只有一个type,但是确实如果说一个index里有多个type的情况,你可以认为index就像一个数据库,一个数据库有多个type表,每个表有多个document行,每行也会有多个field字段的值,而mapping对应这个type的表结构定义,但在es7.x已经被移除。




    你创建一个索引,这个索引可以拆分成多个shard,每个shard存储部分数据。拆分多个shard是有好处的。一是支持横向扩展。比如你的数据量是3T,3个shard,每个shard就1T的数据,若现在数据量增加到4T,怎么扩展呢?简单,重新建一个有4个shard的索引,将数据导进去;而是提供性能,数据分布在多个shard,即多台服务器上,所有的操作,都会在多台机器上并行分布式执行。提高了吞吐量和性能。


    接着就是多个shard的数据实际是有多个备份,就是说每个shard都会有个primary shard,负责写入数据,但是有多个replica shard。primary shard写入数据之后,会将数据同步到其他几个replica shard上去。


    通过这个replica的方案,每个shard的数据都有多个备份,如果某台服务器挂了,没关系,还有别的数据副本在其他集群上,由此实现了高可用。


    es集群多个节点,会自动选举一个节点为master节点,这个master节点其实就是干一些管理的工作,比如维护索引元数据,负责切换primary shard和replica shard身份等,如果master节点挂了,那么会重新选举一个节点为master节点。


    如果非master节点挂了,那么master节点会让宕机的primary shard的身份转移到其他机器上replica shard。接着你要是修复了那个宕机节点机器,重启之后,master节点会控制将缺失的replica shard分配过去,同步后续修改的数据等操作, 让集群正常工作。


    简单来说,非master节点宕机之后,节点上primary shard就没有了。那么master会让primary shard对应的replica shard(其他机器)切换成primary shard 。当宕机服务器修复之后,修复后的的节点不在是primary shard,而是replica shard。


    上述其实就是elsaticsearch作为分布式搜索引擎的最基本的架构设计。



    推荐阅读
    • 58同城的Elasticsearch应用与平台构建实践
      本文由58同城高级架构师于伯伟分享,由陈树昌编辑整理,内容源自DataFunTalk。文章探讨了Elasticsearch作为分布式搜索和分析引擎的应用,特别是在58同城的实施案例,包括集群优化、典型应用实例及自动化平台建设等方面。 ... [详细]
    • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
    • 本文介绍了Elasticsearch (ES),这是一个基于Java开发的开源全文搜索引擎。ES通过JSON接口提供服务,支持分布式集群管理和索引功能,特别适合大规模数据的快速搜索与分析。 ... [详细]
    • Solr的安装与部署指南
      Solr作为一款独立的企业级搜索应用服务器,支持Web-service风格的API接口,允许用户通过HTTP请求提交XML文件以创建索引或执行搜索操作。本文将详细介绍Solr的安装步骤及配置方法。 ... [详细]
    • 构建高性能Feed流系统的设计指南
      随着移动互联网的发展,Feed流系统成为了众多社交应用的核心组成部分。本文将深入探讨如何设计一个高效、稳定的Feed流系统,涵盖从基础架构到高级特性的各个方面。 ... [详细]
    • 本文详细介绍了IBM DB2数据库在大型应用系统中的应用,强调其卓越的可扩展性和多环境支持能力。文章深入分析了DB2在数据利用性、完整性、安全性和恢复性方面的优势,并提供了优化建议以提升其在不同规模应用程序中的表现。 ... [详细]
    • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
    • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
    • 科研单位信息系统中的DevOps实践与优化
      本文探讨了某科研单位通过引入云原生平台实现DevOps开发和运维一体化,显著提升了项目交付效率和产品质量。详细介绍了如何在实际项目中应用DevOps理念,解决了传统开发模式下的诸多痛点。 ... [详细]
    • Java项目分层架构设计与实践
      本文探讨了Java项目中应用分层的最佳实践,不仅介绍了常见的三层架构(Controller、Service、DAO),还深入分析了各层的职责划分及优化建议。通过合理的分层设计,可以提高代码的可维护性、扩展性和团队协作效率。 ... [详细]
    • ElasticSearch 集群监控与优化
      本文详细介绍了如何有效地监控 ElasticSearch 集群,涵盖了关键性能指标、集群健康状况、统计信息以及内存和垃圾回收的监控方法。 ... [详细]
    • docker镜像重启_docker怎么启动镜像dock ... [详细]
    • 构建Filebeat-Kafka-Logstash-ElasticSearch-Kibana日志收集体系
      本文介绍了如何使用Filebeat、Kafka、Logstash、ElasticSearch和Kibana构建一个高效、可扩展的日志收集与分析系统。各组件分别承担不同的职责,确保日志数据能够被有效收集、处理、存储及可视化。 ... [详细]
    • 本文详细探讨了成为一名合格的初级Java工程师所需掌握的知识体系,以及从初级到中级乃至高级工程师的成长路径和职业发展前景。 ... [详细]
    • 本文介绍了Elasticsearch的基本概念,包括集群、节点、分片和副本的定义,并详细解释了如何执行文档和索引的CRUD操作。同时,文章还探讨了Elasticsearch与传统关系型数据库MySQL之间的对应关系,以及倒排索引的工作原理。 ... [详细]
    author-avatar
    我就是我
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有