0
点赞
收藏
分享

微信扫一扫

Elasticsearch集群类型和选举策略

凉夜lrs 2022-03-12 阅读 40

集群类型

空集群
    空集群是集群的节点只含有一个节点数的集群部署策略,当集群的节点只含有一个,该节点默认为主节点,所有的索引分片都是会部署到该节点上,如果索引的分片策略设置副本数时,此时的集群节点健康状况是会出现yellow状态,即副本的数据不可用,副本分片状态为unassigned,没有被分配到任何节点。
多节点集群
    多节点集群实际上是内部可通信的局域网中含有相同cluster.name配置的节点组合而成,他们共同承担数据和负载的压力,当有节点加入的时候或集群节点移除的时候,集群将会重新的平均分配所有的数据压力

二、选举和发现策略

  1. 触发选举的条件
  1. 集群启动初始化
  2. 集群的Master崩溃的时候
  3. 任何一个节点发现当前集群中的Master节点没有得到n/2 + 1节点认可的时候,触发选举
  1. 选举和集群发现的配置参数

ES配置两个重要参数来发现和形成群集,以便群集中的节点可以相互发现并选择主节点。

discovery.seed_hosts

开箱即用,无需任何网络配置,Elasticsearch将绑定到可用的环回地址,并扫描本地端口9300至9305,以连接同一服务器上运行的其他节点。这种行为提供了一种自动集群体验,而无需进行任何配置。如果要与其他主机上的节点组成群集,请使用discovery.seed_hosts设置。此设置提供群集中符合主节点资格且可能处于活动状态且可联系的其他节点的列表,以作为发现过程的种子。此设置接受群集中所有符合主节点条件的节点的YAML序列或地址数组。每个地址可以是IP地址,也可以是通过DNS解析为一个或多个IP地址的主机名。

cluster.initial_master_nodes

第一次启动Elasticsearch群集时,群集引导步骤将确定在第一次选举中计票的主合格节点集。在测试模式下,在未配置发现设置的情况下,默认由节点自身自动执行。但自动引导本质上是不安全的,所以在生产模式下启动新集群时,必须明确列出符合条件的主节点,这些节点的投票应该在第一次选举中计算。

3、 ES具体选举过程

 (1)节点第一次启动后取cluster.initial_master_nodes 配置,若能连接则取则取其中之一选举为master,否则尝试localhost:9200。Elasticsearch 支持同一个主机启动多个节点
  (2)ES请求的response会包含该节点的基本信息以及该节点认为的master节点。
  (3)选举开始,先从各节点认为的master中选,规则很简单,按照id的字典序排序,取第一个(最新节点)。
  (4)如果各节点都没有认为的master,则从所有节点中选择,规则同上。如果节点数达不到过半的限制,则循环上述过程,直到节点数足够可以开始选举。
  (5)最后选举结果是肯定能选举出一个master,如果只有一个local节点那就选出的是自己。master会定期扫描集群所有的成员,将失活的成员移除集群,同时将最新的集群状态发布到集群中,集群成员收到最新的集群状态后会进行相应的调整,比如重新选择主分片,进行数据复制等操作。
  (6)其他节点判定在集群当前状态下如果自己不可能是master节点,首先会禁止其他节点加入自己,然后投票选举出准Master节点。同时监听master发布的集群状态(MasterFaultDetection机制),如果集群状态显示的master节点和当前节点认为的master节点不是同一个节点,那么当前节点就重新发起选举。非Master节点也会监听Master节点进行错误检测,如果成员节点发现master连接不上,重新加入新的Master节点,如果发现当前集群中有很多节点都连不上master节点,那么会重新发起选举。

三、常见问题

1、脑裂现象

Elasticsearch支持任意数目的集群(1-N),通过一个规则,只要所有的节点都遵循同样的规则,得到的信息都是对等的,选出来的主节点肯定是一致的。但分布式系统的问题就出在信息不对等的情况,这时候很容易出现脑裂(Split-Brain)的问题,大多数解决方案就是设置一个quorum值,要求可用节点必须大于quorum(一般是超过半数节点),才能对外提供服务。而 Elasticsearch 中,这个quorum的配置就是 discovery.zen.minimum_master_nodes,目前使用版本7.11已移除该配置。当前版本选举,随着节点的添加或删除,Elasticsearch 会自动更新集群的选举配置,以保持最佳的容错级别。选举配置是一组符合主节点条件的节点,在做出决策时,它们具有投票权。通常,选举配置包含集群中所有符合主节点条件的节点。仲裁就是指选举配置中的多数节点:所有集群状态更新都需要选举配置中超过半数节点同意。由于选举配置和仲裁由系统负责管理,所以可以避免任何可能导致数据丢失的错误配置。

2、新增或移除节点

在向集群添加新的符合主节点条件的节点时不再需要任何特殊的仪式,只需配置新节点,让它们可以发现已有集群,并启动它们。当有新节点加入时,集群将会自动地调整选举配置。只要没有同时停止一半或更多符合主节点条件的节点,即使移除节点也是安全的。所以在实际操作中,如果需要停止一半或更多符合主节点条件的节点,或者你有更复杂的伸缩和编排需求,可以使用 API 直接调整选举配置。或者通过依次停止节点来达到目的

举报

相关推荐

0 条评论