Elasticsearch在生产环境必须以集群形式存在,所以很有必要了解Elasticsearch的集群工作原理,那么在介绍集群之前,我们不得不先去了解下基本组件
基本组件
主节点
- 主节点是 Elasticsearch 集群中的一个节点,负责集群的管理任务,如创建和删除索引、分片的分配、节点的加入和退出等。
- 主节点通过使用基于 ZooKeeper 的分布式选举算法(paxos)进行选举,确保在集群启动或主节点故障时,能够选出一个新的主节点。
- 主节点通常只负责管理集群状态,不参与数据的读写操作。这样可以避免主节点的负载过重,同时确保主节点的稳定性。
主候选节
参数:cluster.initial_master_nodes
- 主候选节点是具有成为主节点资格的节点。它们参与主节点的选举过程,如果符合选举条件,可以成为新的主节点。
- 通常情况下,主候选节点也会参与数据的读写操作,以充分利用集群中所有节点的计算和存储能力。
投票配置
- Elasticsearch 集群中主节点选举的过程是通过节点的投票来决定的。当集群启动或主节点发生故障时,集群中的节点将进行投票,以选出新的主节点。
- 投票配置涉及两个关键参数:minimum_master_nodes 和 discovery.zen.minimum_master_nodes。
- minimum_master_nodes 参数用于配置集群中有效投票的最小节点数,以防止脑裂(Split-Brain)问题。脑裂是指一个集群在没有足够的节点参与选举的情况下出现多个主节点的情况,导致数据不一致和集群的不稳定性。
- discovery.zen.minimum_master_nodes 参数是旧版本 Elasticsearch 中用于配置最小主节点数的参数,从 Elasticsearch 7.x 开始已经被弃用,取而代之的是 minimum_master_nodes 参数。
节点发现过程
当一个新节点启动时,它会尝试通过网络连接到已知的初始节点或已经存在的节点,以加入集群。 节点发现可以通过两种方式进行:
单播发现(Unicast Discovery)
新节点通过配置文件中的 discovery.seed_hosts 参数指定初始节点的地址列表。新节点会尝试连接这些初始节点,并加入集群。
多播发现(Multicast Discovery)
新节点会通过组播地址发送加入请求,集群中的其他节点会收到该请求,并回应新节点,以使其加入集群。不过,从 Elasticsearch 7.x 开始,多播发现已经被弃用。
主节点选举(Master Node Election)
- 在 Elasticsearch 集群中,有一个特殊的节点被选为主节点(Master Node)。主节点负责集群的管理和协调工作,例如索引和分片的创建、删除、节点管理等。
- 主节点的选举是自动进行的。当集群启动或现有主节点发生故障,集群中的其他节点会通过选举算法选择一个新的主节点。主节点选举使用的是基于 ZooKeeper 的分布式选举算法(paxos)。
节点加入集群(Node Joining)
参数:discovery.seed_hosts
- 新节点发送加入请求到集群中的任意节点,请求中包含新节点的信息和目标集群的名称。
- 目标节点(接收请求的节点)将验证新节点是否具有有效的集群名称,并检查其它要求,如版本兼容性等。
- 如果验证通过,目标节点会通知集群中的其他节点,表示新节点的加入请求被接受。
- 其他节点接受加入请求,将新节点加入集群,并复制相应的数据分片和副本。