每个数据块3个副本,分别在两个机架内的三个节点。
当节点发生故障,要保证数据不能丢失,因此数据块有多份冗余,三分数据库其中有两块在同一机架上面,还有一块在另外一个节点上面。这样某个节点挂了后,可以在相同机架上找到,如果整个机架发生故障,还可以在另外一个机架上找到,来确保数据相对可靠。这是数据库的放置。
还有一个心跳检测:DataNode定期向NameNode发送心跳消息,DataNode每隔多少秒钟会向NameNode汇报自己的状况,状态会以心跳协议发送给NameNode,NameNode会知道DataNode集群中哪些挂了哪些健康。
还一个二级NameNode.Secondary NameNode,放NameNode发生故障,元数据会全部丢失,为了保证NameNode和元数据不会丢失,做了一个备份,元数据会定期同步一个Secondary NameNode.在正常情况下NameNode正常的时候,Secondary NameNode只做备份,不会接收请求,当NameNode发生故障,Secondary NameNode会同步替换NameNode.Secondary NameNode保证NameNode高可用性。简单说,二级NameNode定期同步元数据映像文件和修改日志,NameNode发生故障时,备胎转正。