ElasticSearch 特性
ElasticSearch是一个高性能,高可用,易扩展的分布式搜索引擎。
其高可用体现在:
服务可用性:允许有节点停止服务,整个ElasticSearch集群必须正常对外提供服务(冗余节点)
数据可用性:允许部分节点丢失,但是数据不会丢失(冗余数据)
其可扩展性体现在:
请求量提升/数据的不断增长(将数据分布到所有节点上)(新增节点就能提供读写能力)
ElasticSearch分布式架构的好处
存储的水平扩容
提高可用性
ElasticSearch不同的集群通过名字不同来区分,默认名字是elasticsearch
可以通过修改配置文件,或者在命令行中 -E cluster.name = test 进行设定
一个分布式集群可以有一个或多个节点
一、节点
一个节点就是一个ElasticSearch的实例,本质上就是一个Java进程。
每个节点都有名字,通过配置文件,或者启动时候 -E node.name = node1指定
每一个节点在启动之后,会分配一个UID,保存在data目录下
Master eligible Node & Master Node
每个节点启动后,默认就是一个Master eligible节点(可以设置node.master:false 禁止),Master-eligible节点可以参与选主流程,成为Master节点
当第一个节点启动,它会将自己选举成Master节点
每个节点上都保存了集群的状态信息(所有节点信息,所有的索引和其相关的Mapping和Setting信息,分片路由信息),只有Master节点可以修改集群状态信息(任何节点修改会导致不一致,而且需要额外的锁控制)
Data Node
可以保存数据的节点,叫做Data Node,负责保存分片数据。在数据扩展上起到了至关重要的作用
Coordinating Node
负责接收Client请求,将请求分发到合适的节点,最终吧结果汇聚在一起
每个节点默认都起到了Coordinating Node的职责
Hot & Warm Node
本质上还是Data Node,根据不同的硬件配置,可以实现Hot & Warm架构,降低集群部署成本。
例如海量数据分析,就可以使用高硬件服务器,做Hot Node,处理海量日志
Machine Learning Node
负责跑机器学习Job,用来做异常检测
Tribe Node
Tribe Node 连接到不同的elasticSearch集群,并且支持将这些集群当成一个单独集群处理(5.3开始使用Cross Cluster Search处理)
配置节点类型
生产环境中一个节点应该设置单一的角色(意味着节点可以多角色)
节点类型 | 配置参数 | 默认值 | 备注 |
master eligible | node.master | true | 可以参加选主 |
data | node.data | true | 存储数据 |
ingest | node.ingest | True | ingest节点可以运行一些pipeline的脚本 |
Coordinating | 无 | 每个节点默认都是coordinating节点,设置其他类型全部为false | |
machine learning | node.ml | true(需要enable x-pack) | 机器学习 |
二、集群
一个es集群必须包含至少一个主节点(masterNode)和一个数据节点(dataNode),一个节点可以同时为masterName和dataNode(默认不修改配置文件)可用于自己测试环境。
一个集群可配置多个masterNode,但是es集群中只使用一个masterNode,其他作为备用master节点,在当前masterNode节点挂了以后,备用masterNode自动启用。
三、分片
分片分为两种类型:主分片(Primary Shard)和副本分片(Replica Shard)
主分片:用以解决数据水平扩展的问题,通过主分片,可以将数据分布到集群内的所有节点上(主从复制)
主分片在索引创建时指定,后续不允许修改,除非reindex
一个分片是一个运行的Lucene实例
副本分片:用于解决数据高可用的问题,是主分片的拷贝(可以提高读吞吐量)
副本分片数,可动态调整
假设一个集群中有两个节点。movie索引的分片分布情况如下所示
PUT /movies
{
"settings":{
"number_of_shards":2, //主节点
"number_of_replicas":2 //副本节点
}
}