目前状况:namenode是整个hdfs系统的核心,集群中只存在一个namenode节点,如果namenode挂掉,整个系统将进入瘫痪状态,目前我的集群namenode、ResourceManager、secondNamenode分配在三台服务器上
为了防止单点namenode挂掉导致整个系统瘫痪,传统的做法就是做namenode的备份节点,定期备份namenode的数据,恢复时间长,反应迟钝。
用心跳侦测的方式将namenode的主节点状态为active,备份节点的状态为standby,以心跳侦测的方式判断主节点是否存活
那么就会出现一个问题
如果仅主备节点的失去连接,主节点和备份节点互相认为对方挂掉,那么备份节点的状态会转变成active,那么集群中就会出现两个namenode,datanode在写入数据时就不知道往哪个namenode中写,最终的结果就是整个集群处于停滞状态,那么就会产生split-brain的问题
split-brian的原意为脑裂,就是精神分裂
为了避免split-brian的问题,hadoop引入fence(隔离)机制,即同一时刻只能有一台服务器对外响应,下面是相关配置信息
配置zookeeper
将三个服务器均需要部署zookeeper
传入zookeeper文件包
在zookeeper包下创建zkData文件夹
在conf文件夹下的zoo-sample.cfg更名为zoo.cfg
将dataDir变量配置成$zookeeper_HOME/zkData
配置集群各节点信息:
server.1=host1:2888:3888