0
点赞
收藏
分享

微信扫一扫

快速上手:使用Hexo搭建并自定义个人博客

DT_M 03-12 10:30 阅读 1

一、ES 集群是基于什么协议

ElasticSearch集群是一个P2P类型(使用gossip协议)的分布式系统除了集群状态管理以外,其他所有的请求都可以发送到集群内任意一台节点上,这个节点可以自己找到需要转发给哪些节点,并且直接跟这些节点通信。所以,从网络架构及服务配置上来说,构建集群所需要的配置极其简单。

在Elasticsearch 2.0之前,无阻碍的网络下,所有配置了相同cluster.name的节点都自动归属到一个集群中。2.0版本之后,基于安全的考虑避免开发环境过于随便造成的麻烦,从2.0版本开始,默认的自动发现方式改为了单播(unicast)方式。配置里提供几台节点的地址,ES将其视作gossip router角色,借以完成集群的发现。

请注意,虽然ElasticSearch集群的构建和配置相对简单,但在实际部署和运行过程中,仍需要考虑到诸多因素,如节点数量、网络配置、数据安全等,以确保集群的稳定性和性能。

二、什么是gossip协议 

Gossip协议是一种分布式系统中常用的通信协议,主要用于节点之间传播信息。它的设计目标是高效、可靠地将消息传递给所有节点,并保证最终一致性。Gossip协议的核心思想是通过节点之间的随机通信,将信息在整个网络中传播开来,从而达到全局共识的目的。

具体来说,每个节点持有一个消息队列,用于存储待传播的消息。被选中的节点在收到消息后,会继续将消息传播给其他节点,以此类推。这种方式使得信息能够以一种去中心化的方式在网络中扩散,每个节点都有能力接收并转发消息。虽然这个过程可能需要一定的时间,但能够保证最终所有节点都会收到消息,因此它是一个最终一致性协议。

Gossip协议具有可扩展性,一般需要O(logN)轮就可以将信息传播到所有的节点。同时,由于它采用异步通信方式,虽然可能带来消息冗余,但也提高了系统的容错性和鲁棒性。

在实际应用中,Gossip协议被广泛用于数据库复制、信息扩散、集群成员身份确认、故障探测等场景。例如,Redis Cluster、Consul、Apache Cassandra等系统都使用了Gossip协议。

三、Gossip协议和Paxos协议有什么区别

Gossip协议和Paxos协议在分布式系统中各有其独特的应用和特性,它们在多个方面存在显著的差异:

1、目标一致性

  • Paxos协议:其目标是强一致性。它确保在分布式系统中的各个节点能够达成一致的决策,并且在一定条件下能够容忍节点的故障。
  • Gossip协议:它的目标是最终一致性。这意味着在一段时间内,虽然节点间的数据可能暂时不一致,但最终所有节点的数据都会收敛到相同的状态。

2、通信方式

  • Paxos协议:它通常涉及更多的节点间的直接通信,特别是在进行领导者选举和决策的过程中。
  • Gossip协议:则是一种去中心化的通信方式,节点间通过随机的方式传播信息,不需要明确的领导者或中心协调者。

3、数据同步与扩散

  • Paxos协议:更适用于需要快速且一致地决策的场景,例如分布式数据库的写操作。
  • Gossip协议:由于其最终一致性的特性,它更适用于数据扩散、集群成员身份确认、故障探测等场景。它不需要所有的节点都实时在线,只需保证最终所有的节点都能收到信息。

4、消息数量与开销

  • Gossip协议:可能会产生大量的消息,因为信息是通过随机的方式在网络中传播的。虽然这增加了网络的负担,但也提高了系统的容错性和鲁棒性。
  • Paxos协议:在消息数量和开销方面可能更为可控,因为它通常涉及更直接的节点间通信。

5、应用场景

  • Paxos协议:通常用于那些需要严格保证一致性的场景,例如金融系统的交易处理。
  • Gossip协议:由于其最终一致性和容错性,它更适用于那些对实时性要求不那么高,但对数据传播和容错性有需求的场景,例如社交媒体平台的消息传播。

总的来说,Paxos协议和Gossip协议各有其优势和适用场景。选择哪种协议取决于具体的应用需求、网络环境和性能要求。

 四、ES 是master节点和数据节点之间的区别

master节点主要负责维护整个集群的相关工作,这是通过选举算法选举出来的。一个集群中只有一个节点可以成为master节点,但可以有多个节点参与选举过程。

master节点,也称为主节点,主要负责维护集群的元数据和状态信息。这包括管理集群范围内的所有变更,如创建和删除索引、增加或删除节点等。此外,master节点还负责集群的健康状态监测和节点的上下线管理。

数据节点则主要负责数据的存储、修改、删除和查询操作。数据节点调用Lucene库进行索引操作,确保数据的快速检索和高效存储。由于数据节点对内存和I/O消耗较大,因此在配置时需要特别关注其资源需求。在优化时,需要监控数据节点的状态,当资源不够时,需要在集群中添加新的数据节点以分担负载。

master节点和数据节点在Elasticsearch集群中各自承担不同的职责,共同维护集群的正常运行和数据的安全性。master节点负责管理和维护集群的元数据和状态,而数据节点则专注于数据的存储和检索操作。这种分工合作的方式使得Elasticsearch集群能够高效、稳定地处理大规模数据。

五、ES节点之间网络延迟产生的影响

当Elasticsearch集群中有3个master节点,并且这些节点之间的延迟比较大时,可能会出现一系列问题。以下是可能出现的一些情况:

  1. 选举问题:在Elasticsearch中,master节点负责维护集群的元数据,例如索引的创建、删除和分片的分配等。当master节点之间的延迟较大时,可能会影响master节点的选举过程。在正常情况下,如果master节点出现故障,其他节点会通过选举来选出新的master节点。但是,延迟可能导致选举过程变得不稳定或耗时,甚至可能导致脑裂(split-brain)现象,即集群中出现多个master节点,造成数据不一致和混乱。

  2. 集群状态不一致:由于master节点之间延迟较大,它们之间的通信可能会变得不可靠,导致集群状态信息无法及时同步。这可能导致一些节点上的数据状态与集群整体状态不一致,进而影响到集群的正常运行。

  3. 分片分配问题:当master节点之间的延迟较大时,它们之间的通信可能变得缓慢,导致分片分配决策无法及时达成一致。这可能导致分片无法正确分配或重新分配,进而影响到数据的可用性和查询性能。

  4. 写入操作受阻:如果master节点之间的延迟导致选举过程不稳定或耗时,那么在选举期间,集群可能无法接受新的写入操作,直到新的master节点被选举出来并稳定工作。这会导致写入操作的延迟和可能的失败。

  5. 节点离线与恢复问题:当节点之间的延迟较大时,节点可能会错误地认为其他节点已经离线,并尝试进行恢复操作。这可能导致不必要的资源浪费和性能下降。

为了解决这些问题,可以考虑以下策略:

  • 优化网络:确保master节点之间的网络连接稳定且延迟较低。这可能需要优化网络配置、增加带宽或使用更可靠的网络设备。
  • 增加master节点数量:增加master节点的数量可以提高集群的容错性和稳定性,减少因节点故障或延迟导致的问题。
  • 调整选举策略:根据集群的实际情况,调整选举策略的参数,例如最小主节点数(discovery.zen.minimum_master_nodes),以确保在节点故障或延迟时能够更稳定地进行选举。
  • 监控与告警:建立有效的监控和告警机制,及时发现并解决网络延迟、节点故障等问题,确保集群的稳定运行。

请注意,以上只是一些可能出现的问题和策略建议,具体的解决方案需要根据集群的实际情况和需求进行定制。

参考


 Quorum-based decision making | Elasticsearch Guide [8.12] | Elastic

举报

相关推荐

0 条评论