配置HA的hdfs 和zookeeper搭建

1、NN–Active 如果挂掉了 failoveController Active 会报告给另外一个 然后将NN–Active降下去 NN–Standby 升起来
2、如果failoveController Active 挂掉 NN–Active没挂 另外一个也会收到 然后将NN–Active 降下去 将NN–Standby 升起来
所以搭建HA 还需要搭建Zookeeper

ZKFC(ZKFailoverController)作用: 监测NameNode,进行active, standby 之间的切换
ZKFailoverController主要职责:
健康监测:周期性的向它监控的NN发送健康探测命令,从而来确定某个NameNode是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态
会话管理:如果NN是健康的,zkfc就会在zookeeper中保持一个打开的会话,如果NameNode同时还是Active状态的,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,当这个NN挂掉时,这个znode将会被删除,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active
当宕机的NN新启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠,需要注意,目前仅仅支持最多配置2个NN
master选举:如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断那个NameNode为Active状态

JN (JournalNode) 两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信
必须允许至少3个节点。当然可以运行更多,但是必须是奇数个

1、配置hdfs-site.xml 其他配置全删

①、 名字服务的逻辑名称,两个NameNode做一个来使用,通过该逻辑名称引用

dfs.nameservices
mycluster

②、- mycluster有两个namenode服务

dfs.ha.namenodes.mycluster
nn1,nn2

③、指定nn1和nn2具体是哪个进程 -->

dfs.namenode.rpc-address.mycluster.nn1
node001:8020


dfs.namenode.rpc-address.mycluster.nn2
node002:8020

④、 指定浏览器访问nn1和nn2的地址 -->
http://node001:50070访问nameNode -->

dfs.namenode.http-address.mycluster.nn1
node001:50070


dfs.namenode.http-address.mycluster.nn2
node002:50070

⑤、<指定journalnode所在的位置 -->

dfs.namenode.shared.edits.dir
qjournal://node001:8485;node002:8485;node003:8485/

⑥、 如果发生了故障转移,如何跟另一台通信,
杀死那个Active的NameNode,因为要发生切换了 -->

dfs.ha.fencing.methods
sshfence

<property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_dsa</value>  	<!--存放私有的key的地方-->
</property>
<!-- 启用自动故障转移操作 -->
<property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
</property>

<!-- 客户端如何跟Active的NameNode通信 -->
<property>
    <name>dfs.client.failover.proxy.provider.mycluster</name>		  <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

2、配置 core-site.xml 其他配置全删

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

<!-- 指定journalnodes写的状态信息保存的位置 -->
<property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/var/hadoop/ha/jdns</value>
</property>

<!-- 指定zookeeper所在的位置 -->
<property>
    <name>ha.zookeeper.quorum</name>
    <value>node002:2181,node003:2181,node004:2181</value> 
</property>

<!-- 指定hadooop.tmp.dir的路径 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/var/hadoop/ha</value>
</property>

2.1、将这两个文件 拷贝到其他节点去

3、配置好zookeeper

4、使用hadoop-daemon.sh start journalnode在每个JN节点上启动journalnode进程

5、在node001上格式化HDFS

6、在node002上同步数据

a 在node001上启动namenode进程hadoop-daemon.sh start namenode
b、hdfs namenode -bootstrapStandby

7、hdfs zkfc -formatZK在node001上执行,在zookeeper上初始化HA状态

8、start-dfs.sh启动集群

hadoop-daemon.sh start namenode
hadoop-daemon.sh stop namenode

stop-dfs.sh停止集群
zkServer.sh stop停止各个zookeeper进程

zkServer.sh start启动各个zookeeper进程
start-dfs.sh启动ha集群

cd /opt/hadoop-2.6.5/etc/hadoop

1、vim core-site.xml

然后复制

fs.defaultFS
hdfs://mycluster

    <!-- 指定journalnodes写的状态信息保存的位置 -->
<property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/var/hadoop/ha/jns</value>
</property>
                            
    <!-- 指定zookeeper所在的位置 -->
<property>
        <name>ha.zookeeper.quorum</name>
        <value>node002:2181,node003:2181,node004:2181</value>
</property>

    <!-- 指定hadooop.tmp.dir的路径 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/var/hadoop/ha</value>
</property>

2、vim hdfs-site.xml

然后复制上去


dfs.nameservices
mycluster


dfs.ha.namenodes.mycluster
nn1,nn2

    <!-- 指定nn1和nn2具体是哪个进程 -->
<property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>node001:8020</value>
</property>
<property>
        <name>dfs.namenode.rpc-address.mycluster.nn2</name>
        <value>node002:8020</value>
</property>

    <!-- 指定浏览器访问nn1和nn2的地址 -->
    <!-- http://node001:50070访问nameNode -->
<property>
        <name>dfs.namenode.http-address.mycluster.nn1</name>
        <value>node001:50070</value>
</property>
<property>
        <name>dfs.namenode.http-address.mycluster.nn2</name>

    <!-- 指定journalnode所在的位置 -->
<property>
         <name>dfs.namenode.shared.edits.dir</name>
         <value>qjournal://node001:8485;node002:8485;node003:8485/mycluster</value>   
<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>

    <!-- 启用自动故障转移操作 -->
<property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
</property>

    <!-- 客户端如何跟Active的NameNode通信 -->
<property>
        <name>dfs.client.failover.proxy.provider.mycluster</name>
        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 </property>

3、将这两个文件 拷贝到其他节点去

scp core-site.xml hdfs-site.xml node002:pwd
scp core-site.xml hdfs-site.xml node003:pwd
scp core-site.xml hdfs-site.xml node004:pwd

4、安装zooKeeper

先将zooKeeper 拉进linux里
tar -zxf zookeeper-3.4.9.tar.gz -C /opt

5、node002免秘登录配置到其他节点 因为node002 是作为node001的替代品 所以 需要其他也免秘登录

node002 的/root/.ssh cd ~/.ssh
scp id_dsa.pub node003:pwd/node002.pub
scp id_dsa.pub node004:pwd/node002.pub

node003的 的/root/.ssh
cat node002.pub >> authorized_keys

node004的 的/root/.ssh
cat node002.pub >> authorized_keys

6、node02配置zooKeeper

在 这个 /opt/zookeeper-3.4.9/conf
复制一份 cp zoo_sample.cfg zoo.cfg
vim zoo.cfg

7、node002拷贝zooKeeper到node003、node004

scp -r zookeeper-3.4.9/ node003:pwd
scp -r zookeeper-3.4.9/ node004:pwd

8、被zookeeper选中的节点 node002、node003、node004都要写

mkdir -p /var/hadoop-data/ha/zookeeper
echo 1 > /var/hadoop-data/ha/zookeeper/myid
数字是根据创建的ip 来根据写的

9、最后配置一下变量

配置node002、node003、node004
vim /etc/profile 或者 vim ~/.bash_profile

分别source /etc/profile

然后每个 zkServer.sh start 启动
zkServer.sh status 查看启动状态

二、然后开始启动启动journalnode进程

1、命令:hadoop-daemon.sh start journalnode 需要启动node01 node02 node03 这三个节点

2、node001 格式化hdfs hadoop namenode -format
3、 在node001上启动namenode进程hadoop-daemon.sh start namenode
4、secondary node(node002)节点上 :hdfs namenode -bootstrapStandby

两台机器在 /var/hadoop/ha/dfs/name/current 的 VERSION数据是一样的 因为 secondary node 是第二个备用的

启动单台机器的zkfc hadoop-daemon.sh start zkfc

在node001
3、hdfs zkfc -formatZK在node001上执行,在zookeeper上初始化HA状态
4、start-dfs.sh 启动集群
5、start-dfs.sh 在node001运行
hadoop-daemon.sh start namenode 启动namenode
hadoop-daemon.sh stop namenode 关闭namenode

关闭
stop-dfs.sh 是关闭所有的节点 在node001运行
但是zookeeper 是不关的 需要手动关闭 zkServer.sh stop
stop-dfs.sh停止集群
zkServer.sh stop停止各个zookeeper进程

启动
zkServer.sh start启动各个zookeeper进程
start-dfs.sh启动ha集群

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值