linux

怎样在Linux上实现HDFS的高可用

小樊
52
2025-09-25 10:00:46
栏目: 智能运维

一、前期准备

  1. 节点规划:至少需要3台服务器(用于部署NameNode、JournalNode、ZooKeeper),建议采用奇数台JournalNode(如3台)以保证多数派原则(避免脑裂)。所有节点需安装相同版本的Hadoop,并配置好JDK环境(建议JDK 1.8及以上)。
  2. 网络与权限:确保所有节点间IP可达,关闭防火墙或开放必要端口(如HDFS默认端口8020、JournalNode端口8485、ZooKeeper端口2181等)。配置节点间SSH免密登录(使用ssh-keygen生成密钥并分发至所有节点),便于后续元数据同步和故障转移。

二、配置核心组件

1. 配置JournalNode(共享存储层)

JournalNode是HDFS高可用的关键组件,用于在Active和Standby NameNode之间同步编辑日志(EditLog),确保元数据一致性。

2. 配置ZooKeeper(故障转移协调层)

ZooKeeper用于监控NameNode状态,实现自动故障转移(需提前安装ZooKeeper并配置集群)。

3. 配置HDFS高可用(NameNode层)

在所有NameNode节点上,修改core-site.xmlhdfs-site.xml

4. 同步NameNode元数据

在其中一个NameNode节点(如nn1)上执行格式化操作,生成元数据:

hdfs namenode -format

将格式化后的元数据同步到另一个NameNode节点(如nn2):

hdfs namenode -bootstrapStandby

三、启动HDFS高可用集群

  1. 启动JournalNode:已在前面完成(所有JournalNode节点执行hadoop-daemon.sh start journalnode)。
  2. 启动NameNode:在Active NameNode节点(如nn1)上启动NameNode:
    $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
    
  3. 启动Standby NameNode:在Standby NameNode节点(如nn2)上启动NameNode(会自动同步Active节点的元数据):
    $HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
    
  4. 启动DataNode:在所有DataNode节点上启动DataNode服务:
    $HADOOP_HOME/sbin/start-dfs.sh
    

四、验证高可用功能

  1. 检查集群状态:使用以下命令查看NameNode状态,确认Active和Standby节点正常:
    hdfs dfsadmin -report
    
    输出应显示两个NameNode,其中一个为active,另一个为standby
  2. 测试故障转移:模拟Active NameNode故障(如在nn1上执行stop-dfs.sh停止NameNode),等待1-2分钟后,检查Standby NameNode(nn2)是否自动切换为Active状态:
    hdfs dfsadmin -getServiceState nn2  # 应返回"active"
    
  3. 客户端访问测试:在客户端节点上配置core-site.xmlfs.defaultFS指向hdfs://mycluster),执行HDFS操作(如hdfs dfs -ls /),确认能正常访问。故障转移后,客户端应自动连接新的Active NameNode。

注意事项

0
看了该问题的人还看了