1、为什么要用集群?
在企业中,伪分布式部署,每一个角色都是一个进程,在HDFS中进程:NN、老大 master、SNN、老二、DN、(SNN默认一个小时的checkpoint,NN节点挂了,只能恢复checkpoint那时候的点)
在YARN中: RM 老大 NM
以上架构都是主从架构: master–>slave
比如hdfs读写请求都是先经过namenode节点。
但是:例如hbase 读写请求不是经过老大master。
二、 比如NN节点挂了,就不能提供对外服务;-put -get。需要配置两个NN节点(实时),NN1 NN2这两个节点需要随时准备着,任何时刻只有一台active状态,另外一台是standby实时备份,随时准备着从standby切换active状态,对外服务)
NN1 active 11:00挂了 hdfs://ip1:9000/代码 shell脚本
NN2 standby 立马会切换为active状态 hdfs://ip2:9000/
一旦配了两个NN节点以后,SNN节点就已经没有配置的必要了。
此项是无感知的,NN1与NN2会来回切换,我们关注不了,此时抛出一个名词:命名空间 nameservice CDH
dw(数仓)
命令空间如下图:
三、HA进程
3台机器,
Hadoop001:ZK NN JN DN
hadoop002:ZK NN JN DN
hadoop003:ZK JN DN
在伪分布式中,NN有两个文件,fsimage、editlog(读写请求记录)。
zookeeper.apache.org
zk集群 选举谁做active standby
生产中有20台节点,zookeeper部署个数需要是奇数;为2n+1台;20~100台节点:部署7、9、11台。》100台的话J哥公司部署的是11台zk,但是:不是zk越多越好,zk节点越多,active发生故障以后,需要选举的时间越长。**如果有几百个节点时,只在一台机器上部署zk就行**
zk进程繁忙选举不了会导致standby切换不了active。
jounalNode:考虑HDFS的数据量以及请求量;jounalNode可以选择和zk保持一致(3、5、7台)。
HA架构分析:1、DN–>两个NN
2、ZKFC 单独进程
进程:ps -ef
进程是由一个以上的线程组成。
ZKFC的全称:zookeeperfailovercontrol
NN–》把自己的日志写入到jounalnode,standby节点的NN再把日志实时应用到自己本身,专业名词叫重演。
datanode向2个namenode发送心跳和块报告,心跳的间隔时间多少,参数是什么;块报告参数、时间?
ZKFC当一台机器的active状态挂了,通过zk进行选举,选举完成后通知ZKFC切换为active状态;
HA是为了解决单点问题;
通过JN集群共享状态;
通过ZKFC选举active;
监控状态,自动备援。
DN:同时向NN1、NN2发送心跳和块报告
active nn:操作记录写到自己的editlog。
同时写JN集群。
接收DN的心跳和块报告。
standby nn:同时接收JN集群的日志,显示读取执行log(重演),使得自己的元数据和active nn节点保持一致。同时也接收DN的心跳和块报告。
jounalnode :用于active standby nn节点的同步数据,一般部署2n+1;
ZKFC:单独的进程,监控NN健康状况
向zk集群定期发送心跳,使得自己可以被选举;当自己被zk选举为active的时候,zkfc进程通过RPC协议调用使NN节点的状态变为active,对外提供实时服务,是无感知的。