分布式脑裂问题分析

2023-05-16

1 "脑裂"定义

在一个高可用系统中,当联系着的节点断开联系时,本来为一个整体的系统,分裂成两个独立节点,两个节点开始争抢共享资源造成系统混乱、数据损坏的现象,成为“脑裂”。

2 "脑裂"成因

主要原因: 心跳检测做准备切换时的“不确定性”

当网络原因,导致心跳检测超时,主备切换的情况下,此时slave已经开始提供服务。但是后续之前被判定“死”的master由于网络恢复重新“复活”,此时系统存在两个“主”,发生脑裂问题;

3 "脑裂"解决思路

解决脑裂问题,有三种常用思路,分别如下:

  • 设置仲裁机制
  • lease机制
  • 设置隔离机制

下面将分别对三种方案展开说明;

3 .1 仲裁机制

设置仲裁机制的方案通常是设置一个第三方检测服务器,当slave确定准备接管master 时候,manitor会ping以下master,如果master未回复,则判定其死亡!

同时master对外提供服务时候,monitor也会定时ping master和slave,保证出现异常情况下,暂停服务器业务操作!

在这里插入图片描述

仲裁机制的主要问题是monitor存在高可用性能瓶颈!

3.2 分布式授权承诺机制

假定slave已经提供服务,那么对应服务器获得了颁发的lease。假设master仍然在提供服务,则lease必然是过期的,因此请求失效,因此请求也必然失效。

在请求频繁失效情况下,可以通过监控点触发报警,自动或者人工介入,促使老master转换成slave;

3.3 隔离机制

隔离机制参考引自文章:

隔离机制

这里提出三种层面隔离方式,解决脑裂问题:

  • 共享存储fencing:确保只有一个Master往共享存储中写数据。
  • 客户端fencing:确保只有一个Master可以响应客户端的请求。
  • Slave fencing:确保只有一个Master可以向Slave下发命令。

Hadoop公共库中对外提供了两种fenching实现,分别是sshfence和shellfence(缺省实现),其中sshfence是指通过ssh登陆目标Master节点上,使用命令fuser将进程杀死(通过tcp端口号定位进程pid,该方法比jps命令更准确),shellfence是指执行一个用户事先定义的shell命令(脚本)完成隔离。

4 本文小结

“脑裂问题”的本质是分布式环境由于网络不稳定,导致了分布式环境主备切换后,双主同时存在的问题,规避该问题的核心是隔离----保证系统识别得到唯一主,剔除掉失效主节点;

  • 仲裁机制是引入第三方检测器的方式,定时检测保障主存活;
  • lease方式则是以认证凭据方式,保障切换后,老主失效;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分布式脑裂问题分析 的相关文章

  • Golang 报错 | 操作mysql提示busy buffer

    背景说明 在使用github com go sql driver mysql 驱动操作数据库 xff0c 获取信息时报错 代码块 span class token keyword func span span class token fun
  • Python | 打印进度条的三种方法

    不使用模块 xff0c 手动打印进度条 span class token keyword def span span class token function Run span span class token punctuation sp
  • Nginx配置禁止IP访问

    时间背景 使用Nginx代理服务 xff0c 请求先到前端的代理服务器 xff0c 然后由代理服务器的nginx转发请求到后端的服务器 开始默认没有对IP访问做限制 xff0c 现在要求禁止IP访问 xff0c 大概是一个这样的架构 xff
  • git如何使用tag

    简介 我们可以创建一个tag来指向软件开发中的一个关键时期 xff0c 比如版本号更新的时候可以建一个 v2 0 v3 1 之类的标签 xff0c 这样在以后回顾的时候会比较方便 tag的使用很简单 xff0c 主要操作有 xff1a 查看
  • linux服务器最大支持连接数

    当我们被问到一台linux服务器最多可以支持多少连接时 xff0c 很多人第一反应是65535个 xff0c 因为端口是65535个 xff0c 还有人说受到TCP连接里四元组的空间大小限制 xff0c 那么到底是多少 xff1f 首先解释
  • Linux提示空间已满,找不到大文件

    当我们发现磁盘快满了 xff0c 然后删除某些服务的日志文件 xff0c 删除后发现磁盘空间仍然被占用 xff0c 但我们使用 du sh 命令 xff0c 发现目录下没有大文件 xff0c 这时我们应该考虑 xff0c 删除日志文件时 x
  • passwd修改用户密码报错

    故障现象 xff1a 1 修改密码时报错 passwd Authentication token manipulation error 2 添加用户报错 xff1a unable to lock password file 分析问题 xff
  • /etc/bashrc、/etc/profile、.bashrc、.bash_profile这几个文件的关系是什么呢?

    我们平时在配置一些环境变量的时候 xff0c 经常会遇到这几个文件的修改 xff0c 有的文档是修改 etc bashrc xff0c 而有的文档则是要求修改 bashrc xff0c 那么这几个文件到底有什么关系呢 xff1f 首先说一下
  • RouterOS系统安装和简单配置

    1 安装RouterOS系统 VMware虚拟机 xff0c 新建一个其他系统的虚拟机 xff0c 类似安装Linux系统 xff0c 挂载系统镜像 xff0c 根据提示一步步完成安装 选择安装的功能包 选择安装的功能包后 xff0c pr
  • nginx-upload-module模块使用

    Nginx是没有该模块的 xff0c 需要重新编译Nginx xff0c 添加nginx upload module模块 下载nginx upload module模块 xff1a https github com fdintino ngi
  • SecureCRT Mac版安装并激活

    先下载SecureCRT和破解文件 默认下载到了当前用户的 下载 目录中 在 Finder 中 打开 scrt 7 3 0 657 osx x64 dmg 并将 SecureCRT复制到 应用程序 中 这时SecureCRT的路径是 App
  • Python 报错 | 导入celery模块报错

    环境 xff1a Python3 7 celery4 1 0 进入python交互环境 xff0c 导入celery模块正常 xff0c 引用Celery的方法报错 xff1a liangkai vm span class token pu
  • yy欢聚时代软件测试笔试题

    1 xff0c 10111001对应的八进制 xff0c 十六进制和十进制 2 xff0c 常见的数据库有那些 xff1f 3 xff0c 常见的协议有哪些 xff1f 4 xff0c 代码运行结果 xff0c c 43 43 题目 xff
  • linux之conntrack连接跟踪

    linux之conntrack连接跟踪 conntrack连接跟踪 连接跟踪 xff08 CONNTRACK xff09 xff0c 顾名思义 xff0c 就是跟踪并且记录连接状态 Linux为每一个经过网络堆栈的数据包 xff0c 生成一
  • mdk arm开启FPU报错问题

    问题描述 xff1a mdk使用arm complier v6 开启FPU报错问题 问题分析 xff1a 如果是使用arm v5版本编译器 xff0c 按照下述步骤进行配置 xff0c 然后编译是没有问题的 xff1a 在C C 43 43
  • linux之yum下载rpm包离线安装conntrack-tools

    如何下载rpm包 xff0c 进行离线安装 文章目录 前言一 yum下载rpm包离线安装方式方法一 使用yum 的 downloadonly 插件下载方法二 使用yumdownloader下载方法三 使用repotrack下载所有依赖 二
  • docker离线安装方法

    docker离线安装方法 下载地址 xff1a https download docker com linux static stable x86 64 参考文档 xff1a https docs docker com engine ins
  • Linux使用chrony让局域网内的服务器时间同步

    Linux使用chrony让局域网内的服务器时间同步 在生产环境经常会因为时间的问题出现过问题 xff0c 例如应用节点和数据存节点时间不一致 xff0c 造成检索不到数据的问题等 在现在不管是公有云 私有云还是混合云等在建设过程中 xff
  • linux将本地库JAR批量导入到Nexus3.x

    linux将本地库JAR批量导入到Nexus3 x 文章目录 linux将本地库JAR批量导入到Nexus3 x1 问题描述2 搭建Nexus私服2 1 官网下载 xff1a 2 2 上传并解压2 3 修改默认端口2 4 修改内存分配 xf
  • 如何下载npm离线安装包

    如何下载npm离线安装包 如何将本地nodejs库 xff0c 放入到nexus的npm库 在代码工程目录使用 npm install 安装 package json 所依赖的文件 xff0c 并依赖下载到 node modules 目录

随机推荐

  • 批量下载npm离线安装包

    批量下载npm离线安装包 上篇讲到如何下载npm离线安装包的几种思路 https blog csdn net xinle0320 article details 124285708 1 批量下载npm离线安装包 三种方式 通过 packag
  • Fiddler抓取Java应用HTTP请求报文

    Fiddler抓取Java应用HTTP请求报文 1 监听Tomcat的http请求报文 在catalina bat添加一行 xff08 proxyPort的值为fiddler端口号 xff09 span class token builti
  • NPM软件包发布到Nexus

    NPM软件包发布到Nexus 文章目录 1 Linux安装nodejs环境2 创建镜像仓库3 添加nexus权限4 设置镜像仓库地址5 发布单个包6 发布tgz包7 批量发布npm包到私有仓库8 查看nexus的npm仓库9 测试 1 Li
  • docker安装minio

    docker安装minio 1 拉取镜像2 查看镜像3 创建目录4 指定控制台端口启动4 查看日志5 登录控制台页面6 Create Bucket7 浏览文件 1 拉取镜像 span class token function docker
  • docker minio设置永久免密下载链接

    docker minio设置永久免密下载链接 上篇 docker安装minio 前言 minio分享文件的链接 xff0c 最多支持分享七天 通过minio client管理存储桶策略的方式实现文件链接永久有效 这样就可以免密搭建个人图片等
  • printf重定向的相关总结

    简介 实现printf重定向有多种方式 xff0c 下面一一介绍 linux环境下 虽然linux系统的默认标准输出设备是显示器 xff0c 但是我们可以把printf打印输出的内容重定向到其他设备或文件 方法如下 xff1a 方法1 xf
  • 安装ES7.x集群

    安装ES集群 文章目录 安装ES集群一 环境准备1 1 准备三台Linux主机1 2 ES集群环境规划1 3 修改 etc hosts 二 下载部署包2 1下载jdk部署包2 2下载ES相关部署包 三 环境安装3 1安装JDK8环境3 1
  • es7.x升级log4j版本

    es7 x升级log4j版本 下载log4j2 18 0 下载地址 xff1a https dlcdn apache org logging log4j 2 18 0 apache log4j 2 18 0 bin tar gz 其他版本
  • 使用logstash迁移ES1.x数据到ES7.x

    使用logstash迁移ES1 x数据到ES7 x tar span class token operator span zxvf logstash span class token operator span span class tok
  • ES创建索引模板设置分片和副本数及时间格式问题

    创建索引模板设置分片和副本及时间格式问题 一 创建索引模板 PUT template event template default span class token punctuation span span class token str
  • es7 扩展词库

    elasticsearch 7 x x 扩展ik分词词库 支持mysql 热部署 https blog csdn net laow1314 article details 124236262 Elasticsearch 7 X Ik源码解读
  • es相关参数优化

    es相关参数优化 生产环境 jvm参数资源可以调整大一些 xff0c 系统的内存的一半给ES服务 xff0c 最大不超过32G xff0c 剩下的资源留给底层Lucene缓冲 xff1b 独立部署ES服务 xff0c 可以使用64G内存的节
  • ROS中rqt_graph报错节点图空白问题

    ROS中rqt graph报错节点图空白问题 我的环境配置 xff1a 1 VM ware虚拟机安装的ubuntu系统20 04 2 ROS版本是noetic 问题如下 xff1a 最近在学习ROS过程中遇到了rqt graph报错的问题
  • ROS中Gazebo无响应解决办法

    标题ROS中Gazebo无响应解决办法 在终端输入gazebo没有反映 xff0c 进行下面两句操作 首先输入下面的代码 gazebo span class token operator span verbose 观察到报错显示原因为有另一
  • 快速平方根倒数算法深度理解

    快速平方根倒数算法深度理解 快速平方根倒数算法是什么 xff1f 简单来说这个算法避开了开方和除法运算快速实现了 y 61 1 x
  • Ubuntu 14.04安装openwrt

    OpenWRT 编译环境搭建 配置编译环境 必须使用非root用户 xff0c ArchLinux需要创建新用户 安装依赖包 Ubuntu 14 04 必选 apt get install asciidoc bash bc binutils
  • MDK debug时出现*** error 65: access violation at

    简介 本文针对的是访问内存权限的问题 xff0c 其他问题暂时不讨论 问题描述 使用mdk arm调试keil工程的时候遇到错误 error 65 access violation at 0xE0042004 no write permis
  • CreateSemaphore函数

    创建或打开命名或未命名的信号量对象 要指定对象的访问掩码 xff0c 请使用CreateSemaphoreEx函数 语法 HANDLE WINAPI CreateSemaphore xff08 In opt LPSECURITY ATTRI
  • 什么是underlay和overlay?

    1 什么是underlay和overlay xff1f 常规解释 xff1a underlay 现实的物理基础层网络设备 数据中心基础转发架构的网络 以太网最初设计的时候就是一个分布式的网络架构 xff0c 没有中心控制节点 xff0c 网
  • 分布式脑裂问题分析

    1 34 脑裂 34 定义 在一个高可用系统中 xff0c 当联系着的节点断开联系时 xff0c 本来为一个整体的系统 xff0c 分裂成两个独立节点 xff0c 两个节点开始争抢共享资源造成系统混乱 数据损坏的现象 xff0c 成为 脑裂