hadoop的集群模式大概有以下几种
1.本地
2.伪分布式
3.完全分布式
4.HA 模式
本地
在单机上运行,读取本地文件系统
伪分布式
- 在单机上运行
- 使用分布式文件系统
- 单机上启动nameNode、dataNode、secondary nameNode
- 集群只有一个节点,因此副本为1
完全分布式
- 在多台机器上运行
- nameNode、dataNode、secondary nameNode 在不同机器上启动
- 集群有多个节点,副本不唯一
- 缺点:非高可用
HA 模式
- 相比完全分布式,主要体现在高可用方式
- 多台nameNode,保证主nameNode挂掉后有机器马上替换
- 大部分生产实践用这种方式
HA 的实现逻辑
先看图
数据一致
HA 采用的是主备模式,即一台有多台nameNode,其中只有一台是对外提供服务的(主),其他的机器只有主挂了才会承接起对外服务的功能。
想要让备份的机器马上对外服务,那必须保证数据的一致性,这里的数据有2种:
1.dataNode
dataNode的一致性可以通过dataNode上报的方式解决(向主上报的时候同时上报给备机)
2.client
客户端的一致性
需要用备机同步主机的editlog
但如何保证editlog能一定同步成功?
HA 采用journalNode来保存日志,且为了保证高可用,journalNode也用集群的模式。
而journalNode 采用的是paxos算法,保证日志的可靠性
至此,active nameNode 和 standby nameNode 数据几经一致。
主备切换
保证数据一致性后,如何进行主备切换?
在active nameNode的主机上会有一个叫做[ZKFailovercontroller]的进程,时时监控nameNode 把信息上报到ZK
同理 standBy nameNode的机器上也有一个这样的进程
nameNode的2台机器同时上报,同时抢锁,抢到锁的就是active nameNode
当active 出现故障的时候,ZKFailovercontroller会触发一个事件,去释放锁,同时通知standBy。 standBy 会先去试探一下 active是否正的出现了故障。
如果是,它立马去抢锁,同时把standBy升级成active