6.HDFS集群—搭建HA高可用模式

HA高可用模式搭建

节点结构
HOSTNNJNNDNZKFCZK
tongyuzhe1***
tongyuzhe2*****
tongyuzhe3***
tongyuzhe4**
配置zookeeper
  1. 将zookeeper解压到/opt/bigdata/目录下,进入zookeeper下的conf文件夹

  2. 复制一份zoo_sample.cfg重命名为zoo.cfg

    cp zoo_sample.cfg zoo.cfg
    
  3. 修改zoo.cfg

    dataDir=/var/bigdata/hadoop/zk
    
    #文件下面新开一行
    #设置zk服务器,以及优先级,数字大为主节点
    server.1=tongyuzhe2:2888:3888
    server.2=tongyuzhe3:2888:3888
    server.3=tongyuzhe4:2888:3888
    
    #2888端口:主从状态
    #3888端口:主节点挂掉重新选举状态
    
  4. 新建文件夹

    mkdir /var/bigdata/hadoop/zk
    
  5. 创建文件myid

    #里面写上数字,例如数字1
    #指的是这台主机优先级为数字1
    #数字越大优先级越高
    
    #将2追加至myid
    echo 2 > myid
    
  6. 将zk目录添加到环境变量

    #path上一行追加
    export ZOOKEEPER_HOME=/opt/bigdata/zookeeper-3.4.6
    
    #path后添加
    $ZOOKEEPER_HOME/bin
    
  7. 分发至其他节点

    scp -r zookeeper-3.4.6/ tongyuzhe3:/opt/bigdata/	
    
  8. 启动zookeeper

    #启动ZK
    zkServer.sh start
    
    #查看服务状态
    zkServer.sh status
    
    #会提示:It is probably not running.
    #服务不在运行但是jps里进程还在,因为1台主机不过半无法形成势力范围
    
    #再启动第2个ZK节点会发现:
    #节点1:Mode: follower
    #节点2:Mode: leader
    
    #再运行节点3,会发现节点3是,Mode: follower
    #因为有leader正在运行,没必要再选出新leader
    
配置hadoop的xml
1. 将两个配置文件用scp分发到每一台节点
core-site.xml
<!--
	多NN节点情况下寻找mycluster名字配置文件
	mycluster:集群映射目录,用于识别不同集群挂载不同目录,避免集群冲突
-->
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://mycluster</value>
</property>

<!--zookeeper节点位置-->
<property>
	<name>ha.zookeeper.quorum</name>
	<value>tongyuzhe2:2181,tongyuzhe3:2181,tongyuzhe4:2181</value>
</property>
hdfs-site.xml
1. 跟Secondary相关的删除,因为用不到了。
2. 存储位置全都从full改为ha目录,换个新目录。
NN名称映射
<!--自定义逻辑名称mycluster-->
<property>
	<name>dfs.nameservices</name>
	<value>mycluster</value>
</property>

<!--mycluster一对多映射别名-->
<property>
	<name>dfs.ha.namenodes.mycluster</name>
	<value>nn1,nn2</value>
</property>

<!--mycluster名具体到主机-->
<!--rpc链接-->
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn1</name>
	<value>tongyuzhe1:8020</value>
</property>
<property>
	<name>dfs.namenode.rpc-address.mycluster.nn2</name>
	<value>tongyuzhe2:8020</value>
</property>
<!--外部web页-->
<property>
	<name>dfs.namenode.http-address.mycluster.nn1</name>
	<value>tongyuzhe1:50070</value>
</property>
<property>
	<name>dfs.namenode.http-address.mycluster.nn2</name>
	<value>tongyuzhe2:50070</value>
</property>
JN配置
<!--JN启动位置-->
<property>
	<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://tongyuzhe1:8485;tongyuzhe2:8485;tongyuzhe3:8485/mycluster</value>
</property>
<!--JN数据存储路径-->
<property>
	<name>dfs.journalnode.edits.dir</name>
	<value>/var/bigdata/hadoop/ha/dfs/jn</value>
</property>
HA切换指定代理类
<!--HA角色切换时指定哪个代理类和实现方法,以及发送消息-->
<property>
	<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
配置免密
<!--指定使用免密模式-->
<property>
	<name>dfs.ha.fencing.methods</name>
	<value>sshfence</value>
</property>

<!--
	配置密钥目录。
	免密使用的两个场景:管理脚本,ZKFC。
-->
<property>
	<name>dfs.ha.fencing.ssh.private-key-files</name>
	<value>/root/.ssh/id_rsa</value>
</property>
zkfc开机自启动
<!--
	开启自动化:
	启动HDFS时,自动启动zkfc(故障自动转移)。
-->
<property>
	<name>dfs.ha.automatic-failover.enabled</name>
	<value>true</value>
</property>
注意事项
1. 格式化或是启动集群,要先操作JN,否则直接操作NN的话,数据还是会被JN给恢复。
2. 格式化NN时,只需要格式化一个,然后第二台同步第一台,如果也格式化第二个会生成另外一个集群ID。
3. 启动start-dfs.sh脚本的机器需要将公钥分发给别的节点
4. HA依赖ZK集群
5. ZKFC会用免密的方式控制自己和其他NN节点的NN状态
初始化启动
  1. 启动JN

    #每一台JN服务器都启动
    #启动JN
    hadoop-daemon.sh start journalnode 
    
  2. 查看JN日志(选做)

    #进入日志目录
    cd $HADOOP_HOME/logs
    
    #查看对应主机名日志
    tail -f hadoop-root-journalnode-tongyuzhe1.log
    
  3. 选择一个NN格式化

    #只有第一次搭建做,以后不用做
    hdfs namenode -format
    
  4. 启动NN

    启动这个格式化的NN,以备另外一台同步
    hadoop-daemon.sh start namenode
    
  5. 同步NN

    #在另外一台NN机器中同步
    hdfs namenode -bootstrapStandby
    
  6. 格式化ZK

    #选择一台主机格式化
    
    #格式化zk
    #只有第一次搭建做,以后不用做
    hdfs zkfc -formatZK
    
    #可以打开zk客户端控制界面,用于查看目录
    zkCli.sh
    
    #格式化zk其实就是在创建节点目录
    
  7. 启动HDFS

    start-dfs.sh
    
理论检验
#强制杀死进程
#-9:制杀死进程,不执行退出流程
kill -9 进程号

#查看谁是活跃节点(锁)
#进入zk客户端执行 
get /hadoop-ha/myCluster/ActiveStandbyElectorLock 

#单独启动NameNode节点
hadoop-daemon.sh start namenode

#断开网卡链接
ifconfig eth33 down
#恢复网卡链接
ifconfig eth33 up
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值