目录
一、集群的概念
1、节点
2、索引
3、分片和副本
二、集群的架构
三、集群的部署方式
1、单主节点
2、多主节点
3、安全集群
四、搭建ES集群
1、elasticsearch中集群节点有不同的职责划分
2、elasticsearch中的每个节点角色都有自己不同的职责,因此建议集群部署时,每个节点都有独立的角色
3、ES集群的脑裂
(1)、这种情况可能会导致以下问题:
编辑
(2)、解决ES集群的脑裂问题,可以考虑以下几个方面:
五、ES集群的分布式存储
1、数据分片
2、副本机制
3、算法
4、流程
(1)scatter phase:分散阶段
(2)gather phase:聚集阶段
六、ES集群的故障转移
Elasticsearch是一个开源的分布式搜索引擎,能够快速地进行全文检索、结构化搜索、分析等操作。为了增加其可靠性和容错性,Elasticsearch支持多节点之间的集群,并采用了Shard(分片)和Replica(副本)机制来分摊负载、提高可用性。
下面我们来详细讲解一下Elasticsearch集群的概念、架构和部署方式。
一、集群的概念
1、节点
Elasticsearch集群中的一个单独的实例就是一个节点。一个节点可以是物理上的服务器,也可以是虚拟机、容器等。每个节点都有一个唯一的名称,格式为“hostname-数字”,其中数字表示该节点在集群中的顺序。
2、索引
Elasticsearch中的索引就像关系型数据库中的数据库,是一个逻辑上的容器,用于存储数据。每个索引可以包含多个文档,每个文档可以包含多个字段。
3、分片和副本
为了支持水平扩展和提高容错性,Elasticsearch将每个索引分成多个分片,每个分片存储部分数据。每个分片都是一个Lucene实例,可以由不同的节点来存储和处理。在分片的基础上,Elasticsearch还支持将分片的副本分布在多个节点上,以便在主节点失效时能够快速切换到新节点上。
二、集群的架构
Elasticsearch的集群架构是基于Master-Node结构的,每个集群都有一个Master节点,负责管理整个集群的状态和分配分片。除了Master节点之外,其他节点都是Data节点,存储分片和响应请求。在集群中,同一节点既可以是Master节点,也可以是Data节点。
Master节点是集群的控制中心,负责以下任务:
- 索引和删除文档时为分片选择目标节点
- 分配未分配的分片
- 分裂或合并分片
- 管理节点加入和离开集群
- 选举新的Master节点
Data节点是存储数据的节点,负责以下任务:
- 索引和删除文档时为分片提供存储和查询服务
- 处理搜索请求
- 同步和复制分片数据
在集群中,每个节点都有一个唯一的节点名称,并且每个分片都有一个唯一的ID。分片的分配过程由Master节点控制,可以按照分片ID、索引名称、节点名称等多个因素进行选择和分配。
三、集群的部署方式
Elasticsearch可以在多个节点上部署,以形成一个集群。节点可以在同一台物理服务器上运行,也可以在不同的物理服务器上运行。在部署集群时,需要注意以下几点:
同一集群中的所有节点必须使用相同的集群名称,以便自动加入同一集群。
不同的节点要求具有相同的版本和配置,以便能够互相通信和进行分片的转移。
必须指定Master节点的名称和IP地址。
可以通过设置环境变量或者配置文件来修改节点的名称、IP地址、端口等信息。
对于Data节点,需要注意硬盘容量和性能,以便存储和查询大量数据。
在实际部署Elasticsearch集群时,可以采取以下几种方式:
1、单主节点
这种方式在小型集群中比较常见,只有一个Master节点和多个Data节点。优点是简单易用,缺点是Master节点可能成为单点故障,不能容忍Master节点的故障。
2、多主节点
这种方式比较适用于大型集群,可以将Master角色分散到多个节点中,从而避免单点故障。多个Master节点之间需要进行协调和同步,可以使用Zookeeper、Consul等分布式协调工具来实现。
3、安全集群
为了保证Elasticsearch集群的安全性,可以使用TLS/SSL协议来加密通信、使用X-Pack或其他认证/授权工具来控制访问权限。此外,还可以使用备份和恢复工具来备份和恢复集群数据,以防数据丢失。
四、搭建ES集群
三十一、安装elasticsearch-CSDN博客
1、elasticsearch中集群节点有不同的职责划分
2、elasticsearch中的每个节点角色都有自己不同的职责,因此建议集群部署时,每个节点都有独立的角色
3、ES集群的脑裂
脑裂(Split Brain)是分布式系统中的一种问题,特别是在使用主从(Master-Slave)或主(Master-Master)架构的系统中。在Elasticsearch(ES)集群中,脑裂是指集群中的节点之间失去了有效的通信,导致集群被分成两个或多个独立的子集,每个子集认为自己是整个集群的唯一部分。
(1)、这种情况可能会导致以下问题:
数据一致性问题: 不同的子集可能在相同的时间内对相同的数据进行不同的修改,导致数据不一致。
服务可用性问题: 由于脑裂导致集群分裂成多个部分,可能会导致某些部分无法提供服务,影响整体的可用性。
(2)、解决ES集群的脑裂问题,可以考虑以下几个方面:
Quorum设置: 在ES中,通过设置适当的
minimum_master_nodes
参数来避免脑裂。这个参数定义了在一个分片中必须有多少个主节点才能维持集群的稳定性。设置这个参数可以防止脑裂的发生。discovery.zen.minimum_master_nodes: 2
Zen Discovery配置: Zen Discovery是ES用于节点发现和管理的默认插件。通过配置Zen Discovery,可以优化节点之间的通信,减少脑裂的风险。
discovery.zen.fd.ping_timeout: 3s discovery.zen.fd.ping_retries: 3
这些参数可以调整节点之间的心跳检测策略,以更好地处理网络分区的情况。
网络配置: 确保集群节点之间的网络连接是可靠的。网络分区是导致脑裂的一个常见原因。优化网络设置,减少网络故障的可能性。
监控和警报: 设置监控和警报系统,及时检测到脑裂问题。可以使用Elasticsearch内置的监控工具,也可以使用第三方监控工具。
集群规模和架构设计: 考虑集群的规模和架构设计,确保它符合业务需求。有时候,调整节点数量和布局可以减少脑裂的风险。
五、ES集群的分布式存储
ES集群的分布式存储是通过以下两种机制来实现:
1、数据分片
- ES将每个索引分成多个数据片段(shard),每个数据片段都是一个Lucene索引,包含索引中的一部分数据。
- 数据片段可以分散存储在集群中的多台节点上,从而实现数据的分布式存储。
2、副本机制
- ES通过副本机制来保证数据的可靠性和高可用性。
- 每个数据片段都有一份主分片和零个或多个副本分片,副本分片是主分片的完全复制。
- 主分片和副本分片分散存储在不同的节点上,确保了节点故障或不可用时数据的可靠性和高可用性。
- 在ES集群中,当有新的文档被索引或更新时,ES会自动将文档分配到对应的数据片段中,并将数据片段存储到集群中的某个节点上。
- ES还提供了路由机制来优化搜索效率,通过将搜索请求发送到具有相关数据片段的节点处理,从而降低搜索请求的网络传输量、提高搜索效率。
3、算法
4、流程
(1)scatter phase:分散阶段
coordinating node会把请求分发到每一个分片
(2)gather phase:聚集阶段
coordinating node汇总data node的搜索结果,并处理为最终结果集返回给用户
六、ES集群的故障转移
- master宕机后,EligibleMaster选举为新的主节点。
- master节点监控分片、节点状态,将故障节点上的分片转移到正常节点,确保数据安全。