温馨提示×

centos怎么配置hdfs高可用

小樊
55
2026-09-09 10:51:51
栏目: 智能运维

下面以 CentOS 7/8 + Hadoop HDFS HA(基于 QJM) 为例,说明配置步骤。假设你已有基本的 Hadoop 单机/伪分布式基础。


一、HDFS HA 架构说明(QJM 方式)

典型角色(以 3 台 CentOS 为例):

主机名 角色
node1 NameNode(active)
node2 NameNode(standby)
node3 JournalNode / DataNode
(可多台) DataNode

核心组件:

  • NameNode × 2(一主一备)
  • JournalNode × 3(奇数台,共享编辑日志)
  • ZKFC(ZK Failover Controller,依赖 ZooKeeper)
  • ZooKeeper × 3(用于自动故障转移)

二、基础环境准备(所有节点)

1. 主机名 & hosts

hostnamectl set-hostname node1
cat >> /etc/hosts <<EOF
192.168.1.11 node1
192.168.1.12 node2
192.168.1.13 node3
EOF

2. 关闭防火墙 & SELinux

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

3. 配置 SSH 免密(NameNode 之间必须)

ssh-keygen -t rsa
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3

4. 安装 JDK

yum install java-1.8.0-openjdk -y

三、ZooKeeper 集群(3 台)

tar -zxvf zookeeper-3.7.1.tar.gz -C /opt

conf/zoo.cfg

tickTime=2000
dataDir=/data/zookeeper
clientPort=2181
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888

每台创建 myid:

echo 1 > /data/zookeeper/myid  # node1
echo 2 > /data/zookeeper/myid  # node2
echo 3 > /data/zookeeper/myid  # node3

启动:

zkServer.sh start

四、Hadoop HA 核心配置

$HADOOP_HOME/etc/hadoop/

1. core-site.xml

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>node1:2181,node2:2181,node3:2181</value>
  </property>
</configuration>

2. hdfs-site.xml

<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>

  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>

  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>node1:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>node2:8020</value>
  </property>

  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>node1:9870</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>node2:9870</value>
  </property>

  <!-- JournalNode -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value>
  </property>

  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/data/journalnode</value>
  </property>

  <!-- 故障转移 -->
  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>

  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>

  <property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  </property>
</configuration>

3. workers(或 slaves)

node1
node2
node3

五、初始化 & 启动

1. 启动 JournalNode

所有节点:

hdfs --daemon start journalnode

2. 格式化 NameNode(仅第一次)

在 node1:

hdfs namenode -format
hdfs zkfc -formatZK

3. 启动 NameNode

node1:

hdfs --daemon start namenode

node2(standby):

hdfs namenode -bootstrapStandby
hdfs --daemon start namenode

4. 启动 ZKFC

hdfs --daemon start zkfc

5. 启动 DataNode

hdfs --daemon start datanode

六、验证 HA

hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2

杀掉 active NameNode 进程,观察是否自动切换。


如果你需要:

  • 不用 ZooKeeper 的手动 HA
  • 基于 CDH / Ambari
  • CentOS 8 + Hadoop 3.x 特定问题

可以继续问我。

0 踩