1.前言
1.1背景
自从hadoop2版本开始,社区引入了NameNode高可用方案。NameNode主从节点间需要同步操作日志来达到主从节点元数据一致。最初业界均通过NFS来实现日志同步,大家之所以选择NFS,一方面因为可以很方便地实现数据共享,另外一方面因为NFS已经发展20多年,已经相对稳定成熟。
虽然如此,NFS也有缺点不能满足HDFS的在线存储业务:网络单点及其存储节点单点。业界提供了数据共享的一些高可用解决方案,但均不能很好地满足目前HDFS的应用场景。
方案 |
网络单点 |
存储单点 |
备注 |
Mysql HA |
无 |
无 |
数据有丢失风险 |
Drbd+heartbeat+NFS |
无 |
无 |
|
Keepalive+NFS |
无 |
有 |
数据有丢失风险 |
为了满足共享日志的高可用性,社区引入bookkeeper。bookkeeper由yahoo开发,实现了读写高可用性,使HDFS达到真正的高可用性成为可能。
1.2.术语和定义
术语和定义 |
解释 |
Entry |
主节点写的每一个日志对象则为一个entry |
Ledger |
一个ledger由entry集合组成,每一个日志段对应一个ledger,相同日志段追加edits即为向相应的ledger追加entry |
Bookkeeper client |
在HDFS中即为namenode |
Bookie |
一个bookkeeper的存储服务,存储了bookkeeper的write ahead日志,及其数据(ledgers)内容 |
Metadata server |
由zookeeper充当bookkeeper的元数据服务器,在zk中存储了ledger相关元数据,edits元数据,及其bookie相关元数据 |
Ensemble |
即为bookie可用的最小的节点数量;该参数应该大于等于quorums |