阅读量:3
一、前期准备
- 集群规划:至少需要3台CentOS服务器(建议奇数台,如3或5台),分别部署NameNode(2台,一主一备)、JournalNode(3台,奇数台保证多数派)、ZooKeeper(3台,用于故障转移协调)、DataNode(根据存储需求配置)。所有节点需处于同一局域网,确保网络互通(延迟<100ms)。
- 基础环境配置:
- 安装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,实现无密码远程操作。
- 安装Java JDK 8+:
二、配置JournalNode(共享编辑日志存储) JournalNode用于存储NameNode的edits log(操作日志),确保Active与Standby NameNode的元数据同步。
- 在
hdfs-site.xml中添加JournalNode配置:<property> <name>dfs.journalnode.edits.dirname> <value>/var/hadoop/hdfs/journalvalue> property> - 启动JournalNode服务:在所有JournalNode节点上执行
hadoop-daemon.sh start journalnode,通过jps命令检查JournalNode进程是否运行。
三、配置ZooKeeper(故障转移协调) ZooKeeper用于监控NameNode状态,触发自动故障转移(ZKFC,ZooKeeper Failover Controller)。
- 在所有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)。
- 创建数据目录:
- 启动ZooKeeper服务:在所有ZooKeeper节点上执行
zkServer.sh start,通过zkServer.sh status检查Leader状态。
四、配置HDFS高可用(NameNode与ZKFC)
- 修改
core-site.xml(全局配置):<property> <name>fs.defaultFSname> <value>hdfs://myclustervalue> property> <property> <name>ha.zookeeper.quorumname> <value>zoo1:2181,zoo2:2181,zoo3:2181value> property> - 修改
hdfs-site.xml(HDFS高可用核心配置):<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>namenode1:8020value> property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2name> <value>namenode2:8020value> property> <property> <name>dfs.namenode.http-address.mycluster.nn1name> <value>namenode1:50070value> property> <property> <name>dfs.namenode.http-address.mycluster.nn2name> <value>namenode2:50070value> 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>/home/hadoop/.ssh/id_rsavalue> property> <property> <name>dfs.namenode.shared.edits.dirname> <value>qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/myclustervalue> property> - 格式化NameNode:在Active NameNode(如namenode1)上执行
hdfs namenode -format,初始化元数据。 - 启动JournalNode:在所有JournalNode节点上执行
hadoop-daemon.sh start journalnode,确保服务正常。 - 启动NameNode:在Active NameNode上执行
hadoop-daemon.sh start namenode,格式化完成后,将元数据同步到Standby NameNode(hdfs namenode -bootstrapStandby)。 - 启动ZKFC:在所有NameNode节点上执行
hadoop-daemon.sh start zkfc,ZKFC会监控NameNode状态,自动触发故障转移。 - 启动DataNode:在所有DataNode节点上执行
hadoop-daemon.sh start datanode,注册到NameNode。
五、验证高可用性
- 检查集群状态:执行
hdfs dfsadmin -report,查看NameNode状态(应显示active和standby)。 - 测试故障转移:
- 手动停止Active NameNode(
hadoop-daemon.sh stop namenode)。 - 观察Standby NameNode是否自动切换为Active(通过
hdfs dfsadmin -report或Web界面http://namenode1:50070查看)。
- 手动停止Active NameNode(
- 测试客户端访问:使用
hdfs dfs -put命令上传文件,停止Active NameNode后,再次上传,验证客户端是否自动连接到Standby NameNode。
六、后续维护
- 监控告警:部署Prometheus+Grafana监控集群状态(如NameNode心跳、DataNode块数量、ZooKeeper连接数),设置异常告警(如邮件、短信)。
- 数据备份:定期备份NameNode元数据(
hdfs namenode -backup)和JournalNode数据,防止数据丢失。 - 安全加固:启用Kerberos认证(
kinit命令获取票据),配置HDFS权限(hdfs dfs -chmod),限制防火墙端口(仅开放必要端口,如8020、50070、2181)。
以上就是关于“如何实现CentOS HDFS高可用”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm