《HBase不睡觉》读书笔记==第二章的零零散散

《HBase不睡觉书》杨曦 著 清华大学出版社
声明:如果我侵犯了任何人的权利,请联系我,我会删除
欢迎高手来喷我

1. 非HA模式、单点故障、脑裂现象、zkfc

1.1 非HA模式

      HA是Highly Available缩写,是双机集群系统简称,指高可用性集群,是保证业务连续性的有效解决方案,一般有两个或两个以上的节点,且分为活动节点及备用节点。HA模式是用来防止单点故障的。

1.2 单点故障

      通俗地说:单点故障就是你的系统太依赖于某一个节点,以至于只要该节点宕掉了,就算整个集群的其他节点都是好的,你的集群也相当 于整体瘫痪。单点故障问题一般会出现在集群的元数据存储节点上,这 种节点一般一个集群就一个,它一旦坏了,整个系统就不能正常使用 了。

1.3 脑裂现象

      Kill掉非正常的namenode的目的就是防止脑裂现象。因为zkfc判断 namenode是否宕机是基于超时机制的。如果当时网络状况不好,或者机 器负载过重造成响应很慢,也有可能被判断为宕机。一旦判断该机为宕 机,zkfc会立即去将另外一个standby的namenode设置为active状态。 此时由于之前那台active的namenode有可能进程还活着,客户端还在往 里面写数据,如果不将其kill掉,等这台被误认为是已经宕机的 namenode恢复了工作后,就会造成系统中同时有两个namenode在工作, 数据就混乱了,这就是脑裂现象。
在这里插入图片描述

1.4 zkfc

      要防止脑裂现象的发生,首先要有一个机制来自动检测哪台 namenode宕机了。Hadoop zkfc就是用于自动检测namenode是否宕机的服务。如果宕机就自动将另一个standby状态的namenode启动,并将当前已宕机的namenode上的namenode进程杀死(kill -9)以防止脑裂现象。
Hadoop有一个zkfc进程,这个进程用户跟ZooKeeper通信,然后根 据通信的结果来进行故障切换(failover)。所以,实际上是这个进程 在帮我做自动的failover。首先,在两个namenode上都执行以下命令:
在这里插入图片描述

1.5 Hadoop怎么避免单点故障问题

      Hadoop的单点故障一般会出在namenode(namenode的原理可以参考https://blog.csdn.net/qq_26222859/article/details/79375569)上。
Hadoop的做法是,同时启动两个namenode:其中一个工作,另一 个总是处于后备机(standby)状态,让它只是单纯地同步活跃机 (active)的数据,当活跃机宕掉的时候就可以自动切换过去。这种模式称为HA模式。
HA模式下不能用<namenode主机>:<端口>的模式来访问 Hadoop集群,因为namenode主机已经不是一个固定的IP了,而是采用 的方式来访问,这个serviceid存储在ZooKeeper里面。关于ZooKeeper和HBase的关系,可以翻看我的上一篇文章:初始HBase有几张图片可以很好的说明,简单说来就是 ZooKeeper是一个轻量级的分布式架构集群,而这个集群干的事情就是维护你的节点。

2. ZooKeeper不等不说

2.1 HBase自带ZooKeeper

      因为Base没了ZooKeeper不能活。HBase的设计架构中,ZooKeeper 是一个必不可少的组成部分。HBase都是依靠ZooKeeper来维护节点的, 换句话说==“无ZooKeeper不HBase”==。
HBase的基本架构如图:
在这里插入图片描述

  • HBase中有一个Master用来管理元数据,它就像Hadoop中的 namenode
  • RegionServer是用来存储数据的,相当于Hadoop中的datanode
  • ZooKeeper负责维护HBase的所有节点。如果ZooKeeper宕掉了, 你一个节点都连不上
  • 生产环境下的完全部署模式是基于HDFS的,使用HDFS来存储数 据。HBase甚至可以不用依赖HDFS来部署,在单机模式下直接使 用普通文件系统来存储数据,虽然这只是玩玩,但至少说明了 HBase离开HDFS还是可以生存的
  • 在使用中你会发现,就算把Master关掉了,你也一样可以从HBase 中读取数据和写入数据,只是不能建表或者修改表。这是因为客户端 取数据的时候只是跟ZooKeeper和RegionServer交互。如果你把 ZooKeeper关掉了,整个集群就一点都连不上了。所以,ZooKeeper甚至 比Master还重要。
2.2 ZooKeeper进程的名字
  • 如果HBase用的是自己的ZooKeeper,那你在jps中看到的ZooKeeper 名字是HQuorumPeer
  • 如果你使用的是外部的ZooKeeper集群,那么它的 名字叫QuorumPeer或者QuorumPeerMain
        是否开启自带的ZooKeeper由conf/hbase-env.sh中定义的 HBASE_MANAGES_ZK变量定义:
    这个变量默认为true,也就是开启自带的 ZooKeeper。如果你不希望让HBase开启自带的ZooKeeper(一般生产环 境都不会用HBase自带的ZooKeeper),那么请将这行代码的注释去掉 或者修改为false:在这里插入图片描述
    (在vim中查找信息是,在命令状态 输入 /关键字,然后回车,按一下n查找下一处
    在这里插入图片描述
2.3 ZooKeeper集群节点个数奇数个最好

节点越多容灾能力就越强。不过节点数一定要是奇数个,虽然偶数 个也不是不能启动,但是不建议使用偶数个节点。有以下两个原因:

  • ZooKeeper采用仲裁制度来决定大多数的操作是否成功。比 如,当过半的节点认为该写入操作是成功的,那么该写入操作就是成功的
  • ZooKeeper的容灾机制定义了:集群中只要有过半的机器是正 常工作的,那么整个集群对外就是可用的。如果你有5个节点,那么有2 个节点宕掉,你的集群依然可以运行。这时我们称该集群的容灾能力是 2。就算你多部署了一个节点,目前的节点数为6,那么只要3个节点宕 掉整个集群就宕掉了,所以你的集群的容灾能力还是只有2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值