前言
在HDFS集群运维过程中,我们经常会遇到机器送修的情况,尤其在集群机器数量比较多的情况下,每天因为坏盘或是其它硬件问题导致的机器维修是很常见的。对于集群维护者来说,机器的这种日常损坏我们是无法回避的,我们能做的是如何将这种机器维修所造成的影响降低到最小。在现有的HDFS功能里,社区提供了一种叫做Maintenance state(HDFS-7877)的功能来专门处理这种情况。本文笔者来谈谈这个有用的功能以及我们内部是如何简化此特性来方便于我们的使用的。
Maintenance state
Maintenance state是DataNode里面一种新的状态,它和DataNode正常In Service状态最大的区别是它不会触发大量的replica复制。而且Maintenance state有自己的过期时间阈值设置,一旦超过过期时间,Maintenance state节点会自己重新切换成In Service状态。从这个过程我们可以看到,Maintenance state的引入可以使得机器维护的时段对集群来说是完全透明的,但是这里还需要有一个前提条件:集群内拥有其它足够的副本数据以此保证数据的可用性。如果在维修的机器上保留的是集群仅存的副本数据的话,依然还是会导致数据无法访问的情况。
因此在Maintenance state功能里面,很重要的一部分实现做的是最少副本数的检查,来确保机器进入Maintenance状态后,不会出现部分数据无法访问的情况。