hdfs单点问题,可能是机器故障,可能是软硬件升级。
解决方案,使用冗余的NameNode做一个热备份。
Standby和Active节点之间和JournalNodes通信,当Active节点执行修改时,持久把修改记录记录的JN中。Standby监测,并从JN中读取编辑。
1.如果突然大量的操作会怎么样?
2.JournalNodes如何被监控的?
为了提供快速的故障转移,Standby节点必须有关于集群中块位置的最新信息。DataNodes配置所有的Namenode的位置,向Namenode发送位置和心跳。
DataNodes发送了啥心跳?
为了防止脑裂,只能有一个Active Namenode的写入。
Active和StandBy的机器配置要求一样,JournalNode的守护线程相对较轻。要求是奇数个。
JournalNode 守护线程做了啥事情?
StandBy会执行检查点,所以不需要CheckpointNode和BackupNode,Second NameNode了。
支持联邦,通过nameserviceId来区分不同的namenode属于一个集群,以及通过不同的namenodeId进行标识不同的namenode。
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2, nn3</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>machine1.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>machine2.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn3</name>
<value>machine3.example.com:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>machine1.example.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>machine2.example.com:9870</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn3</name>
<value>machine3.example.com:9870</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value>
</property>
确定哪一个namenode是active的
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
这里面是猜测,需要日志佐证
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/path/to/journal/node/local/data</value>
</property>
<property>
<name>dfs.ha.nn.not-become-active-in-safemode</name>
<value>true</value>
</property>
hdfs -daemon start journalnode
haadmin
如果需要配置负载均衡器检查NN状态,可以curl http://NN_HOSTNAME/isActive
Standby获取Journal内存中的Editlog
-dfs.ha.tail-edits.in-progress
ZKFC/ZKFailOverControlller功能如下:
配置zk
关闭集群
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>
</property>
如果是多个nameservice,那么key值增加 mynameservice.id
zkfc -formatZK
hdfs --daemon start zkfc
这里面有一个ZK安全配置,可以确保ZK中的数据也是安全的
ZKFC故障转移时间默认是5s