1. ES 分布式特性
ES 支持集群模式,是一个分布式系统,其好处主要有两个:
- 增大系统容量,如内存,磁盘,使得 ES 可以支持 PB 级数据;
- 提高系统可用性,即使部分节点停止服务,整个集群依然可以正常服务。
ES 集群由多个 ES 实例组成,不同集群通过集群名称来区分,可以通过 cluster.name 进行修改,默认为 elastic search;每个 ES 实例实际上是一个 JVM 进程,且有自己的名称,可以通过 node.name 进行修改。
1.1 Cluster State
ES 集群相关的数据称为 cluster state ,主要记录如下信息:节点信息,包括节点名称,连接地址;索引信息,包括索引名称,索引配置。cluster state 存储在每个节点上。
1.2 Master Node
可以修改 cluster state 的节点称为 master 节点,一个集群只能有一个,cluster state 存储在每个节点上,Master 维护最新版本并同步给其他节点。master 节点是通过集群中的所有节点选举产生的,可以被选举的节点称为 master eligible 节点,相关配置为:node.master: true
1.3 Coordinating Node
处理请求的节点被称为 coordinating 节点,该节点为所有节点的默认角色,不能取消,路由请求到正确的节点处理,比如创建索引的请求到 master 节点。
1.4 Data Node
存储数据的节点称为 data 节点,默认所有节点都是 data 节点,相关配置如下:node.data: true
1.5 系统可用性,副本和分片
- 服务可用性,2个节点情况下,允许其中一个节点停止服务;
- 数据可用性,引用副本(replication)解决,使得每个节点上都有完备的数据
1.6 增大系统容量
引用分片(shard)将数据分布在所有节点上,分片是 ES 支持 PB 级数据的基石。分片存储了部分数据,可以分布于任意节点上;分片数在索引创建时指定且后续不允许更改,默认为5个;分片有主分片和副本分片之说,已实现数据的高可用;副本分片的数据由主分片同步,可以有多个,从而提高读取的吞吐量。分片数的设定很重要,需要提前规划好。过小会导致后续无法增加节点实现水平扩容;过大会导致一个节点上分布过多分片,造成资源浪费,同时会影响查询性能。
思考:
- 此时增加节点能否提高索引 test_index 的数据容量?
答:不能,因为只有三个分片,已经分布在三个节点上,新增的节点无法利用。
- 此时增加副本数能否提高索引 test_i