• ElasticSearch~副本~分片


    目录

    1 相关概念

    1.1  分片

    1.2 副本

    2 分布式集群

    2.1 单节点集群

    2.2 故障转移

    2.3 水平扩容


    1 相关概念

    1.1  分片

            一个索引可以存储超出单个节点硬件限制的大量数据,比如:一个具有10亿文档的数据的索引占用1TB的内存空间,而任意节点都可能没有这样大的磁盘空间。或者单个节点的处理请求过慢。为了解决这个问题,ElasticSearch提供了将索引划分成多份的能力,每一份称之为分片。当创建一个索引的时候,可以指定想要的分片数量。每个分片本身也会一个功能完善并且独立的“索引”,这个索引可以被放置在集群的任意节点上。

    注意:

    1)允许水平分割/扩展内容容量。

    2)允许在分片上进行分布式的、并行的操作,进而提高性能/吞吐量。

    1.2 副本

            在网络/云的环境里,失败随时都有可能发生,在某个分片或者节点不知怎么的就处于离线状态,在这种情况下,有一个故障转移机制是非常有用的。为此ElasticSearch允许创建分片的一份或多份拷贝,这些拷贝就叫做复制分片。

    注意:

    1)在分片或者节点失败的情况下,提供了高可用的性。因为这个原因,注意复制分片从不与原/主要分片处于同一节点上是非常重要的。

    2)扩展搜索量,因为搜索可以在所有的副本上运行。

    2 分布式集群

    2.1 单节点集群

            在包含一个空节点的集群内创建名为users的索引,为其分配3个主分片和一份副本(每个主分片拥有一个副本分片)

    1. {
    2. "settings":{
    3. "number_of_shards":3,
    4. "number_of_replicas":1
    5. }
    6. }

    创建成功后查看状态:

     由此可见,我们一个创建了一个分片为3,副本为1的索引。也就是说我们现在的集群是拥有一个索引的单节点集群。所有的3个主分片被分配到节点1上。

    然后通过elasticsearch-head插件查看集群情况:

     1)黄色部分(yellow(3 of 6)):表示当前集群的全部主分片都正常运行,但是副本分片没有全部处在正常状态。

    2)节点3个主分片正常(一般带五角星的是主节点)

    3)3个副本分片都是Unassigned,他们没有被分配到任意节点。在同一个节点既保持原始数据又保存副本没有意义(要将副本和原始数据分散到不同的节点上,防止一旦失去了那个节点,我呢也丢失了节点上的原始数据和副本)

    当前集群是可以正常运行的,但是硬件故障是有丢失数据的风险。

    2.2 故障转移

    之前我们是启动了一个节点,为了防止丢失数据,我们可以将节点2启动起来。可以参考我上篇博客:Windows下~ES8集群部署_IT盛夏的果实的博客-CSDN博客

    启动成功后,副本会重新分配。

    然后刷新elasticsearch-head

     1)之前是健康值是黄色状态,如今变成了绿色,表示所有6个分片(3个主分片和3个副本分片)都在正常运行。

    2)3个主分片正常

    3)当第二个节点加入到集群后,3个副本分片将会分配到这个节点上---每个主分片对应一个副本分片。意味着当集群内任意一个节点出现问题时,我们的数据都能够找回,所有新近被索引的文档都会保存到主分片上,然后被并行复制到副本分片上,这就保证了我们既可以从主分片又可以从副本上获取文档。

    当集群中只有一个节点在运行时,意味着会有一个单点故障问题----没有冗余。幸运的是,我么只需要在启动一个节点即可防止数据丢失。当在同一台机器上启动了第二个节点,只要它和第一个节点有同样的cluster.name配置,它就会自动加入到集群并加入到其中。但是在不同机器上启动节点的时候,为了加入到同一集群,需要配置一个可连接到的主机列表。之所以配置为单播发现,以防止节点无意中加入集群。只有在同一台机器上运行的节点才会自动组成集群。

    如果启动了第二个节点,我们的集群将会拥有两个节点的集群:所有主分片和副本分片都已被分配。

    2.3 水平扩容

    当我们的业务增长需要扩容时,我们的分片应当如何分配呢?

    现在启动我们的第三个节点,

    启动成功后,副本会重新分配。

    然后刷新elasticsearch-head

    此时6个分片(3个主分片和3个副本分片)都正常运行。

    可以看出,节点1和节点2上都有一个分片迁移到了节点3上,现在每个节点都有2个分片,而不是3个。这表示每个节点资源硬件将被更少的资源硬件所共享,每个分片的性能会被提升。

    分片是一个完整功能的搜索引擎,它拥有使用一个节点上所有资源的能力。我们这拥有6个分片的索引可以最大扩容到6个节点,每个节点上存在一个分片,并且每个分片拥有所有资源的全部节点。 

    如何扩容超过6个节点。

    主分片的数目在索引创建时已经确定下来,但是读操作----搜索和返回数据----可以同时被主分片或副本分片处理,所以当拥有越多的副本分片时,也将拥有越多是吞吐量。

    在运行中的集群时可以动态调整本分片的树木的,我们可以按需伸缩集群。比如:我们将副本数从1增长到2。

    1. {
    2. "number_of_replicas": 2
    3. }

     然后刷新elasticsearch-head。

    发现3个节点上都有3个分片。

     主分片和副本分片情况如下:

     

  • 相关阅读:
    在线教育项目【统一异常处理】
    绿原酸(CA)牛血清白蛋白纳米粒|牛血红蛋白PLGA纳米粒的特性
    MATLAB基础应用精讲-【基础知识篇】MATLAB程序优化-通过Profiler进行程序运行分析
    【Java SE】逻辑控制
    大健康行业千城万企信用建设工作启动大会在京召开
    阿里终面:10亿数据如何快速插入MySQL?
    Go语言现代web开发15 泛型和错误
    8月2日第壹简报,星期二,农历七月初五
    dameng数据库数据id decimal类型,精度丢失
    图解LeetCode——636. 函数的独占时间(难度:中等)
  • 原文地址:https://blog.csdn.net/qq_50652600/article/details/125485886