FULL-> HA: 基础环境: 增加NNs的ssh免密 应用搭建 zookeeper 格式化NN 格式化ZK 启动集群 Host NN NN JNN DN ZKFC ZK node01 1 1 1 node02 1 1 1 1 1 node03 1 1 1 node04 1 1 HA模式下:有一个问题,你的NN是2台?在某一时刻,谁是Active呢?client是只能连接Active
core-site.xml fs.defaultFs -> hdfs://node01:9000
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node02:2181,node03:2181,node04:2181</value>
</property>
hdfs-site.xml
#以下是 一对多 逻辑到物理节点的映射
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2
dfs.namenode.rpc-address.mycluster.nn1
node01:8020
dfs.namenode.rpc-address.mycluster.nn2
node02:8020
dfs.namenode.http-address.mycluster.nn1
node01:50070
dfs.namenode.http-address.mycluster.nn2
node02:50070
#以下是JN在哪里启动,数据存那个磁盘
dfs.namenode.shared.edits.dir
qjournal://node01:8485;node02:8485;node03:8485/mycluster
dfs.journalnode.edits.dir
/var/bigdata/hadoop/ha/dfs/jn
# HA角色切换的代理类和实现方法,我们用的ssh免密
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_dsa
#开启自动化 启动zkfc进程
dfs.ha.automatic-failover.enabled
true
流程:
基础设施
ssh免密:
1)启动start-dfs.sh脚本的机器需要将公钥分发给别的节点
2)在HA模式下,每一个NN身边会启动ZKFC,ZKFC会用免密的方式控制自己和其他NN节点的NN状态
应用搭建
HA 依赖 ZK 搭建ZK集群
修改hadoop的配置文件,并集群同步
初始化启动
1)先启动JN hadoop-daemon.sh start journalnode
2)选择一个NN 做格式化:hdfs namenode -format <只有第一次搭建做,以后不用做>
3)启动这个格式化的NN,已被另外一台同步 hadoop-daemon.sh start namenode
4)在另外一台机器中:hdfs namenode -bootstrapStandby
5)格式化ZK:hdfs zkfc -formatZK <只有第一次搭建做,以后不用做>
6)start-dfs.sh
使用
----实操:
1)停止之前的集群
2)免密:node01,node02
node02:
cd ~/.ssh
ssh-keygen -t dsa -P '' -f ./id_dsa
cat id_dsa.pub >> authorized_keys
scp ./id_dsa.pub node01:pwd/node02.pub
node01:
cd /.ssh
cat node02.pub >> authorized_keys
3)zookeeper 集群搭建 java语言开发 需要jdk 部署在node02,03,04
node02:
tar xf zook...tar.gz
mv zoo... /opt/bigdata
cd /opt/bigdata/zoo...
cd conf
cp zoo_sample.cfg zoo.cfg
vi zoo.cfg
datadir=/var/bigdata/hadoop/zk
server.1=node02:2888:3888
server.2=node03:2888:3888
server.3=node04:2888:3888
mkdir /var/bigdata/hadoop/zk
echo 1 > /var/bigdata/hadoop/zk/myid
vi /etc/profile
export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6
export PATH=JAVA_HOME/bin:HADOOP_HOME/sbin:$ZOOKEEPER_HOME/bin
. /etc/profile
cd /opt/bigdata
scp -r ./zookeeper-3.4.6 node03:node04:
zkServer.sh start
4)配置hadoop的core和hdfs
5)分发配置
每一台都分发
6)初始化:
1)先启动JN hadoop-daemon.sh start journalnode
2)选择一个NN 做格式化:hdfs namenode -format <只有第一次搭建做,以后不用做>
3)启动这个格式化的NN,已被另外一台同步 hadoop-daemon.sh start namenode
4)在另外一台机器中:hdfs namenode -bootstrapStandby
5)格式化ZK:hdfs zkfc -formatZK <只有第一次搭建做,以后不用做>
6)start-dfs.sh
使用验证:
1)去看jn的日志和目录变化
2)node04
zkCli.sh
ls /
启动之后可以看到锁:
get /hadoop-ha/mycluster/ActiveStandbyElectorLock
3)杀死namenode 杀死zkfc
kill -9 xxxx
a)杀死active NN
b)杀死active NN身边的zkfc
c)shutdown activeNN 主机的网卡: ifconfig eth0 down
2节点一直阻塞降级
如果恢复1上的网卡 ifconfig eth0 up
最终2 变成activepwd
scp -r ./zookeeper-3.4.6 node04:pwd
node03:
mkdir /var/bigdata/hadoop/zk
echo 2 > /var/bigdata/hadoop/zk/myid
*环境变量
. /etc/profile
node04:
mkdir /var/bigdata/hadoop/zk
echo 3 > /var/bigdata/hadoop/zk/myid
*环境变量
. /etc/profile
node02