11-hdfs-NameNode-HA-wtihQJM解决单点故障问题
在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解决单点故障问题的更多相关文章
- HDFS NameNode HA 部署文档
简介: HDFS High Availability Using the Quorum Journal Manager Hadoop 2.x 中,HDFS 组件有三个角色:NameNode.DataN ...
- Apache hadoop namenode ha和yarn ha ---HDFS高可用性
HDFS高可用性Hadoop HDFS 的两大问题:NameNode单点:虽然有StandbyNameNode,但是冷备方案,达不到高可用--阶段性的合并edits和fsimage,以缩短集群启动的时 ...
- HDFS namenode 高可用(HA)搭建指南 QJM方式 ——本质是多个namenode选举master,用paxos实现一致性
一.HDFS的高可用性 1.概述 本指南提供了一个HDFS的高可用性(HA)功能的概述,以及如何配置和管理HDFS高可用性(HA)集群.本文档假定读者具有对HDFS集群的组件和节点类型具有一定理解.有 ...
- HDFS的HA(高可用)
HDFS的HA(高可用) 概述 (1)实现高可用最关键的策略是[消除单点故障].HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA. (2)Hadoop2.0 之 ...
- hadoop2—namenode—HA原理详解
在hadoop1中NameNode存在一个单点故障问题,也就是说如果NameNode所在的机器发生故障,那么整个集群就将不可用(hadoop1中有个SecorndaryNameNode,但是它并不是N ...
- CDH4.1基于Quorum-based Journaling的NameNode HA
几个星期前, Cloudera发布了CDH 4.1最新的更新版本,这是第一个真正意义上的独立高可用性HDFS NameNode的hadoop版本,不依赖于特殊的硬件或外部软件.这篇文章从开发者的角度来 ...
- Hadoop2.0 Namenode HA实现方案
Hadoop2.0 Namenode HA实现方案介绍及汇总 基于社区最新release的Hadoop2.2.0版本,调研了hadoop HA方面的内容.hadoop2.0主要的新特性(Hadoop2 ...
- Hadoop2之NameNode HA详解
在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameN ...
- 通过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 ...
随机推荐
- Docker搭建 MySQL 主从复制
为什么选 Docker 搭建主从复制需要两个以上的MySQL, 使用 Docker 非常方便.如果以前没用过,找个简单的文档看看,熟悉一下命令. 搭建过程 1.下载镜像 docker pull mys ...
- GoF设计模式学习-单例模式
1.目的 控制实例的个数,类设计者应该保证只有一个实例,不能将此责任[只有一个实例]强制交给类使用者. 2.整体实现 1.单线程单例模式的实现. using System; using System. ...
- mdadm详细使用手册
1. 文档信息 当前版本 1.2 创建人 朱荣泽 创建时间 2011.01.07 修改历史 版本号 时间 内容 1.0 2011.01.07 创建<mdadm详细使用手册>1.0文档 1. ...
- 单元测试工具Numega BoundsChecker
1 前言 我在本文中详细介绍了测试工具NuMega Devpartner(以下简称NuMega)的使用方法. NuMega是一个动态测试工具,主要应用于白盒测试.该工具的特点是学习简单.使用方便.功能 ...
- MySQLdb & pymsql
python有两个模块可以连接和操作mysql数据库,分别是MySQLdb和pymysql,python3建议使用pymysql MySQLdb安装 pip install mysql-python ...
- (zxing.net)解码
//图片路径 string imgPath = @"D:\barcode.png"; //解码通用类 IBarcodeReader reader = new BarcodeRead ...
- 使用ABP框架踩过的坑系列3
从架构角度来讲,ApplicationService究竟应该如何定位,一种说法是直接对应用例UseCase, 也就是直接对应UI, 这个UI是广义的,不仅仅是浏览器的页面,也包括API调用.还是从我曾 ...
- C#之使用CefSharp创建客户端
安装NuGet包 在Visio studio中右击解决方案,选择管理NuGet包,搜索安装CefSharp.WinForms. 配置工作 (1)首先右击项目选择属性,在"生成"选项 ...
- EF动态linq的两种方式
网上收集的资源 我怕遗忘就在自己博客记录下,有些我忘记原文地址了请见谅 这个链接的动态sql方式是 where("c=>c.id==id") https://weblogs ...
- 全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南
之前介绍了odoo的安装和初始设置以及数据库,下面来介绍odoo的模块安装和界面汉化. 1.4 模块安装和界面汉化 Odoo 的功能包含在不同的模块中, 刚创建的数据库除 Odoo 的核心模块外, 其 ...