在hdfs中, NN只有一个, 但其中保存的数据尤其重要, 所以需要将元数据保存, 其中源数据有2个形式, fsimage 和 edit文件, 最简单的解决方法就是复制fsimage, 并在文件修改时同时修改 NNActive 和 NNStandby 中的edit, 保存在第三方的QJM中, 所以多个NN除了active接受用户请求外, 无其他区别

首先是, 集群规划:

可以看到NN是有1和2组成active和standby的, 之前说过NN需要有DNN免密登录的权限, 所以, 两台分别设置其他三台的免密登录

1, 多台NN间切换, 通过zookeeper来实现的

1) 安装zookeeper.3.4.6.tar.gz, 并创建 conf/zoo.cfg文件

tickTime=
dataDir=/var/lib/zookeeper
clientPort=
initLimit=
syncLimit=
server.=192.168.208.106::
server.=192.168.208.107::
server.=192.168.208.108::

2), 创建data目录和log目录(mkdir -p)

3), 在 ${dataDir}/下面 配置节点信息 myid, 跟上面的server.x保持一致




4), 启动, cd /usr/opt/zookeeper3.4.6/bin

zkServer.sh start

5), 链接内存数据库, 通过get 和ls 等命令可查看数据库中的内容

zkCli.sh

zookeeper启动后, 就不要关闭了...

zk启动脚本:

脚本启动不管用的, 把环境变量配置在 ~/.bashrc下, 因为ssh分为登陆和非登陆, 读取配置文件的顺序不同

#!/bin/bash
host=(node2 node3 node4) start() {
for i in ${host[@]}
do
echo start $i
ssh -o StrictHostKeyChecking=no root@$i "/usr/local/zookeeper-3.4.11/bin/zkServer.sh start"
ssh -o StrictHostKeyChecking=no root@$i "jps"
echo start $i done
done
} stop() {
for i in ${host[@]}
do
echo stop $i
ssh -o StrictHostKeyChecking=no root@$i "/usr/local/zookeeper-3.4.11/bin/zkServer.sh stop"
ssh -o StrictHostKeyChecking=no root@$i "jps"
echo stop $i done
done
} case "$1" in start)
start
;; stop)
stop
;; *)
echo "Usage: start|stop"
;; esac

2, 修改hdfs的配置文件

2.1), 删除masters, 不需要SNN了

rm -rf /usr/opt/hadoop-2.5./etc/hadoop

2.2) 删除原集群中的数据文件

rm -rf /opt/hadoop

2.3) hdfs-site.xml

servername, zookeeper 使用

<property>
<name>dfs.nameservices</name>
<value>hdfscluster</value>
</property>

节点协议( 有几个nameNode定义几个)

<property>
<name>dfs.ha.namenodes.hdfscluster</name>
<value>nn1,nn2</value>
</property>

rpc协议( 文件上传下载使用)

<property>
<name>dfs.namenode.rpc-address.hdfscluster.nn1</name>
<value>192.168.208.106:</value>
</property>
<property>
<name>dfs.namenode.rpc-address.hdfscluster.nn2</name>
<value>192.168.208.107:</value>
</property>

http协议

<property>
<name>dfs.namenode.http-address.hdfscluster.nn1</name>
<value>192.168.208.:</value>
</property>
<property>
<name>dfs.namenode.http-address.hdfscluster.nn2</name>
<value>192.168.208.:</value>
</property>

qjm节点, journalNodes节点, 用于缓存edits文件, uri, 分号隔开

<property>
<name>dfs.namenode.shared.edits.dir</name>
 <value>qjournal://192.168.208.107:8485;192.168.208.108:8485;192.168.208.109:8485/hdfscluster</value>
</property>

帮助客户端获得activeNameNode

<property>
<name>dfs.client.failover.proxy.provider.hdfscluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

远程登陆, 需要ssh密钥文件

<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_dsa</value>
</property>

journalNode 数据存放的目录

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/journalNode/data</value>
</property>

2.4) core-site.xml, 修改下入口即可

<property>
<name>fs.defaultFS</name>
<value>hdfs://hdfscluster</value>
</property>

3, 启用自动切换

3.1), hdfs-site.xml

<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>

3.2), core-site.xml, 更改一个配置即可, hadoop.tmp.dir仍然保留

<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.208.106:,192.168.208.107:,192.168.208.108:</value>
</property>

4, 启动journalNode

hadoop-daemon.sh start journalnode

查看日志检查是否成功启动

停止: hadoop-daemon.sh stop journalnode

lgos/hadoop-root-journalnode-node4.log

5, 格式化其中一个NN

hdfs namenode -format

6, 拷贝fsimage 到另一台 NN上, 或者手动拷贝过去也可以

#启动刚刚格式化的NN
hadoop-daemon.sh start namenode
#在没有格式化的NN上执行
hdfs namenode -bootstrapStandby
#启动第二个NN
hadoop-daemon.sh start namenode

7, 初始化zookeeper, 在active的NN上执行

hdfs zkfc -formatZK

8, 启动

start-dfs.sh

排错时, 可用jps命令查看集群端口号, 然后kill -9, 或者 killall java

ps: 记得上个博客的配置, slaves等

 以后启动时, 先启动3台zookeeper, 然后 start-dfs.sh 即可以了

非常坑, 因为私钥文件root前面没有加 / 表明根目录, 卡了一个小时!!!!

系列来自尚学堂

11-hdfs-NameNode-HA-wtihQJM解决单点故障问题的更多相关文章

  1. HDFS NameNode HA 部署文档

    简介: HDFS High Availability Using the Quorum Journal Manager Hadoop 2.x 中,HDFS 组件有三个角色:NameNode.DataN ...

  2. Apache hadoop namenode ha和yarn ha ---HDFS高可用性

    HDFS高可用性Hadoop HDFS 的两大问题:NameNode单点:虽然有StandbyNameNode,但是冷备方案,达不到高可用--阶段性的合并edits和fsimage,以缩短集群启动的时 ...

  3. HDFS namenode 高可用(HA)搭建指南 QJM方式 ——本质是多个namenode选举master,用paxos实现一致性

    一.HDFS的高可用性 1.概述 本指南提供了一个HDFS的高可用性(HA)功能的概述,以及如何配置和管理HDFS高可用性(HA)集群.本文档假定读者具有对HDFS集群的组件和节点类型具有一定理解.有 ...

  4. HDFS的HA(高可用)

    HDFS的HA(高可用) 概述 (1)实现高可用最关键的策略是[消除单点故障].HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA. (2)Hadoop2.0 之 ...

  5. hadoop2—namenode—HA原理详解

    在hadoop1中NameNode存在一个单点故障问题,也就是说如果NameNode所在的机器发生故障,那么整个集群就将不可用(hadoop1中有个SecorndaryNameNode,但是它并不是N ...

  6. CDH4.1基于Quorum-based Journaling的NameNode HA

    几个星期前, Cloudera发布了CDH 4.1最新的更新版本,这是第一个真正意义上的独立高可用性HDFS NameNode的hadoop版本,不依赖于特殊的硬件或外部软件.这篇文章从开发者的角度来 ...

  7. Hadoop2.0 Namenode HA实现方案

    Hadoop2.0 Namenode HA实现方案介绍及汇总 基于社区最新release的Hadoop2.2.0版本,调研了hadoop HA方面的内容.hadoop2.0主要的新特性(Hadoop2 ...

  8. Hadoop2之NameNode HA详解

    在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameN ...

  9. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置

    通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置 配置H ...

随机推荐

  1. Docker搭建 MySQL 主从复制

    为什么选 Docker 搭建主从复制需要两个以上的MySQL, 使用 Docker 非常方便.如果以前没用过,找个简单的文档看看,熟悉一下命令. 搭建过程 1.下载镜像 docker pull mys ...

  2. GoF设计模式学习-单例模式

    1.目的 控制实例的个数,类设计者应该保证只有一个实例,不能将此责任[只有一个实例]强制交给类使用者. 2.整体实现 1.单线程单例模式的实现. using System; using System. ...

  3. mdadm详细使用手册

    1. 文档信息 当前版本 1.2 创建人 朱荣泽 创建时间 2011.01.07 修改历史 版本号 时间 内容 1.0 2011.01.07 创建<mdadm详细使用手册>1.0文档 1. ...

  4. 单元测试工具Numega BoundsChecker

    1 前言 我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法. NuMega是一个动态测试工具,主要应用于白盒测试.该工具的特点是学习简单.使用方便.功能 ...

  5. MySQLdb & pymsql

    python有两个模块可以连接和操作mysql数据库,分别是MySQLdb和pymysql,python3建议使用pymysql MySQLdb安装 pip install mysql-python ...

  6. (zxing.net)解码

    //图片路径 string imgPath = @"D:\barcode.png"; //解码通用类 IBarcodeReader reader = new BarcodeRead ...

  7. 使用ABP框架踩过的坑系列3

    从架构角度来讲,ApplicationService究竟应该如何定位,一种说法是直接对应用例UseCase, 也就是直接对应UI, 这个UI是广义的,不仅仅是浏览器的页面,也包括API调用.还是从我曾 ...

  8. C#之使用CefSharp创建客户端

    安装NuGet包 在Visio studio中右击解决方案,选择管理NuGet包,搜索安装CefSharp.WinForms. 配置工作 (1)首先右击项目选择属性,在"生成"选项 ...

  9. EF动态linq的两种方式

    网上收集的资源  我怕遗忘就在自己博客记录下,有些我忘记原文地址了请见谅 这个链接的动态sql方式是 where("c=>c.id==id") https://weblogs ...

  10. 全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南

    之前介绍了odoo的安装和初始设置以及数据库,下面来介绍odoo的模块安装和界面汉化. 1.4 模块安装和界面汉化 Odoo 的功能包含在不同的模块中, 刚创建的数据库除 Odoo 的核心模块外, 其 ...