011 Hdfs的ha高可用配置 Hdfs的ha测试

    xiaoxiao2022-07-14  159

    如下图 单节点故障问题 就是老大只有一个 一旦老大挂掉了 服务就结束了 如果NameNode挂掉后 其他节点也无法使用 那么2.x 多了这么一个 Quorun-based Storage Share Data 是 共享日志的存储 ZKFC是Zookeeper的失败控制转移器 Health Monitor,Failover 是健康监控

    就是说吧 先看左边 的NameNode是Active状态 ZKFC监控着NameNode 如果 NameNode不健康了 就转移到右边的准备状态的的NameNode 就是左边的坏了没关系 右边的还能继续提供服务

    即用QJM的方式快速搭建HA hdfs的集群

    1.Hdfs的ha配置

    namenode弄两个 jouranlnode奇数个

    现在开始弄了

    第一步 如果你开了集群 先停止掉 stop-all.sh 然后要备份一下 万一以后有什么需要用到普通集群了 所以需要备份 mv /usr/local/hadoop-2.7.1/ /usr/local/hadoop-2.7.1_bak (这里使用了mv 直接移动了 改了名字 做成了备份 然后吧 重新解压hadoop安装包 重新安装了 我觉得吧 肯定是视频上忘了copy 这个东西 哈哈 不过只能跟着做 谁让咱不会呢)

    记住是三个机子的hadoop都要移动备份

    第二步 然后重新解压在home下的hadoop安装包(在hadoop01下进行)

    tar -zxvf /home/hadoop-2.7.1.tar.gz -C /usr/local/

    别忘了大C

    进入hadoop目录 删除doc文件 便于发送


    这里我们使用notepad++的插件操作 使用的插件名为NppFTP 至于怎么安装 然后点击这个 再点击Profile Setting 然后新建一个 连接hadoop01 然后连接一下 上图右上角就是hadoop01的根目录 找到local下面的usr下面的hadoop-2.7.1安装目录 etc下面的hadoop的配置文件 在修改之前注意右下角的编码格式 要改成utf-8 最上面菜单栏有调编码的一栏

    总共配置4个文件 ①先修改hadoop-env.sh

    查找jdk目录修改 改成这个 这样第一个文件就修改好了 ②core-site.xml

    <!--配置hdfs文件系统的命名空间--> <property> <name>fs.defaultFS</name> <value>hdfs://qf</value> </property> <!--配置操作hdfs的缓存大小--> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!--配置临时数据存储目录--> <property> <name>hadoop.tmp.dir</name> <value>/home/hahadoopdata/tmp</value> </property> <!-- 指定zk的集群地址 用来协调namenode的服务 --> <property> <name>ha.zookeeper.quorum</name> <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value> </property>

    以前配hdfs不是写的hadoop01吗 这里写qf是因为到时候01 02 不一定用的哪一个 所以写一个虚拟的qf名

    ③hdfs-site.xml

    这里有个错误 不要急着复制上 看看下面测试启动上传文件部分 写出来了 改了之后再复制

    http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html 这个网址有相关内容

    <!--副本数 也叫副本因子 不是容错嘛--> <!--副本数--> <property> <name>dfs.replication</name> <value>3</value> </property> <!--块大小_hadoop2_128M_hadoop1_64M_hadoop3.0_256M--> <property> <name>dfs.block.size</name> <value>134217728</value> </property> <!--hdfs的元数据存储位置--> <property> <name>dfs.namenode.name.dir</name> <value>/home/hahadoopdata/dfs/name</value> </property> <!--hdfs的数据存储位置--> <property> <name>dfs.datanode.data.dir</name> <value>/home/hahadoopdata/dfs/data</value> </property> <!--指定hdfs的虚拟服务名--> <property> <name>dfs.nameservices</name> <value>qf</value> </property> <!--指定hdfs的虚拟服务名下的namenode的名字--> <property> <name>dfs.ha.namenodes.qf</name> <value>nn1,nn2</value> </property> <!--指定namenode的rpc内部通信地址--> <property> <name>dfs.namenode.rpc-address.qf.nn1</name> <value>hadoop01:8020</value> </property> <property> <name>dfs.namenode.rpc-address.qf.nn2</name> <value>hadoop02:8020</value> </property> <!--指定namenode的web ui界面地址--> <property> <name>dfs.namenode.http-address.qf.nn1</name> <value>hadoop01:50070</value> </property> <property> <name>dfs.namenode.http-address.qf.nn2</name> <value>hadoop02:50070</value> </property> <!--指定jouranlnode数据共享目录 namenode存放元数据信息的Linux本地地址 这个目录不需要我们自己创建--> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop01:8485;hadoop02:8485;hadoop03:8485/qf</value> </property> <!--指定jouranlnode本地数据共享目录--> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hahadoopdata/jouranl/data</value> </property> <!-- 开启namenode失败进行自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!--指定namenode失败进行自动切换的主类 datanode存放用户提交的大文件的本地Linux地址 这个目录不需要我们自己创建--> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!--防止多个namenode同时active(脑裂)的方式 采用某种方式杀死其中一个--> <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> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>30000</value> </property>

    跟视频中不一样的地方 视频中使用9000这个端口

    ④slaves 添加三个主机名

    这样ha就配置完成(hadoop01)的 然后我们看一下再说 有内容 感觉没啥问题 保存退出wq

    然后最后一步 分发 到02 03的机子上

    scp -r ../hadoop-2.7.1 hadoop02:/usr/local/ scp -r ../hadoop-2.7.1 hadoop03:/usr/local/

    这样之后 我们开始做免登陆的配置 之前我们做了01到01 02 03 的免登陆 现在我们做 02 到 01 02 03的 因为现在02也有老大namenode了

    在02下 输入这个 然后一直回车 直至出现图案

    ssh-keygen -t rsa

    然后 登录 ssh hadoop02 是需要输入密码的 exit退出 输入这句话 ssh-copy-id hadoop02 输入yes 再输入密码 ssh hadoop02 再登录 不需要输入密码 exit 退出

    同样的方法 设置01 03 免登陆(在02下) 输入这句话 ssh-copy-id hadoop01输入yes 再输入密码 ssh hadoop01 再登录 不需要输入密码 exit 退出

    输入这句话 ssh-copy-id hadoop03 输入yes 再输入密码 ssh hadoop03 再登录 不需要输入密码 exit 退出


    这样 到此为止 免登陆 配置完了 四个文件配置完了

    然后就是 这里我们已经发送了 先发送的(就是上面的scp)

    现在我们按照顺序执行 启动 ①

    先启动zk zkServer.sh 三台都要启动 然后jps查看服务是否启动 QuorumPeerMain ②启动journalnode服务 我们使用多个服务一次启动

    hadoop-daemons.sh start journalnode

    jps会显示journalnode进程服务 ③

    挑选01 02 任意一台格式化 然后启动namenode 这里我们选02

    hdfs namenode -format

    格式化后会创建下图这个文件夹 我们在配置文件里写的那个 而且下面是有东西的 然后单个启动namenode

    hadoop-daemon.sh start namenode

    在另外一台namenode的机子上拉取元数据 (也可以使用复制) 即在01上

    hdfs namenode -bootstrapStandby

    在执行这条命令之前 我们01是没有这个目录的

    执行完成之后我们再看看 有了 这就代表拉取元数据成功 当然拉取也行 你要是直接将目录copy过来也行

    格式化zkfc

    我们在01下登录 zkCli.sh 然后ls / 结果发现还有别的 我们先删掉rmr 吧 只留下zookeeper这一个根节点就行 然后我们在02下 格式化 记得先登录zkCli.sh

    hdfs zkfc -formatZK

    执行前后对比 多了一个hadoop-ha节点 该节点下面还有qf qf下面没有东西 启动之后就有东西了

    启动

    start-dfs.sh

    这样我们看到 01 02 03 我们看到01 02都是5个服务(01多了个ZookeeperMain是因为我连接着notepad++还没断开) 03是三个

    测试

    一 先看对应的进程是否对 (就是上面的jps后看 已经完成) 二 再看web ui是否正常

    192.168.37.111:50070

    112 即hadoop02 是active的

    三 在hdfs读写文件

    在这里我遇到了一个问题 如下图 就是告诉我qf这个虚拟主机名出问题了 导致hdfs 等这一系列命令不可用 那咋办 我重新2倍速回看了安装的那个视频 发现我有个地方(是配置文件hdfs-site.xml文件)有个没有改成qf还是官网上的mycluster 难受 这样我就重新 一个一个01 02 03 改了三个地方vi /usr/local/hadoop-2.7.1/etc/hadoop/hdfs-site.xml 再次使用hdfs的相关命令就好了

    首先 hdfs dfs -ls / 查看hdfs根目录下是否有东西 是没有东西的 然后我们将home下的一个文件上传到hdfs上

    hdfs dfs -put /home/shell/if.sh /

    我们查看web网页的 已经上传了 我们在03 即小弟下面查看 hdfs dfs -cat /if.sh 四 然后制造一个namenonde失败 关闭即可 查看是否能自动切换 就是杀死02的namenode的进程 先用jps查看02的namenode进程的前边的号 然后使用kii -9 号码 杀死进程 然后我们看web 02刷新后不能访问 01由standby变为active 这样一个老大挂掉了还能有另外一个老大顶上 我们再次使用小弟查看文件 仍然能查看 运行正确

    然后我们如果发现02异常了 启动02的namenode

    hadoop-daemon.sh start namenode

    启动成功 但是我们查看.web 02的状态是standby 因为01的namenode没有出问题 所以还是01为老大 但是如果我们把01切掉 02就会变回active 查看文件仍能查看 没有问题了 ok 2.Hdfs的ha测试

    最新回复(0)