Ubuntu HDFS如何进行高可用配置
导读:Ubuntu环境下HDFS高可用(HA)配置步骤 1. 集群规划与环境准备 节点角色规划:至少需要3类节点(可根据规模扩展): NameNode节点:2个(1个Active,1个Standby),负责元数据管理; JournalNode...
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.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
- 格式化主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)。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu HDFS如何进行高可用配置
本文地址: https://pptw.com/jishu/738311.html
