ElasticSearch架构原理入门篇

“这是我参与8月更文挑战的第10天,活动详情查看:8月更文挑战node

1、ElasticSearch 节点类型

在ElasticSearch中主要分为两类节点,一类是Master节点,一类是DataNode。json

1. Master节点

当某个节点启动后,而后使用Discovery机制找到集群中的其余节点,并创建链接。并从候选主节点中选出一个Master节点服务器

Discovery机制:discovery.seed_hosts: ["s201", "s202", "s203"]微信

候选主节点:cluster.initial_master_nodes: ["moe-es-node1", "moe-es-node2", "moe-es-node3"]markdown

Master节点主要职责

  • 管理索引:建立索引、删除索引、分配分片
  • 维护元数据
  • 管理集群节点状态
  • 不负责数据写入和查询

2. DataNode节点

在ElasticSearch集群中,会有N个DataNode节点。app

DataNode节点主要负责

  • 数据写入
  • 数据检索

大部分ElasticSearch的压力都在DataNode节点上,在生产环境中,内存最好配置大一些。分布式

2、分片和副本机制

1. shard 分片

ElasticSearch是一个分布式的搜索引擎,索引的数据也是分红若干部分,分布在不一样的服务器节点中,意思就是一台机器存不下,多台机器来存储。分布在不一样服务器节点中的索引数据,就是分片(shard)。ElasticSearch会自动管理分片,若是发现分片不均衡,就会自动迁移。post

一个索引(index)由多个shard(分片)组成,而分片是分布在不一样服务器节点上的。学习

2. replica 副本

为了保证ElasticSearch分片(shard)的高可用、容错性,ElasticSearch会对分片(shard)引入replica(副本)机制,每个分片都有对应的副本分片。搜索引擎

每一个分片都会有一个主分片(Primary Shard),若干个副本分片(Replica Shard)

Primary Shard 和 Replica Shard不在同一个服务器节点上。

3. 建立索引时指定分片和副本

建立指定分片数量、副本数量的索引

PUT /moe_article
{
  "mappings": {
    "properties": {
    }
  },
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}
复制代码

假若有三台服务器节点

number_of_shards:3个主分片

number_of_replicas:2个副本

image.png

3、ElasticSearch 重要工做流程

1. ElasticSearch 文档写入原理

image.png

  1. 假如选择了Node2(DataNode)发送请求,此时Node2称为coordinating node(协调节点)
  2. 计算获得文档要写入的分片 shard = hash(routing) % number_of_primary_shards routing 是一个可变值,默认是文档的 _id
  3. coordinating node会进行路由,将请求转发给其余DataNode(对应某个primary shard,假如主分片在Node1节点上)
  4. Node1上的Primary Shard处理请求,写入数据到索引库中,并将数据同步到其余的Replica Shard中
  5. Primary Shard 和 Replica Shard都保存完文档后,返回客户端。

2. ElasticSearch 检索原理

image.png

  1. 假如选择了Node2,此时Node2称为coordinating node(协调节点)
  2. 协调节点(Coordinating Node)将查询请求广播到每个数据节点,这些数据节点的分片会处理该查询请求。
  3. 每一个分片进行数据查询,将符合条件的数据放在一个优先队列中,并将这些数据的文档ID、节点信息、分片信息返回给协调节点。
  4. 协调节点将全部的结果进行汇总,并进行全局排序。
  5. 协调节点向包含这些文档ID的分片发送get请求,对应的分片将文档数据返回给协调节点,最后协调节点将数据返回给客户端。

4、总结

ElasticSearch节点类型分为 Master(主节点)和 DataNode(数据节点)。分片(Shard)分为 Primary Shard(主分片)和 Replica Shard(副分片)。分片(Shard)能够支撑海量数据,解决单机磁盘容量问题,副本(Replica)能够保证数据不丢失。

欢迎你们关注微信公众号(MarkZoe)互相学习、互相交流。

相关文章
相关标签/搜索