2-zookeeper、ha
1、zookeeper
①背景:
Zookeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,
但是这些系统往往都存在分布式单点问题。所以,
雅虎的开发人员就试图开发一个通用的无单点问题的分布式协调框架,以便让开发人员将精力集中在处理业务逻辑上。
①定义:Zookeeper是一个开源的分布式协调框架(主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源)
③角色:
1)领导者(Leader) : 处理所有请求,为客户的提供读和写服务
2)跟随者(Follower) : 只提供读服务,有机会通过选举成为leader
3)观察者(Observer): 只提供读服务 ,不参与投票,没机会成为leader
注:由角色可以看出,即便是你对Follower进行写操作,但是它不会写,而是会将请求转发给leader,待leader写成功之后,再同步给其余角色。
④特点:
1) Zookeeper的集群中必须保证半数以上的节点存活才能对外提供服务器
2) Zookeeper在更新数据的时候存在一个特性:原子性 (数据要么所有角色全部更新成功,要么全部失败)
⑤Master选举:
解决问题:单点故障(几个节点向Zookeeper进行注册,Zookeeper通过选举,得出领导者,如果领导者出现故障,重新选举)
选举规则:集群(5个)启动时,当启动到第3个时(过半数),找到这三个节点的myid,id最大的那个就是领导者,其余启动的都是跟随者。
第二次选举规则:第二次选举的时候由于已经存在了数据,则根据节点中数据版本最新的为主。
2、HA
1、QJM
Qurom Journal Manager:解决单点故障问题,即引入双NameNode架构,同时借助共享存储系统来进行元数据的同步。
RPC: 远程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。
Qurom :Zookeeper分布式协调服务。
Journal Node:存储编辑日志,多个Journal Node通过Zookeeper实现共享存储系统。
Standby NameNode:备份状态的NN
Active NameNode: 启动状态的NN
ZKFC(单独进程,每个NN都有):
a.监控NN的健康状态
b.向ZK定期发送心跳,使自己可以被选举,当自己被ZK选为主时,active FailoverController通过RPC调用使相应的NN转换为active
c.自动备援
2、架构原理:
先找到三个节点(Journal Node),然后通过Zookeeper的Qurom(分布式协调服务),实现Journal Node上存储的编辑日志同步。
以上就是一个共享存储系统,而名称集群就是共享存储系统所覆盖的几个节点,每个NN都有一个ZKFC,用以解决单点故障。
运行过程:
①client向Active NN提交操作,先向Active NN中的编辑日志中写。
②如果成功,Active NN会修改元数据,并且Active NN向所有Journal Node请求写编辑日志,只要将请求发给了其中任意一台机器,则表示成功。 (由角色的定义可以看出)
③Standby NameNode 会一直监控JournalNode节点上的编辑日志,当发现编辑日志有所改变后会读取这些编辑日志并合并到自己的namespace中。
④为了尽量减少故障切换所消耗的时间,DataNode会定时向所有NameNode节点发送块的位置信息和心跳
注:外部访问hdfs变成了名称集群(此处命名MyNNS)
注:Journal Node + Qurom <==> 共享存储系统
2-zookeeper、ha的更多相关文章
- ActiveMQ笔记(2):基于ZooKeeper的HA方案
activemq官网给出了3种master/slave的HA方案,详见:http://activemq.apache.org/masterslave.html,基于共享文件目录,db,zookeepe ...
- Spark部署三种方式介绍:YARN模式、Standalone模式、HA模式
参考自:Spark部署三种方式介绍:YARN模式.Standalone模式.HA模式http://www.aboutyun.com/forum.php?mod=viewthread&tid=7 ...
- 2-Zookeeper、HA安装
1.Zookeeper安装 1.解压 zookeeper 到安装目录中/opt/app/zookeeper 中. 2.在安装目录下创建data和logs两个目录用于存储数据和日志: cd /opt/a ...
- hiveserver2和zookeeper的HA搭建(转)
最近公司新项目申请资源,虚拟机资源打开时候使用source login.sh的脚本来进行登录注册,好奇心驱使下看了看里面的shell脚本,使用到了hiveserver2的zookeeper连接,百度一 ...
- (转)Dubbo与Zookeeper、SpringMVC整合和使用
原文地址: https://my.oschina.net/zhengweishan/blog/693163 Dubbo与Zookeeper.SpringMVC整合和使用 osc码云托管地址:http: ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- 【转】Dubbo_与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
原文链接:http://blog.csdn.net/congcong68/article/details/41113239 互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服 ...
- 160906、Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
- Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)转
互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,Dubbo是一个分布式服务框架,在这种情况下诞生的.现在核心业务抽取出来,作为独立的服务,使 ...
随机推荐
- 使用Python爬取代理ip
本文主要代码用于有代理网站http://www.kuaidaili.com/free/intr中的代理ip爬取,爬虫使用过程中需要输入含有代理ip的网页链接. 测试ip是否可以用 import tel ...
- 2018-北航-面向对象-前三次OO作业分析与小结
基于度量的程序结构分析 由于平时使用了NetBrains出品的IDEA作为IDE,在分析程序的时候我使用了IDEA的插件Metrics Reloaded.然而在使用时发现不懂得很多分析项目的含义,因此 ...
- mysql varchar存储最大
utf-8的汉字 3个字节,varchar()括号中的数字是可存储的最大字符数,但是总和不超过65535个字节,这是行的size限制的,除以3差不多21800多,算上其他列等信息,如果用最大的话设置2 ...
- python基础12_匿名_内置函数
一个二分查找的示例: # 二分查找 示例 data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35, 36, ...
- JDK8源码之Arrays
Arrays是一个工具类,包含了各种数组的操作方法,包括排序.搜索.转化,在JDK1.8中新增了一些方法,对原有一些方法的并发性做了增强,极大地提高了原有方法的性能. 1.rangeCheck(int ...
- 关于第一次在IED(MyEclipse)部署Maven时,pom.xml头部报这样的错---org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache.maven.archiver.MavenArchiveConfiguration)
rg.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.apache ...
- iOS 弹幕制作
离职的最后一天,在公司学习下弹幕的制作.基于OC. 主要思路: 1.首先建一个弹幕类BulletView,基于UIView,然后在该类上写个UIlabel,用于放置弹幕文字,然后前端放置一个UIIma ...
- easyui,文件引用
- 印象笔记无法连服务器(internet explore的问题)
https://www.zhihu.com/question/20214497?sort=created
- spring jpa Pageable 分页之---多条件排序
Sort sort = new Sort(Direction.ASC, "sort").and(new Sort(Direction.DESC, groupField));//排序 ...