ES(ElasticSearch)集群中相关的概念

ES集群开始介绍之前,咱们需要先对ES的有一个基本的了解,可参考网址ES的基本概念以及CRUD示例

一、ES集群相关的概念

a、Node
每一个ES服务实例都叫做一个es节点(一般情况,生产环境中都是一台服务器一个es实例,但测试环境中,我们一台电脑可能启动多个es实例,所以,ES服务器数量不是节点数量)。

b、Cluster
代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任何一个节点的通信和与整个es集群通信是等价的。

1、集群中的节点对等,每个节点都能接收所有的请求。
2、集群自身可以自动请求路由
3、响应收集:任意节点都可以并发的把查询自居分发到其他节点,然后合并各个节点返回的查询结果。最后返回用户一个完整 结果集。

c、Shards
代表索引分片,es可以把一个完整的索引分成多个分片,这样的好处是可以把一个大的索引拆分成多个,分布到不同的节点上。构成分布式搜索。分片的数量只能在索引创建前指定,并且索引创建后不能更改。

d、replicas
代表索引副本,es可以设置多个索引的副本,副本的作用一是提高系统的容错性,当某个节点某个分片损坏或丢失时可以从副本中恢复。二是提高es的查询效率,es会自动对搜索请求进行负载均衡。副本不像分片必须提前设置好数量,副本随时可以自由添加。

e、Recovery
代表数据恢复或叫数据重新分布,es在有节点加入或退出时会根据机器的负载对索引分片进行重新分配,挂掉的节点重新启动时也会进行数据恢复。

二、ES是如何解决高并发

ES是一个分布式全文检索框架,隐藏了复杂的处理机制,内部使用 分片机制、集群发现、分片负载均衡请求路由。其核心的策略就是Shards 分片Replicas分片。

Es的分片类似关系型数据库的分片。当有大量的文档时,由于内存的限制、磁盘处理能力不足、无法足够快的响应客户端的请求等,一个节点可能不够。这种情况下,数据可以分为“体积较小”的分片。每个分片放到不同的服务器上。当你查询的索引分布在多个分片上时,ES会把查询发送给每个相关的分片,并将结果组合在一起,(注意:C端的应用程序并不知道分片的存在,C端在使用方式上还是像链接单机ES一样)。

详细来说就是:每个索引会被分成多个分片shards进行存储,默认创建索引是分配5个分片进行存储。每个分片都会分布式部署在多个不同的节点上进行部署,该分片成为primary shards。 为了实现高可用数据的高可用,主分片可以有对应的备分片replics shards,replic shards分片承载了负责容错、以及请求的负载均衡。

 每一个主分片为了实现高可用,都会有自己对应的备分片,主分片对应的备分片不能存放同一台服务器上。主分片primary shards可以和其他replics shards存放在同一个node节点上。

引用一张别人ES分片结构图(画得很好,来源:https://www.cnblogs.com/JimShi/p/11309640.html

一个索引其实就是分为几个primary shard(主分片)。当客户端发起创建document的时候,es需要确定这个document放在该index哪个shard上。这个过程就是数据路由。路由算法:shard = hash(routing) % number_of_primary_shards。这也解释了就是为什么不让修改primary_shards的数量。

三、节点角色

集群中大规模集群,应考虑单独的角色充当。特别并发查询量大,查询的合并量大,可以增加独立的协调节点。角色分开的好处是分工分开,不互影响。如不会因协调角色负载过高而影响数据节点的能力。

ES集群中节点的类型分为:master(主节点)、dataNone(数据节点)、CoordinatingNode(协调节点)、Ingest node(对索引的文档做预处理,几乎不用)、 Tribe Node(主要用于跨集群透明访问,已经弃用了)。现在只说master、dataNone、CoordinatingNode这三个用处。

a、master:主要负责集群中索引的创建、删除以及数据的Rebalance(负载均衡)等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。
b、dataNone:主要负责集群中数据的索引和检索,一般压力比较大。建议和Master节点分开,避免因为Data Node节点出问题影响到Master节点。
c、CoordinatingNode:只作为接收请求、转发请求到其他节点、汇总各个节点返回数据等功能的节点。
Tips1: 小规模集群,不需严格区分。因为一个节点可以充当一个或多个角色,默认三个角色都有。
Tips2: 中大规模集群(十个以上节点),应考虑单独的角色充当。特别并发查询量大,查询的合并量大,可以增加独立的协调节点。角色分开的好处是分工分开,不互影响。如不会因协调角色负载过高而影响数据节点的能力。
用户并不需要知���某个节点是什么类型的节点;所有的操作需求 可以发到任意节点,es内部完成这些工作。必要时任意节点都可以并发的把查询自居分发到其他节点,然后合并各个节点返回的查询结果。最后返回用户一个完整 结果集。所有的这些工作不需要经过主节点转发(节点之前通过p2p的方式通讯)。

 

四、结语

虽然说es集群的搭建工作主要由运维工程师来进行操作,但是,作为一个IT从业者,对同一样技术,本就没有绝对的边线,咱们没事的时候也可以实践一下,这里引用了一篇别人的搭建es集群的笔记:ES集群搭建管理 

 

添加评论

Loading