ES内部机制

112 阅读3分钟

一、ES分布式基础

1 透明性

以下操作不需要用户关心,ES会自动实现:

  • 分布式数据存储
  • 数据存放在分片的位置
  • 副本数据的写入
  • 新加入的ES节点所属集群
  • 负载均衡
  • 新增副本后,分配重新分配
  • 新增或减少es节点时,es集群会将数据重新分配

2 扩容方案

  • 垂直扩容:使用性能更强的服务器
  • 水平扩容:增加服务器数量(更多使用)
    • 分片自动负载均衡,分片向空闲机器转移。
    • 每个节点存储更少分片,系统资源给与每个分片的资源更多,整体集群性能提高。
    • 扩容极限:节点数大于整体分片数,则必有空闲机器。
    • 超出扩容极限时,可以增加副本数,如设置副本数为2,总共3*3=9个分片。9台机器同时运行,存储和搜索性能更强。容错性更好。
    • 容错性:只要一个索引的所有主分片在,集群就就可以运行。

3 master节点

  • 管理es集群的元数据: 创建删除索引,维护索引元数据;创建删除节点
  • es会自动选择一台服务器作为master

4 节点对等

  • 节点对等,每个节点都能接收所有的请求
  • 自动请求路由
  • 响应收集

二、分片(shard)副本(replica)机制

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

三、单节点下创建index

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

四、双节点下副分片的分配

(1)replica shard分配:3个primary shard,3个replica shard,1 node

(2)主副分片数据同步

(3)读请求:既可以读主分片上数据,也可以读取副分片上数据

五、容错机制

以3分片,2副本数,3节点为例介绍。

  • 主节点宕机,自动master选举,集群为red
  • replica容错:新master将replica提升为primary shard,yellow
  • 重启宕机node,master copy replica到该node,使用原有的shard并同步宕机后的修改,green