一、ES集群架构
特性:高可用 可扩展
优势:提高系统可用性,部分节点停止服务整个集群不受影响
存储可水平扩展
概念
集群
一个集群可以有一个或者多个节点
不同的集群通过不同的名字来区分,默认名字“elasticsearch“
通过配置文件修改,或者在命令行中 -E cluster.name=es-cluster进行设定
二、节点
节点是一个Elasticsearch的实例,本质上就是一个JAVA进程
一台机器上可以运行多个Elasticsearch进程,但是生产环境一
般建议一台机器上只运行一个Elasticsearch实例
每一个节点都有名字,通过配置文件配置,或者启动时候 -E node.name=node1指定
每一个节点在启动之后,会分配一个UID,保存在data目录下
1 节点类型
Master Node:主节点
Master eligible nodes:可以参与选举的合格节点
Data Node:数据节点
Coordinating Node:协调节点(客户端的请求落在协调节点上,转发给相应节点)
其他节点
2 Master eligible nodes和Master Node(可以选举成为master节点,相当于主节点的从节点)
每个节点启动后,默认就是一个Master eligible节点,可以设置 node.master: false禁止;
Master-eligible节点可以参加选主流程,成为Master节点;
当第一个节点启动时候,它会将自己选举成Master节点;
每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息;
集群状态(Cluster State) ,维护了一个集群中,必要的信息所有的节点信息
所有的索引和其相关的Mapping与Setting信息,分片的路由信息;
3 Master Node的职责
处理创建,删除索引等请求,负责索引的创建与删除
决定分片被分配到哪个节点
维护并且更新Cluster State
4 Master Node的最佳实践
Master节点非常重要,在部署上需要考虑解决单点的问题
为一个集群设置多个Master节点,每个节点只承担Master 的单一角色
5 选主的过程
互相Ping对方,Node ld 低的会成为被选举的节点,其他节点会加入集群,但是不承担 Master节点的角色。一旦发现被选中的主节点丢失,就会选举出新的Master节点
6 Data Node & Coordinating Node
Data Node
可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用;
节点启动后,默认就是数据节点。可以设置node.data: false
禁止由Master Node决定如何把分片分发到数据节点上
通过增加数据节点可以解决数据水平扩展和解决数据单点问题
Coordinating Node
负责接受Client的请求, 将请求分发到合适的节点,最终把结果汇集到一起
每个节点默认都起到了Coordinating Node的职责
其他节点类型
Hot & Warm Node
不同硬件配置 的Data Node,用来实现Hot & Warm架构,降
低集群部署的成本
Ingest Node
数据前置处理转换节点,支持pipeline管道设置,可以使用
ingest对数据进行过滤、转换等操作
Machine Learning Node
负责跑机器学习的Job,用来做异常检测
Tribe Node
Tribe Node连接到不同的Elasticsearch集群,并且支持将这
些集群当成一个单独的集群处理
读写分离架构
三、分片
主分片:用于解决数据水平扩展的问题,通过分片将数据分配到不同的节点上,一个分片是一个运行的lucene实例,主分片数在索引创建时指定,后续不允许修改;
副本分片:用于解决数据高可用问题,副本分片是主分片的copy。副本分片数可调整,增加副本数可以提高服务的可用性(读取可以从副本和主分片读取,提高读取的吞吐量)
分片的设定
对于生产环境中分片的设定,需要提前做好容量规划
分片数设置过小导致后续无法增加节点实现水平扩展
单个分片的数据量太大,导致数据重新分配耗时
分片数设置过大,7.0 开始,默认主分片设置成1,解决了over-sharding(分片过度)的问题
影响搜索结果的相关性打分,影响统计结果的准确性
单个节点上过多的分片,会导致资源浪费,同时也会影响性能
主分片的数量不允许更改,由于分片路由的时候是取的hash取模的结果;
生产环境集群配置建议
单一职责:master eligible nodes:负责集群的状态管理
使用低配置cpu Ram和磁盘
date nodes:负责数据存储及处理客户请求
使用高配置cpu Ram和磁盘
ingest nodes:负责处理数据
使用高配置cpu Ram和低配置磁盘
coordinating nodes:请求转发数据处理
使用低高cpu Ram和低配置磁盘
节点扩展方案
当磁盘容量无法满足需求时,可以增加数据节点;
磁盘读写压力大时,增加数据节点
当系统中有大量的复杂查询及聚合时候,增加Coordinating节点,增加查询的性能
es分片路由的规则
shard_num = hash(_routing) % num_primary_shards
_routing字段的取值,默认是_id字段,可以自定义。
大数据量索引可根据不同情况对索引进行拆分进行优化查询;