zookeeper脑裂

news/2024/7/7 19:12:41

出现:

       在搭建hadoop的HA集群环境后,由于两个namenode的状态不一,当active的namenode由于网络等原因出现假死状态,standby接收不到active的心跳,因此判断active的namenode宕机,但实际上active并没有死亡。此时standby的namenode就会切换成active的状态,保证服务能够正常使用。若原来的namenode复活,此时在整个集群中就出现2个active状态的namenode,该状态成为脑裂。脑裂现象可能导致这2个namenode争抢资源,从节点不知道该连接哪一台namenode,导致节点的数据不统一,这在企业生产中是不可以容忍的。

解决方案:

      1、添加心跳线。

            原来两个namenode之间只有一条心跳线路,此时若断开,则接收不到心跳报告,判断对方已经死亡。此时若有2条心跳线路,一条断开,另一条仍然能够接收心跳报告,能保证集群服务正常运行。2条心跳线路同时断开的可能性比1条心跳线路断开的小得多。再有,心跳线路之间也可以HA(高可用),这两条心跳线路之间也可以互相检测,若一条断开,则另一条马上起作用。正常情况下,则不起作用,节约资源。

      2、启用磁盘锁。

            由于两个active会争抢资源,导致从节点不知道该连接哪一台namenode,可以使用磁盘锁的形式,保证集群中只能有一台namenode获取磁盘锁,对外提供服务,避免数据错乱的情况发生。但是,也会存在一个问题,若该namenode节点宕机,则不能主动释放锁,那么其他的namenode就永远获取不了共享资源。因此,在HA上使用"智能锁"就成为了必要措施。"智能锁"是指active的namenode检测到了心跳线全部断开时才启动磁盘锁,正常情况下不上锁。保证了假死状态下,仍然只有一台namenode的节点提供服务。

       3、设置仲裁机制

            脑裂导致的后果最主要的原因就是从节点不知道该连接哪一台namenode,此时如果有一方来决定谁留下,谁放弃就最好了。因此出现了仲裁机制,比如提供一个参考的IP地址,当出现脑裂现象时,双方接收不到对方的心跳机制,但是能同时ping参考IP,如果有一方ping不通,那么表示该节点网络已经出现问题,则该节点需要自行退出争抢资源的行列,或者更好的方法是直接强制重启,这样能更好的释放曾经占有的共享资源,将服务的提供功能让给功能更全面的namenode节点。

以上的3种方式可以同时使用,这样更能减少集群中脑裂情况的发生。但是还是不能保证完全不出现,如果仲裁机制中2台机器同时宕机,那么此时集群中没有namenode可以使用。此时需要运维人员人工的抢修,或者提供一台新的机器作为namenode,这个时间是不可避免的。希望未来能有更好的解决办法,能彻底杜绝这类情况的发生吧~
---------------------
作者:柯南侦探
来源:CSDN
原文:https://blog.csdn.net/kenan2012/article/details/80781594?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://www.cnblogs.com/fengli9998/p/9795969.html


http://lihuaxi.xjx100.cn/news/245840.html

相关文章

5 修改request对象变量_【总结】前端5大常见设计模式,代码一看你就懂!

前言今天主要介绍一下我们平常会经常用到的设计模式,设计模式总的来说有23种,而设计模式在前端中又该怎么运用呢,接下来主要对比较前端中常见的设计模式做一个介绍。设计模式的定义设计模式是在面向对象软件设计过程中针对特定问题的简洁而优…

第一章 Mysql 简介及安装和配置

Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。第一节:Mysql 简介 百度百科看下 Mysql简介第二节:Mysql 安装及配置 1&#x…

jquery 1.6以上版本 全选

2019独角兽企业重金招聘Python工程师标准>>> <html xmlns"http://www.w3.org/1999/xhtml"> <head><title>全选&#xff0c;不全选&#xff0c;反选</title><script src"jquery.js" type"text/javascript"…

MySQL:一个死锁分析 (未分析出来的死锁)

最近一个朋友给了我一个死锁 没分析出来搞了好几天&#xff0c;但是把以前出现的一个死锁理了一下流程。这里大概记录一下&#xff0c;并且给出朋友的案例。 RC 隔离级别很少出GAP我已经知道的 继承和分裂会出LOCK_GAP这是代码写死的purge线程可能触发页的分裂融合可能触发内部…

cmakelist官方教程_ROS初级教程 cmake cmakelist.txt 的编写教程

有很多 的时候我们使用别人的程序包。然后添加东西的时候缺少什么东西&#xff0c;会使程序编译不过去&#xff0c;甚至无法运行&#xff0c;接下来介绍一下cmakelist.txt 的每一行的作用。为了以后添加和修改方便。2.整体结构和订购您的CMakeLists.txt文件必须遵循此格式&…

修炼

工作中是会充满着各种吐槽,有时自己也会吐槽各种,像屎一样的代码,屎一样的架构,项目没有管理,一团乱麻.但是始终得面对现实吧,不知道程序员朋友们有没有这种感受,呆过几家公司,但是每家公司的代码总是有那么一些或者是很多的不尽人意,如上面所说的情况种种.据不完全统计国内N多…

linux笔记:压缩解压命令gzip,gunzip,tar,zip,unzip,bzip2,bunzip2

命令名称&#xff1a;gzip功能&#xff1a;压缩文件命令所在路径&#xff1a;/bin/gzip用法&#xff1a;gzip 文件压缩后文件格式&#xff1a;.gz其他&#xff1a;压缩后不保留原文件&#xff1b;只能压缩文件&#xff0c;不能压缩目录命令名称&#xff1a;gunzip功能&#xff…

SQL中的case when then else end用法

2019独角兽企业重金招聘Python工程师标准>>> Case具有两种格式。简单Case函数和Case搜索函数。 --简单Case函数 CASE sexWHEN 1 THEN 男WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASE WHEN sex 1 THEN 男WHEN sex 2 THEN 女 ELSE 其他 END这两种方式&#xf…