交流
商城
MCN
登入
注册
首页
提问
分享
讨论
建议
公告
动态
发表新帖
发表新帖
NameNode HA部署
分享
未结
0
976
李延
LV6
2021-09-13
悬赏:20积分
# 1.背景 NameNode High Availability 即高可用。 在之前的部署中,namenode固定在第一台机器上。如果这台服务器发生意外,整个集群的hdfs将不可用。虽然有 SecorndaryNameNode,但是它并不是NameNode的备份,它只是namenode的一个助理,协助namenode工作,对fsimage和edits文件进行合并,并推送给NameNode,防止因edits文件过大,导致NameNode重启变得很慢),这是hadoop1的不可靠实现。 在hadoop2中这个问题得以解决,hadoop2中的高可靠性是指同时启动NameNode,其中一个处于工作状态,一个处于随时待命状态。这样,当一个NameNode所在的服务器宕机时,可以在数据不丢失的情况下, 手工或者自动切换到另一个NameNode提供服务。 集群启动时,可以同时启动多个NameNode。这些NameNode只有一个是active的,另一个属于standby状态。active状态意味着提供服务,standby状态意味着处于休眠状态,只进行数据同步,时刻准备着提供服务 # 2. 参考 [https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html](https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html) # 3.配置文件 ## 3.1 手动故障转移配置 修改hdfs-site.xml 设置dfs集群名称: ```XML <property> <name>dfs.nameservices</name> <value>mycluster</value> </property> ``` 设置每个namenode的唯一标识`dfs.ha.namenodes.[nameservice ID]` **注意** 用于 HA 的 NameNode 的最小数量为 2,但您可以配置更多。由于通信开销,建议不要超过 5 个 - 推荐 3 个 NameNode。 ```XML <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2, nn3</value> </property> ``` 设置每个namenode的通信地址和端口 ```XML <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>node-1:9870</value> </property> <property> <name>dfs.namenode.http -address.mycluster.nn2</name> <value>node-2:9870</value> </property> <property> <name>dfs.namenode.http-address.mycluster.nn3</name> <value>node-3:9870</value> </property> ``` 每个namenode侦听的http端口,用于与客户端交互 ```XML <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>node-1:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>node-2:8020</value> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn3</name> <value>node-3:8020</value> </property> ``` JN 组的交互url ```XML <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://node-1:8485;node-2:8485;node-3:8485/mycluster</value> </property> ``` HDFS 客户端用来联系活动 NameNode 的 Java 类 ```XML <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> ``` active转移调用脚本方式,与ssh免密认证 ```XML <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> ``` **在core-site.xml文件中** JournalNode 守护进程数据存储进程 ```XML <property> <name>dfs.journalnode.edits.dir</name> <value>/work/hadoop-3.3.1/data/jn</value> </property> ``` ## 3.2 自动故障转移配置 以上部分描述了如何配置手动故障转移。在这种模式下,即使活动节点发生故障,系统也不会自动触发从活动到备用 NameNode 的故障转移。本节介绍如何配置和部署自动故障转移。 开启自动故障转移 ```XML <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> ``` **在core-site.xml文件中** 配置zookeeper 路径 ```XML <property> <name>ha.zookeeper.quorum</name> <value>node-1:2181,node-2:2181,node-3:2181</value> </property> ``` # 4 启动 ## 4.1 初始化 首先启动journalnode,所有机器 : hadoop-daemon.sh start journalnode (如果这里不启动的话,在进行hdfs格式化的时候就会报错,同时这个进程只需在格式化的时候启动,后续启动服务则不需要) 在 ZooKeeper 中初始化所需的状态,一台机器 $HADOOP_HOME/bin/hdfs zkfc -formatZK 初始化 hdfs 和之前一样,一台机器 hdfs namenode -format 启动 start-dfs.sh 其他服务器执行,接受copy文件的namenode主机上执行 hdfs namenode -bootstrapStandby 其他两台服务器启动datanode hadoop-daemon.sh start datanode
回帖
消灭零回复
提交回复
热议榜
java 相关知识分享
8
好的程序员与不好的程序员
6
写给工程师的十条精进原则
5
spring boot以jar包运行配置的logback日志文件没生成
5
一步一步分析SpringBoot启动源码(一)
5
MockMvc测试
5
【吐槽向】是不是有个吐槽的板块比较好玩
4
logstash jdbc同步mysql多表数据到elasticsearch
3
IntelliJ IDEA 优质License Server
3
.gitignore忽略规则
3
SpringBoot启动源码分析
3
一步一步分析SpringBoot启动源码(三)
3
2
一步一步分析SpringBoot启动源码(二)
2
积分不够将无法发表新帖
2
官方产品
Meta-Boot - 基于MCN
MCN - 快速构建SpringBoot应用
微信扫码关注公众号