首页主机资讯如何实现CentOS HDFS高可用

如何实现CentOS HDFS高可用

时间2025-10-22 09:22:04发布访客分类主机资讯浏览1196
导读:一、前期准备 集群规划:至少需要3台CentOS服务器(建议奇数台,如3或5台),分别部署NameNode(2台,一主一备)、JournalNode(3台,奇数台保证多数派)、ZooKeeper(3台,用于故障转移协调)、DataNode...

一、前期准备

  1. 集群规划:至少需要3台CentOS服务器(建议奇数台,如3或5台),分别部署NameNode(2台,一主一备)、JournalNode(3台,奇数台保证多数派)、ZooKeeper(3台,用于故障转移协调)、DataNode(根据存储需求配置)。所有节点需处于同一局域网,确保网络互通(延迟< 100ms)。
  2. 基础环境配置
    • 安装Java JDK 8+:sudo yum install java-1.8.0-openjdk-devel,配置JAVA_HOME环境变量(/etc/profile.d/java.sh)并生效。
    • 下载并解压Hadoop(建议3.x版本):wget https://archive.apache.org/dist/hadoop/common/hadoop-3.3.1/hadoop-3.3.1.tar.gz,解压至/opt/,配置HADOOP_HOME环境变量(/etc/profile.d/hadoop.sh)并生效。
    • 配置SSH免密登录:在所有节点间生成密钥(ssh-keygen -t rsa),并将公钥(id_rsa.pub)追加到~/.ssh/authorized_keys,实现无密码远程操作。

二、配置JournalNode(共享编辑日志存储) JournalNode用于存储NameNode的edits log(操作日志),确保Active与Standby NameNode的元数据同步。

  1. hdfs-site.xml中添加JournalNode配置:
    <
        property>
        
      <
        name>
        dfs.journalnode.edits.dir<
        /name>
        
      <
        value>
        /var/hadoop/hdfs/journal<
        /value>
         <
        !-- 日志存储路径,需提前创建并授权(chown -R hadoop:hadoop /var/hadoop/hdfs/journal) -->
        
    <
        /property>
        
    
  2. 启动JournalNode服务:在所有JournalNode节点上执行hadoop-daemon.sh start journalnode,通过jps命令检查JournalNode进程是否运行。

三、配置ZooKeeper(故障转移协调) ZooKeeper用于监控NameNode状态,触发自动故障转移(ZKFC,ZooKeeper Failover Controller)。

  1. 在所有ZooKeeper节点上解压并配置ZooKeeper(建议3.4+版本):
    • 创建数据目录:mkdir -p /var/lib/zookeeper
    • 配置zoo.cfg/opt/zookeeper/conf/zoo.cfg):
      tickTime=2000
      initLimit=10
      syncLimit=5
      dataDir=/var/lib/zookeeper
      clientPort=2181
      server.1=zoo1:2888:3888
      server.2=zoo2:2888:3888
      server.3=zoo3:2888:3888
      
    • dataDir下创建myid文件(内容为节点ID,如zoo1节点写入1)。
  2. 启动ZooKeeper服务:在所有ZooKeeper节点上执行zkServer.sh start,通过zkServer.sh status检查Leader状态。

四、配置HDFS高可用(NameNode与ZKFC)

  1. 修改core-site.xml(全局配置):
    <
        property>
        
      <
        name>
        fs.defaultFS<
        /name>
        
      <
        value>
        hdfs://mycluster<
        /value>
         <
        !-- 集群名称,需与hdfs-site.xml中的dfs.nameservices一致 -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        ha.zookeeper.quorum<
        /name>
        
      <
        value>
        zoo1:2181,zoo2:2181,zoo3:2181<
        /value>
         <
        !-- ZooKeeper集群地址 -->
        
    <
        /property>
        
    
  2. 修改hdfs-site.xml(HDFS高可用核心配置):
    <
        property>
        
      <
        name>
        dfs.nameservices<
        /name>
        
      <
        value>
        mycluster<
        /value>
         <
        !-- 集群名称 -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.ha.namenodes.mycluster<
        /name>
        
      <
        value>
        nn1,nn2<
        /value>
         <
        !-- NameNode标识(逗号分隔) -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.namenode.rpc-address.mycluster.nn1<
        /name>
        
      <
        value>
        namenode1:8020<
        /value>
         <
        !-- Active NameNode RPC地址 -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.namenode.rpc-address.mycluster.nn2<
        /name>
        
      <
        value>
        namenode2:8020<
        /value>
         <
        !-- Standby NameNode RPC地址 -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.namenode.http-address.mycluster.nn1<
        /name>
        
      <
        value>
        namenode1:50070<
        /value>
         <
        !-- Active NameNode HTTP地址 -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.namenode.http-address.mycluster.nn2<
        /name>
        
      <
        value>
        namenode2:50070<
        /value>
         <
        !-- Standby NameNode HTTP地址 -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.client.failover.proxy.provider.mycluster<
        /name>
        
      <
        value>
        org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider<
        /value>
         <
        !-- 客户端故障转移代理 -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.ha.fencing.methods<
        /name>
        
      <
        value>
        sshfence<
        /value>
         <
        !-- 故障转移隔离方法(防止脑裂) -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.ha.fencing.ssh.private-key-files<
        /name>
        
      <
        value>
        /home/hadoop/.ssh/id_rsa<
        /value>
         <
        !-- SSH私钥路径(用于隔离) -->
        
    <
        /property>
        
    <
        property>
        
      <
        name>
        dfs.namenode.shared.edits.dir<
        /name>
        
      <
        value>
        qjournal://journalnode1:8485;
        journalnode2:8485;
        journalnode3:8485/mycluster<
        /value>
         <
        !-- JournalNode共享日志地址 -->
        
    <
        /property>
        
    
  3. 格式化NameNode:在Active NameNode(如namenode1)上执行hdfs namenode -format,初始化元数据。
  4. 启动JournalNode:在所有JournalNode节点上执行hadoop-daemon.sh start journalnode,确保服务正常。
  5. 启动NameNode:在Active NameNode上执行hadoop-daemon.sh start namenode,格式化完成后,将元数据同步到Standby NameNode(hdfs namenode -bootstrapStandby)。
  6. 启动ZKFC:在所有NameNode节点上执行hadoop-daemon.sh start zkfc,ZKFC会监控NameNode状态,自动触发故障转移。
  7. 启动DataNode:在所有DataNode节点上执行hadoop-daemon.sh start datanode,注册到NameNode。

五、验证高可用性

  1. 检查集群状态:执行hdfs dfsadmin -report,查看NameNode状态(应显示activestandby)。
  2. 测试故障转移:
    • 手动停止Active NameNode(hadoop-daemon.sh stop namenode)。
    • 观察Standby NameNode是否自动切换为Active(通过hdfs dfsadmin -report或Web界面http://namenode1:50070查看)。
  3. 测试客户端访问:使用hdfs dfs -put命令上传文件,停止Active NameNode后,再次上传,验证客户端是否自动连接到Standby NameNode。

六、后续维护

  1. 监控告警:部署Prometheus+Grafana监控集群状态(如NameNode心跳、DataNode块数量、ZooKeeper连接数),设置异常告警(如邮件、短信)。
  2. 数据备份:定期备份NameNode元数据(hdfs namenode -backup)和JournalNode数据,防止数据丢失。
  3. 安全加固:启用Kerberos认证(kinit命令获取票据),配置HDFS权限(hdfs dfs -chmod),限制防火墙端口(仅开放必要端口,如8020、50070、2181)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何实现CentOS HDFS高可用
本文地址: https://pptw.com/jishu/732003.html
怎样评估CentOS HDFS性能 如何进行CentOS HDFS调优

游客 回复需填写必要信息