Ubuntu环境下HDFS高可用(HA)配置步骤
1. 集群规划与环境准备
- 节点角色规划:至少需要3类节点(可根据规模扩展):
- NameNode节点:2个(1个Active,1个Standby),负责元数据管理;
- JournalNode节点:3个(或奇数个,推荐),负责同步NameNode元数据编辑日志(edits);
- ZooKeeper集群:3个(或奇数个),用于协调NameNode的主备切换;
- DataNode节点:多个(存储实际数据,可与NameNode/ JournalNode共用)。
- 环境要求:
- 所有节点安装相同版本的Hadoop(如3.3.4+);
- 配置SSH无密码登录(所有节点之间),确保Hadoop服务能自动远程操作;
- 关闭防火墙或开放必要端口(如8020/rpc、50070/http、2181/zk等)。
2. 配置核心文件
2.1 修改core-site.xml
在所有节点的$HADOOP_HOME/etc/hadoop/core-site.xml中添加以下配置,指定默认文件系统和ZooKeeper集群:
<configuration>
<property>
<name>fs.defaultFSname>
<value>hdfs://myclustervalue>
property>
<property>
<name>ha.zookeeper.quorumname>
<value>zk1:2181,zk2:2181,zk3:2181value>
property>
configuration>
2.2 修改hdfs-site.xml
在所有节点的$HADOOP_HOME/etc/hadoop/hdfs-site.xml中添加以下配置,定义HA相关参数:
<configuration>
<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>nn1_host:8020value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2name>
<value>nn2_host:8020value>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1name>
<value>nn1_host:50070value>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2name>
<value>nn2_host:50070value>
property>
<property>
<name>dfs.namenode.shared.edits.dirname>
<value>qjournal://jn1:8485;jn2:8485;jn3: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.fencing.methodsname>
<value>sshfencevalue>
property>
<property>
<name>dfs.ha.fencing.ssh.private-key-filesname>
<value>/root/.ssh/id_rsavalue>
property>
<property>
<name>dfs.journalnode.edits.dirname>
<value>/var/hadoop/journalnode/datavalue>
property>
<property>
<name>dfs.ha.automatic-failover.enabledname>
<value>truevalue>
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
- 格式化主NameNode:在nn1节点上执行:
此操作会创建HDFS的元数据目录(如hdfs namenode -format/var/hadoop/dfs/name),仅需执行一次。 - 启动NameNode:在nn1节点上启动HDFS服务:
此时nn1会成为Active NameNode,nn2为Standby NameNode。start-dfs.sh
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 测试故障转移
- 模拟故障:在nn1节点上杀死NameNode进程:
kill -9 $(jps | grep NameNode | awk '{print $1}') - 验证切换:等待1-2分钟后,在nn2节点上检查状态:
hdfs haadmin -getServiceState nn2 # 应返回"active" - 恢复服务:重启nn1节点的NameNode进程,应自动切换回Standby状态。
注意事项
- 数据一致性:所有NameNode节点的
dfs.namenode.name.dir(元数据目录)必须一致; - JournalNode数量:需至少3个,确保数据可靠性;
- SSH配置:
dfs.ha.fencing.methods需配置有效的防脑裂机制(如sshfence),避免脑裂问题; - 版本兼容:Hadoop 2.x与3.x的配置略有差异,需根据版本调整(如3.x中
dfs.ha.automatic-failover.enabled默认为true)。
以上就是关于“Ubuntu HDFS如何进行高可用配置”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm