Elasticsearch是一个基于Lucene的搜索引擎,用于在大规模数据集中进行搜索、分析和存储。 Elasticsearch是一个分布式系统,可以通过多个节点进行水平扩展。
Elasticsearch集群架构
Elasticsearch集群由多个节点组成,每个节点都是一个独立的Elasticsearch实例。每个节点都是平等的,可以执行相同的任务。节点之间可以相互通信,共同协作完成搜索和索引数据的任务。
Master节点
在Elasticsearch集群中,有一个节点被指定为主节点。主节点主要用于集群管理和协调工作。主节点会负责以下任务:
- 维护集群状态:主节点负责维护集群的整体状态,包括节点列表、索引元数据和分片状态等。
- 负责集群重平衡:当新的节点加入或旧的节点退出集群时,主节点会负责重平衡集群,将分片重新分配给节点。
- 执行集群级别操作:例如创建或删除索引,设置索引级别的设置等。
- 监控节点状态:主节点会监控节点状态,检测节点是否正常工作。
在一个集群中,只能有一个主节点。如果主节点出现故障,Elasticsearch会自动选举一个新的主节点来接管工作。
Data节点
除了主节点外,Elasticsearch集群中的节点还可以是数据节点。数据节点负责存储和处理数据。当客户端向集群发起搜索请求时,数据节点会根据请求查询本地数据并返回结果。
每个数据节点都存储着集群中一部分的数据。当新的数据被索引时,数据节点会将数据分配给对应的分片,然后将分片存储在本地磁盘上。如果数据节点出现故障,那么集群中的其他节点会接管该节点的工作。
Client节点
除了主节点和数据节点,Elasticsearch集群还可以包含客户端节点。客户端节点不存储数据,只是向集群发送查询请求,并将结果返回给客户端。
客户端节点主要有以下两个作用:
- 负载均衡:客户端节点可以将查询请求分配给不同的数据节点,从而实现负载均衡。
- 故障切换:如果某个数据节点出现故障,客户端节点可以自动将查询请求切换到其他节点上,从而保证服务的可用性。
分片
在Elasticsearch集群中,数据被分成多个分片存储。每个分片是一个独立的Lucene索引,包含部分数据和索引信息。分片可以在集群中的不同节点之间分配和复制,以实现高可用性和数据冗余。
每个索引都可以分成多个主分片和多个副本。主分片是索引的基本单元,它包含了数据的一部分和索引信息。每个主分片都是独立的Lucene索引,可以在集群中的任何节点上存储。副本分片是主分片的拷贝,用于提高查询效率和可用性。
分片的数量可以在索引创建时指定,但一旦创建后就不能更改。通常情况下,主分片的数量应该与集群中的数据节点数量相同,以确保每个节点都能存储一定数量的分片。
节点间通信
在Elasticsearch集群中,节点之间通过网络进行通信。每个节点都有一个唯一的节点名称,节点名称由Elasticsearch自动生成。节点名称通常具有以下格式:
代码语言:javascript复制<host>-<uuid>
其中,host是节点所在的主机名,uuid是一个唯一的标识符,用于确保节点名称的唯一性。
节点之间的通信可以通过两种方式进行:HTTP和Transport。HTTP协议是Elasticsearch的默认协议,用于处理RESTful API请求。Transport协议是Elasticsearch集群内部使用的协议,用于节点之间的直接通信。
集群状态
Elasticsearch集群的状态可以分为以下三种:
- Green:集群正常,所有的主分片和副本分片都可用。
- Yellow:集群部分可用,所有的主分片都可用,但是一些副本分片不可用。
- Red:集群不可用,至少有一个主分片不可用。
当Elasticsearch集群中的节点发生故障时,主节点会自动将故障节点从集群中移除,并将分配给该节点的分片重新分配给其他节点。当节点恢复正常时,它会重新加入集群,并重新分配分片。