es分布式介绍
- es是分布式的,能够轻松扩容到上百到上千台服务节点,并能够支持pb级数据
- es对用户屏蔽了分布式的复杂性,以下相关分布式特性在幕后自动发生
共识算法,es中使用了PacificA算法
节点发现
节点选主
分区故障
副本日志复制
文档数据分片
节点间文档索引、查询相关负载均衡算法策略
shard副本,高可用
节点请求路由转发
节点扩缩容,无缝集成与重新分片
故障转移 - 虽然es屏蔽了分布式系统的复杂性,但是我们如果能了解下es的分布式特性,对于我们学习其他的分布式算法,实现自己的分布式系统,丰富es的知识都是必要的。
基本概念
在了解集群分布式特性之前,先了解下相关基本概念。分布式系统可以说是一个非常大的知识体系。其中分布式共识算法,一致性在分布式系统中作为最基础的理论基础尤为重要,本文重点先入门了解下es的分布式相关特性。先大概了解下分布式要解决的核心问题,对分布式系统有个宏观的理解,后续再针对分布式算法写一个专题系列,重点讲解下主流的一致性算法:paxos、multi paxos、gossip、ZAB、RAFT、pacificA等。
Node 节点
对于单节点来说,达成数据共识是一件简单的事情,如果多个节点组成一个集群,那么在集群之间达成共识,就是分布式要解决的问题。
-
任意时刻启动一个es的实例,就是启动一个Node节点;互联的node的集合称为集群cluster。如果你启动了一个单一的es的节点,那么该集群中相当于只有一个节点。
-
每个节点默认是都能处理http和网络传输协议的。传输层是专门用在node节点间间通信;http层被rest客户端使用。
-
每个节点都知道集群中的其他任意节点,并且能够转发客户端请求到适当的节点上。
-
默认情况下,一个节点拥有所有这些类型:master-eligible,data,ingest,machine learning(如果被勾选了),transform nodes
Node roles -
客户端可以根集群中的每一个节点进行交互(包括主节点),每个节点都能知道每一份文档存储在哪里,并能路由客户端的请求,到正确存储了你需要的数据的节点上
-
我们进行交互的任意节点,都将管理从一个或多个节点上收集数据,并返回响应到客户端的过程,这一切都由Es透明的管理。
-
可以在配置文件中,自定义节点的角色。如果不进行配置,每个节点默认有以下角色
master
data
ingest
machine learning
remote_cluster_client -
如果设置了node.roles.那么该节点只有指定的角色