配置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


    dfs.ha.fencing.ssh.private-key-files
    /root/.ssh/id_dsa  	



    dfs.ha.automatic-failover.enabled
    true




    dfs.client.failover.proxy.provider.mycluster		  org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

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


    fs.defaultFS
    hdfs://mycluster




    dfs.journalnode.edits.dir
    /var/hadoop/ha/jdns




    ha.zookeeper.quorum
    node002:2181,node003:2181,node004:2181 




    hadoop.tmp.dir
    /var/hadoop/ha

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

    

        dfs.journalnode.edits.dir
        /var/hadoop/ha/jns

                            
    

        ha.zookeeper.quorum
        node002:2181,node003:2181,node004:2181


    

        hadoop.tmp.dir
        /var/hadoop/ha

2、vim hdfs-site.xml

然后复制上去


dfs.nameservices
mycluster


dfs.ha.namenodes.mycluster
nn1,nn2

    

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


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


    
    

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


        dfs.namenode.http-address.mycluster.nn2

    

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

        dfs.ha.fencing.methods
        sshfence



        dfs.ha.fencing.ssh.private-key-files
        /root/.ssh/id_dsa


    

        dfs.ha.automatic-failover.enabled
        true


    

        dfs.client.failover.proxy.provider.mycluster
        org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
 

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集群

你可能感兴趣的:(hdfs)