ubuntu

Ubuntu HDFS如何进行高可用配置

小樊
40
2025-10-29 13:56:43
栏目: 智能运维

Ubuntu环境下HDFS高可用(HA)配置步骤

1. 集群规划与环境准备

2. 配置核心文件

2.1 修改core-site.xml

所有节点$HADOOP_HOME/etc/hadoop/core-site.xml中添加以下配置,指定默认文件系统和ZooKeeper集群:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value> <!-- 集群名称,自定义 -->
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>zk1:2181,zk2:2181,zk3:2181</value> <!-- ZooKeeper集群地址 -->
    </property>
</configuration>

2.2 修改hdfs-site.xml

所有节点$HADOOP_HOME/etc/hadoop/hdfs-site.xml中添加以下配置,定义HA相关参数:

<configuration>
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value> <!-- 与core-site.xml中的fs.defaultFS一致 -->
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value> <!-- NameNode标识,自定义(如nn1、nn2) -->
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>nn1_host:8020</value> <!-- Active NameNode的RPC地址 -->
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>nn2_host:8020</value> <!-- Standby NameNode的RPC地址 -->
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>nn1_host:50070</value> <!-- Active NameNode的HTTP地址 -->
    </property>
    <property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>
        <value>nn2_host:50070</value> <!-- Standby NameNode的HTTP地址 -->
    </property>
    <property>
        <name>dfs.namenode.shared.edits.dir</name>
        <value>qjournal://jn1:8485;jn2:8485;jn3:8485/mycluster</value> <!-- JournalNode共享编辑日志地址 -->
    </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> <!-- 防脑裂机制:通过SSH杀死Standby进程 -->
    </property>
    <property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/root/.ssh/id_rsa</value> <!-- SSH私钥路径(需提前配置无密码登录) -->
    </property>
    <property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/var/hadoop/journalnode/data</value> <!-- JournalNode本地数据目录 -->
    </property>
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value> <!-- 启用自动故障转移 -->
    </property>
</configuration>

2.3 配置ZooKeeper(可选但推荐)

若未单独配置ZooKeeper集群,可在所有ZooKeeper节点$ZOOKEEPER_HOME/conf/zoo.cfg中添加:

server.1=zk1:2888:3888
server.2=zk2:2888:3888
server.3=zk3:2888:3888

并在每个节点的dataDir目录下创建myid文件(内容为对应server ID,如zk1节点写1)。

3. 启动JournalNode集群

所有JournalNode节点上执行以下命令,启动JournalNode服务:

hdfs --daemon start journalnode

使用jps命令检查是否出现JournalNode进程,确认服务正常运行。

4. 初始化共享编辑日志

在**其中一个NameNode(如nn1)**上执行以下命令,初始化共享编辑日志:

hdfs namenode -initializeSharedEdits

此命令会将本地NameNode的编辑日志同步到JournalNode集群。

5. 格式化并启动NameNode

6. 启动ZooKeeper集群

所有ZooKeeper节点上执行以下命令,启动ZooKeeper服务:

zkServer.sh start

使用zkServer.sh status检查状态,确保有1个Leader和2个Follower。

7. 验证高可用配置

7.1 检查NameNode状态

使用hdfs haadmin命令查看NameNode状态,确认Active/Standby状态:

hdfs haadmin -getServiceState nn1  # 应返回"active"
hdfs haadmin -getServiceState nn2  # 应返回"standby"

7.2 测试故障转移

注意事项

0
看了该问题的人还看了