• Elasticsearch系统学习(五)-分布式架构及shard容错原理


    一、Elasticsearch分布式架构

    image

    1.1、Elasticsearch对复杂分布式机制的透明隐藏特性

    Elasticsearch是一套分布式的系统,分布式是为了应对大数据量,隐藏了复杂的分布式机制

    1)分片机制:将一些document插入到es集群中去了,没有care过数据怎么进行分片的,数据到哪个shard中去

    2)cluster discovery(集群发现机制):我们之前在做那个集群status从yellow转green的实验里,直接启动了第二个es进程,那个进程作为一个node自动就发现了集群,并且加入了进去,还接受了部分数据,replica shard

    3)shard负载均衡:es会自动进行shard均匀分配,以保持每个节点的均衡的读写负载请求

    4)shard副本,请求路由,集群扩容,shard重分配

    1.2、Elasticsearch的垂直扩容与水平扩容

    垂直扩容:采购更强大的服务器,成本非常高昂,而且会有瓶颈,假设世界上最强大的服务器容量就是10T,但是当你的总数据量达到5000T的时候,你要采购多少台最强大的服务器啊
    水平扩容:业界经常采用的方案,采购越来越多的普通服务器,性能比较一般,但是很多普通服务器组织在一起,就能构成强大的计算和存储能力

    1.3、增减节点时的数据rebalance

    保持负载均衡

    1.4、master节点

    (1)创建或删除索引
    (2)增加或删除节点

    1.5、节点对等的分布式架构

    (1)节点对等,每个节点都能接收所有的请求
    (2)自动请求路由
    (3)响应收集

    二、shard&replica机制

    2.1、相关要点

    (1)index包含多个shard
    (2)每个shard都是一个最小工作单元,承载部分数据,每个shard都是一个lucene实例,完整的建立索引和处理请求的能力
    (3)增减节点时,shard会自动在nodes中负载均衡
    (4)primary shard和replica shard,每个document肯定只存在于某一个primary shard以及其对应的replica shard中,不可能存在于多个primary shard
    (5)replica shard是primary shard的副本,负责容错,以及承担读请求负载
    (6)primary shard的数量在创建索引的时候就固定了,replica shard的数量可以随时修改
    (7)primary shard的默认数量是5,replica默认是1,默认有10个shard,5个primary shard,5个replica shard
    (8)primary shard不能和自己的replica shard放在同一个节点上(否则节点宕机,primary shard和副本都丢失,起不到容错的作用),但是可以和其他primary shard的replica shard放在同一个节点上

    2.2、单node创建index状况

    (1)单node环境下,创建一个index,有3个primary shard,3个replica shard
    (2)集群status是yellow
    (3)这个时候,只会将3个primary shard分配到仅有的一个node上去,另外3个replica shard是无法分配的,primary shard不能和自己的replica shard放在同一个节点上
    (4)集群可以正常工作,但是一旦出现节点宕机,数据全部丢失,而且集群不可用,无法承接任何请求

    创建shard:

    PUT /test_index
    {
       "settings" : {
          "number_of_shards" : 3,
          "number_of_replicas" : 1
       }
    }

    2.3、两个node状况

    image

    (1)replica shard分配:3个primary shard,3个replica shard,每个mode上有3个shard
    (2)primary ---> replica同步
    (3)读请求:primary/replica

    2.4、横向扩容原理

    (1)primary&replica自动负载均衡,6个shard,3 primary,3 replica
    (2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好
    (3)扩容的极限,6个shard(3 primary,3 replica),最多扩容到6台机器,每个shard可以占用单台服务器的所有资源,性能最好
    (4)超出扩容极限,无法改变primary shard数量,可以动态修改replica数量,9个shard(3primary,6 replica),扩容到9台机器,比3台机器时,拥有3倍的读吞吐量
    (5)3台机器下,9个shard(3 primary,6 replica),资源更少,但是容错性更好,最多容纳2台机器宕机,6个shard只能容纳1台机器宕机
    (6)一方面考虑扩容的原理,怎么扩容,怎么提升系统整体吞吐量;另一方面要考虑到系统的容错性,怎么保证提高容错性,让尽可能多的服务器宕机,保证数据不丢失

    2.5、容错机制

    涉及到master选举,replica容错,数据恢复

    (1)9 shard,3 node
    (2)master node宕机,自动master选举,red
    (3)replica容错:新master将replica提升为primary shard,yellow
    (4)重启宕机node,master copy replica到该node,使用原有的shard并同步宕机后的修改,green

    image

  • 相关阅读:
    Gulp实现web服务器
    移动端事件介绍
    Javascript设计模式详解
    H5移动端知识点总结
    【干货理解】理解javascript中实现MVC的原理
    [干货]数据交互与本地存储
    深入理解Javascript面向对象编程
    javascript数组的知识点讲解
    javascript函数式编程要掌握的知识点讲解
    深入浅出的javascript的正则表达式学习教程
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/11445953.html
Copyright © 2020-2023  润新知