1. 前提准备
确保所有节点(至少2台NameNode、3台JournalNode、多台DataNode)已安装JDK(1.8及以上)、Hadoop(2.7及以上),并配置好SSH免密登录(节点间可无密码互相访问),网络互通(能互相解析主机名)。
2. 配置JournalNode集群(元数据同步基础)
JournalNode用于存储NameNode的编辑日志(edits log),确保Active与Standby NameNode元数据一致。在每台JournalNode节点上:
- 编辑
hdfs-site.xml,添加JournalNode数据目录配置:<property> <name>dfs.journalnode.edits.dirname> <value>/path/to/journalnode/datavalue> property> - 启动JournalNode服务(所有JournalNode节点执行):
$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode - 格式化JournalNode(任选一台NameNode执行,仅首次启动需要):
hdfs namenode -formatJournalNode
3. 配置NameNode高可用(核心步骤)
在hdfs-site.xml中添加以下关键配置(以集群名称mycluster为例):
<property>
<name>dfs.nameservicesname>
<value>myclustervalue>
property>
<property>
<name>dfs.ha.namenodes.myclustername>
<value>nn1,nn2value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1name>
<value>namenode1-host:8020value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2name>
<value>namenode2-host:8020value>
property>
<property>
<name>dfs.namenode.shared.edits.dirname>
<value>qjournal://jn1-host:8485;jn2-host:8485;jn3-host:8485/myclustervalue>
property>
<property>
<name>dfs.client.failover.proxy.provider.myclustername>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
property>
<property>
<name>dfs.ha.automatic-failover.enabledname>
<value>truevalue>
property>
<property>
<name>dfs.ha.fencing.methodsname>
<value>sshfencevalue>
property>
<property>
<name>dfs.ha.fencing.ssh.private-key-filesname>
<value>/home/hadoop/.ssh/id_rsavalue>
property>
在core-site.xml中配置默认文件系统:
<property>
<name>fs.defaultFSname>
<value>hdfs://myclustervalue>
property>
4. 同步NameNode元数据(初始化Standby节点)
在Active NameNode(如namenode1)上执行格式化:
hdfs namenode -format
启动Active NameNode:
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
在Standby NameNode(如namenode2)上同步元数据:
hdfs namenode -bootstrapStandby
启动Standby NameNode:
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
5. 配置ZooKeeper Failover Controller(ZKFC,自动故障转移核心)
ZKFC用于监控NameNode状态,触发自动故障转移。在hdfs-site.xml中添加:
<property>
<name>dfs.zkfc.enablename>
<value>truevalue>
property>
<property>
<name>dfs.zkfc.portname>
<value>8080value>
property>
<property>
<name>dfs.zkfc.hostsname>
<value>zk1-host:2181,zk2-host:2181,zk3-host:2181value>
property>
在每台NameNode节点上启动ZKFC服务:
$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc
6. 启动HDFS集群并验证
- 启动所有JournalNode(已在步骤2完成)。
- 启动所有DataNode:
$HADOOP_HOME/sbin/start-datanode.sh - 启动HDFS集群(可选,若已单独启动各组件可跳过):
$HADOOP_HOME/sbin/start-dfs.sh - 验证集群状态:
hdfs dfsadmin -report # 查看NameNode、DataNode状态 - 测试故障转移:手动停止Active NameNode(如
namenode1的NameNode服务),观察Standby NameNode(namenode2)是否自动切换为Active状态(可通过Web界面或hdfs dfsadmin -report确认)。
7. 后续维护与优化
- 监控告警:部署Prometheus+Grafana监控集群状态(如NameNode CPU、内存、磁盘使用率,DataNode心跳,ZooKeeper连接数),设置异常告警(邮件、短信)。
- 数据备份:定期备份JournalNode数据目录(如
/path/to/journalnode/data)和NameNode元数据目录(如/path/to/namenode/name),防止数据丢失。 - 日志分析:定期检查NameNode、DataNode日志(位于
$HADOOP_HOME/logs),排查潜在问题(如元数据同步延迟、节点通信故障)。 - 配置优化:根据业务需求调整HDFS参数(如
dfs.replication副本数,默认3;dfs.blocksize块大小,默认128MB),提升性能与可靠性。
以上就是关于“如何确保CentOS HDFS的高可用性”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm