ElasticSearch——详解主从模式,以及主节点的选取算法(一)

这篇具有很好参考价值的文章主要介绍了ElasticSearch——详解主从模式,以及主节点的选取算法(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

详解主从模式,以及主节点的选取算法

Discovery模块负责发现集群中的节点,以及选择主节点
ES支持多种不同Discovery类型选择,内置的实现称为Zen Discovery,其他的包括公有云平台亚马逊的EC2、谷歌的GCE等。本文讨论内置的Zen Discovery实现。
Zen Discovery封装了节点发现(Ping)、选主等实现过程,现在我们先讨论选主流程,在后面的文章中整体性介绍Discovery模块。

设计思想

所有分布式系统都需要以某种方式处理一致性问题。
一般情况下,可以将策略分为两类:如何避免不一致 和 定义发生不一致之后如何协调它们。
后者在适用场景下非常强大,但对数据模型有比较严格的限制。因此本文研究前者,以及如何应对网络故障。

为什么选择主从模式

除主从(Leader/Follower)模式外,另一种选择是分布式哈希表(DHT),可以支持每小时数千个节点的离开和加入,其可以在不了解底层网络拓扑的异构网络中工作,查询响应时间大约为4到10跳(中转
次数),例如,Cassandra就使用这种方案。
但是在相对稳定的对等网络中,主从模式会更好。
ES的典型场景中的另一个简化是集群中没有那么多节点。通常,
节点的数量远远小于单个节点能够维护的连接数,并且网络环境不必
经常处理节点的加入和离开。这就是为什么主从模式更适合ES。

选举算法

在主节点选举算法的选择上,基本原则是不重复造轮子。最好实现一个众所周知的算法,这样的好处是其中的优点和缺陷是已知的。
ES的选举算法的选择上主要考虑下面两种。

Bully算法

Leader选举的基本算法之一。它假定所有节点都有一个唯一的ID,使用该ID对节点进行排序。
任何时候的当前Leader都是参与集群的最高ID节点
该算法的优点是易于实现
但是,当拥有最大ID的节点处于不稳定状态的场景下会有问题。
例如,Master负载过重而假死,集群拥有第二大ID的节点被选为新主,这时原来的Master恢复,再次被选为新主,然后又假死……
ES 通过推迟选举,直到当前的 Master 失效来解决上述问题只要当前主节点不挂掉,就不重新选主
但是容易产生脑裂(双主),为此,再通过“法定得票人数过半”解决脑裂问题

Paxos算法

Paxos非常强大,尤其在什么时机选举,以及如何进行选举方面的灵活性比简单的Bully算法有很大的优势,因为在现实生活中,存在比网络连接异常更多的故障模式。但 Paxos 实现起来非常复杂。

相关配置

与选主过程相关的重要配置有下列几个(并非全部配置)。

discovery.zen.minimum_master_nodes

最小主节点数,这是防止脑裂、防止数据丢失的极其重要的参数。这个参数的实际作用早已超越了其表面的含义。除了在选主时用于决定“多数”,还用于多处重要的判断,至少包含以下时机:

  • 触发选主:进入选主的流程之前,参选的节点数需要达到法定人数。
  • 决定Master:选出临时的Master之后,这个临时Master需要判断加入它的节点达到法定人数,才确认选主成功。
  • gateway选举元信息:向有Master资格的节点发起请求,获取元数据,获取的响应数量必须达到法定人数,也就是参与元信息选举的节点数。
  • Master发布集群状态:发布成功数量为多数。

为了避免脑裂,它的值应该是半数以上(quorum):(master_eligible_nodes / 2) + 1;
该参数可以动态设置:

PUT /_cluster/settings
{
  "persistent" : {
  	"discovery.zen.minimum_master_nodes" : 2
  }
}

discovery.zen.ping.unicast.hosts

集群的种子节点列表,构建集群时本节点会尝试连接这个节点列表,那么列表中的主机会看到整个集群中都有哪些主机。可以配置为部分或全部集群节点。可以像
下面这样指定:

discovery.zen.ping.unicast.hosts:
  - 192.168.1.10:9300
  - 192.168.1.11
  - seeds.mydomain.com

默认使用9300端口,如果需要更改端口号,则可以在IP后手工指定端口。
也可以设置一个域名,让该域名解析到多个IP地址,ES会尝试连接这个IP列表中的全部地址

其他

  • discovery.zen.ping.unicast.hosts.resolve_timeout:DNS 解析超时时间,默认为5秒。
  • discovery.zen.join_timeout:节点加入现有集群时的超时时间,默认为 ping_timeout的20倍。
  • discovery.zen.join_retry_attempts join_timeout:超时之后的重试次数,默认为3次。
  • discovery.zen.join_retry_delay join_timeout:超时之后,重试前的延迟时间,默认为100毫秒。
  • discovery.zen.master_election.ignore_non_master_pings:设置 为 true 时 , 选 主 阶 段 将 忽 略 来 自 不 具 备 Master 资 格 节 点(node.master: false)的ping请求,默认为false。
  • discovery.zen.fd.ping_interval:故障检测间隔周期,默认为1秒。
  • discovery.zen.fd.ping_timeout:故障检测请求超时时间,默认为30秒。
  • discovery.zen.fd.ping_retries:故障检测超时后的重试次数,默认为3次。

选举流程概述

ZenDiscovery的选主过程如下:

  • 每个节点计算最小的已知节点ID,该节点为临时Master。向该节点发送领导投票
  • 如果一个节点收到足够多的票数,并且该节点也为自己投票,那么它将扮演领导者的角色,开始发布集群状态。

所有节点都会参与选举,并参与投票,但只有有资格成为Master的节点(node.master为true)的投票才有效
获得多少选票可以赢得选举胜利,就是所谓的法定人数
在 ES中 , 法定大小是一个可配置的参数。 配置项:discovery.zen.minimum_master_nodes
为了避免脑裂,最小值应该是有Master资格的节点数n/2+1文章来源地址https://www.toymoban.com/news/detail-692623.html

到了这里,关于ElasticSearch——详解主从模式,以及主节点的选取算法(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二叉树的节点个数以及高度详解(附图解)

    本文介绍 二叉树的节点个数以及高度 ,每道题都附有 源码+图解 代码如下(示例): 我们想要实现如图所示的链式二叉树,代码实现如下( 把每一个节点都一一链接起来 ) 代码如下(示例): 我们刚创建完的二叉树中,节点个数有: 5 个,下面是 代码展示 + 递归图解 ! 代

    2024年02月02日
    浏览(37)
  • CentOS 7 使用Docker方式搭建ElasticSearch 7.7.0 三节点集群,并配置elasticsearch-head插件,ik分词器,以及Kibana可视化平台

    IP 角色 172.16.31.191 elasticsearch-1 172.16.31.192 elasticsearch-2 172.16.31.193 elasticsearch-3 并创建相关挂载目录,3台虚拟机都要,如下 还要对文件夹加设置开放权限,如果不开放权限,则会报错无法写入数据的情况,3台虚拟机都要,如下 172.16.31.191 172.16.31.192 172.16.31.193 172.16.31.191 172.16.3

    2024年02月04日
    浏览(48)
  • 故障解析丨Clone节点导致主从故障

    在一次主从复制架构中,由于主节点binlog损坏,导致从节点无法正常同步数据,只能重做从节点;因此使用MySQL 8.0.17开始提供的clone技术进行恢复,恢复后的2天都发生了主从报错数据冲突。 通过解析binlog发现,同一时刻主从节点都在执行同一条语句,因此询问业务是否在主从

    2024年02月08日
    浏览(43)
  • Jenkins 主从节点配置教程(windows10)

    先说:原本想通过SSH来进行两个主机之间的master-slave节点配置,在网上查了大量的教程实践,最终没有成功(过段时间,对Jenkins比较熟悉再来配置吧)。于是换了种方法,如下。 主机A 10.103.87.210 作为Jenkins服务器master主节点; 主机B 10.103.87.101 作为slave 从节点,无需安装Jen

    2024年02月12日
    浏览(50)
  • jenkins主从节点安装及pipeline构建

    通过Jenkins主节点配置的pipeline下发给从节点执行,从而兼容容器化执行 docker-compose.yml 直接docker-compose up -d启动即可 默认装完是2.346.3版本,可以升级到2.4+版本,直接点击首页提示升级即可 相关依赖插件: Docker plugin Docker Commons Plugin Docker API Plugin Docker Pipeline Permissive Script Se

    2024年02月09日
    浏览(43)
  • Linux部署Redis Cluster高可用集群(附带集群节点添加删除以及槽位分配操作详解)

    Redis Cluster 集群是一个由多个主从节点群组成的分布式服务器群,它具有复制、高可用和分片特性。Redis集群不需要sentinel哨兵也能完成节点移除和故障转移的功能。需要将每个节点设置成集群模式,这种集群模式没有中心节点,可水平扩展,需要将每个节点设置成集群模式,

    2024年02月07日
    浏览(47)
  • 【jenkins】主从机制及添加Slave节点操作

    日常构建Jenkins任务中,会经常出现下面的情况: 自动化测试需要消耗大量的 CPU 和内存资源,如果服务器上还有其他的服务,可能会造成卡顿或者宕机这样的情况; Jenkins 平台上除了这个项目,还有其他项目需要构建,如果同一时间构建大量的任务会造成多个任务抢占资源的

    2024年04月10日
    浏览(40)
  • 前端路由hash模式以及history模式详解

    在前后端分离的项目中,前端一般使用 SPA 单页面应用模式来开发项目。那么,什么是 SPA 呢? 单页Web应用(single page web application,SPA),就是只有一张Web页面的应用,是加载单个HTML 页面并在用户与应用程序交互时动态更新该页面的Web应用程序。 我的理解: 单页面应用就是

    2024年02月10日
    浏览(40)
  • 【机器学习】KNN算法及K值的选取

    KNN算法是 有监督学习 中的分类算法,它看起来和另一个机器学习算法K-means有点像(K-means是无监督学习算法),但却是有本质区别的。 KNN的原理就是:当预测一个新的值x的时候,根据它距离最近的K个点是什么类别,来判断x属于哪个类别。 图中绿色的点就是我们要预测的那

    2024年02月02日
    浏览(31)
  • 为什么创建 Redis 集群时会自动错开主从节点?

    哈喽大家好,我是咸鱼 在《一台服务器上部署 Redis 伪集群》这篇文章中,咸鱼在创建 Redis 集群时并没有明确指定哪个 Redis 实例将担任 master,哪个将担任 slave 然而 Redis 却自动完成了主从节点的分配工作 如果大家在多台服务器部署过 Redis 集群的话,比如说在三台机器上部署

    2024年02月10日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包