ES入门与核心原理(五)Elasticsearch分布式:数据分片、节点扩展与容错

ES入门与核心原理(五)Elasticsearch分布式:数据分片、节点扩展与容错

ElasticSearch 设计的理念就是分布式搜索引擎,底层其实还是基于 lucene 的。核心思想就是在多台机器上启动多个 es 进程实例,组成了一个 es 集群。ES隐藏了复杂的分布式机制,下面我对ES的分布式原理进行剖析。

当ElasticSearch的节点启动后,它会利用多播(multicast)寻找集群中的其它节点,并与之建立连接。在集群中,一个节点被选举成主节点(master node)。这个节点负责管理集群的状态,当群集的拓扑结构改变时把索引分片分派到相应的节点上。

数据分片、节点扩展与容错

图1. 空集群

图2. 主分片图3. 主从分片

在图1中,ES集群只有一个master节点,该节点是一个空的没有任何分片数据。图2中只有一个master节点,索引被拆成3个shard,由于只有一个节点,因此所有shard都只能分布在node1节点上(primary和replica不能同时存在于同一个节点上),若该索引设置的是3个primary shard,3个replica,那个这3个replica将都不是active,因为没有节点存放replica。图3有2个节点,3个primary shard在node1上,3个replica在node2上。replica shard负责容错,以及承担读请求负载。

master节点

图4. 节点扩展

若此时ES集群增加一个新的节点node3,shards会自动在节点中进行负载均衡。从图4中可以看出,当新增node3时,p0(primary shard 0)和R2(replica 2)将自动分布到node3上。

扩容之后,每个节点的shard数量更少,就意味着每个shard可以占用节点上更多的资源,IO、CPU、Memory,整个系统系统会更好。如果超出系统的扩容瓶颈,比如图4中6个shard,但是扩容到了9个基点,这时每个shard分布在一个节点上,仍然有3个节点处于空闲状态,此时我们可以增加replica shard数量(primary shard在索引创建时制定,创建后就不可修改),将replicas增加到6个,这样每台机器上都会有一个shard,并且是独享每台机器的资源。

图6. 从分片扩展

图7. 容错(故障恢复)

在图7中,node1发生故障后

  • 首先进行master选举,自动选举另一个node成为新的master,承担起master的责任来;
  • 新master将丢失掉的primary shard的某个replica shard提升为primary shard,此时cluster status状态会变为yellow,因为primary shard全部变为active了,但是少了一个replica shard,所以不是所有的replica shard都是active的;
  • 重启故障的node,新的master会将缺失的副本都copy一份到该node上去,而且该node会使用之前已有的shard数据,只是同步一下宕机后发生的修改,cluster status变为green,因为primary shard和replica shard都齐全了

分片数量合理设置

1. 跟业务的实际使用场景有关,千万级别以下默认五个分片就足够。亿级需要压测,直至业务方认为查询延迟已经无法接受,此时认为分片数量已经不够。

2. 一个经验值就是每个分片不要超过30G分片大小已经达到性能瓶颈,就需要考虑拆分索引。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值