hdfs工作机制
这里对于namenode和secondarynamenode。客户端文件过来先写入日志edits,再写入内存中的FsNamesystem。fsimage是FsNamesystem的持久化存储。但是其数据会落后于FsNamesystem。这个时候secondarynamenode开始工作,每隔一段时间下载edits和fsimage在内存中做合并操作,并且生成新的fsimage到NameNode的fsimage(即做checkpoint)。
在这个系统下,一旦namenode宕机,hdfs系统就再也不能够提供服务。
我们知道web服务器可以用keepalived(维护一个虚拟ip)用一个切换ip的方式来实现高可用。若对namenode也采用这种方式,元数据的同步又会变成一个新的难题。
- CAP定理
在一个分布式系统中, Consistency(数据一致性)、 Availability(可用性)、Partition tolerance(可靠性),三者不可得兼。
当可用性可靠性高,相应的数据一致性就会变差一点。
namenode的safemode
hdfs的高可用
- zookeeper【协调机器,选主从,分布式锁,动态上下线感知,不存业务数据】,
- qjournal【edits日志管理,借助zookeeper做分布式协调】,JournalNode
- zookeeperfailovercontroler(ZKFC),rpc接口调用namenode(知道是否正常工作,工作状态)。两个ZKFC中间有一个共享锁,通过删除zk上的active锁节点通知对方,实现ACTIVE,STANDBY切换。切换的实现也是rpc调用通知状态切换。切换之前需要fence老的active的namenode:1.zkfc
ssh kill -9
,2.若操作1超时或者执行用户自定义的脚本,杀掉active。 完成之后通知切换,并且注册一把active锁。这样宕掉的机维护好后自动变为standby。
standby状态的namenode会负责做checkpoint(像secondarynamenode)