热门标签 | 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作为分布式搜索引擎的最基本的架构设计。



    推荐阅读
    • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
      本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
    • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
    • Python操作MySQL(pymysql模块)详解及示例代码
      本文介绍了使用Python操作MySQL数据库的方法,详细讲解了pymysql模块的安装和连接MySQL数据库的步骤,并提供了示例代码。内容涵盖了创建表、插入数据、查询数据等操作,帮助读者快速掌握Python操作MySQL的技巧。 ... [详细]
    • {moduleinfo:{card_count:[{count_phone:1,count:1}],search_count:[{count_phone:4 ... [详细]
    • Yii framwork 应用小窍门
      Yiiframework应用小窍门1.YiiFramework]如何获取当前controller的名称?下面语句就可以获取当前控制器的名称了!Php代码 ... [详细]
    • 数据库异常智能分析与诊断
      数据库,异常, ... [详细]
    • 高可用架构_MySQL高可用架构设计
      文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
    • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • r2dbc配置多数据源
      R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
    • 本文介绍了将mysql从5.6.15升级到5.7.15的详细步骤,包括关闭访问、备份旧库、备份权限、配置文件备份、关闭旧数据库、安装二进制、替换配置文件以及启动新数据库等操作。 ... [详细]
    • 深入理解Java虚拟机的并发编程与性能优化
      本文主要介绍了Java内存模型与线程的相关概念,探讨了并发编程在服务端应用中的重要性。同时,介绍了Java语言和虚拟机提供的工具,帮助开发人员处理并发方面的问题,提高程序的并发能力和性能优化。文章指出,充分利用计算机处理器的能力和协调线程之间的并发操作是提高服务端程序性能的关键。 ... [详细]
    • 【重识云原生】第四章云网络4.8.3.2节——Open vSwitch工作原理详解
      2OpenvSwitch架构2.1OVS整体架构ovs-vswitchd:守护程序,实现交换功能,和Linux内核兼容模块一起,实现基于流的交换flow-basedswitchin ... [详细]
    • 软件测试工程师,需要达到什么水平才能顺利拿到 20k+ 无压力?
      前言最近看到很多应届生晒offer,稍有名气点的公司给出的价格都是一年30多W或者月薪20几k,相比之下工作几年的自己薪资确实很寒酸.根据我自己找工作经历,二线城市一般小公司招聘 ... [详细]
    • 出现_史上最大漏洞出现,你的安卓iPhone电脑都不安全了!
      篇首语:本文由编程笔记#小编为大家整理,主要介绍了史上最大漏洞出现,你的安卓iPhone电脑都不安全了!相关的知识,希望对你有一定的参考价值。 ... [详细]
    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社区 版权所有