资讯专栏INFORMATION COLUMN

ZooKeeper安装、效果演示

RyanHoo / 2797人阅读

摘要:高可用一个开源的分布式的为分布式应用提供服务的项目提供原语集合以便分布式应用可以在它之上构建更高层次的同步服务角色观察者模式领导者负责进行投票的发起及决议更新状态学习者接受客户端请求并发挥客户端返回结果参与投票接受请求转发给不参与投票只

高可用(HA) -- ZooKeeper ZooKeeper

一个开源的分布式的,为分布式应用提供服务的项目

提供原语集合以便分布式应用可以在它之上构建更高层次的同步服务

角色

观察者模式:
        leader:        领导者负责进行投票的发起及决议, 更新状态
        学习者:
            follower:    接受客户端请求并发挥客户端返回结果,参与投票
            observer:    接受请求,转发给leader,不参与投票,只同步leader.
        客户端:    发起请求
    观察者模式的应用: 软件皮肤, 编辑工具设置

安装

伪分布模式

1)安装ZooKeeper (再次注意权限)
$ tar -zxf  /opt/software/zookeeper-3.4.5.tar.gz -C  /opt/modules/

2)新建一个Zookeeper的data目录
$ mkdir zkData   --//可以不用手动创建,启动自动生成

3)修改配置文件${ZOOKEEPER_HOME}/conf  (注意: 配置文件为模板,需拷贝重名为zoo.cfg)
$cd /opt/modules/zookeeper-3.4.5/    ##切换目录到zookeeper-3.4.5
$ cp conf/zoo_sample.cfg conf/zoo.cfg  ##拷贝
$ vi conf/zoo.cfg                        ##修改12行,设置以下:
dataDir=/opt/modules/zookeeper-3.4.5/zkData

4)启动zookeeper
$bin/zkServer.sh start
$ jps   #查看java进程如下
2088 QuorumPeerMain

5)查看zookeeper的状态
$bin/zkServer.sh status        #信息如下
JMX enabled by default
Using config: /opt/modules/zookeeper-3.4.5/bin/../conf/zoo.cfg
Mode: standalone    #单机模式
6)一些命令的认识
$ bin/zkCli.sh    #进入zookper
 help        #查看命令
 quit        #退出
 create     #创建 -e临时znode -s 自动编号
      get path    #查看信息
     ls path     #查看指定目录的列表
      rmr path    #删除

ls /   #查看根目录
create -e /myapp  msg #创建目录
 get /myapp             #查看myapp创建信息
 ls / watch            # 添加关注事件
rmr    /myapp        #删除触发关注事件
 quit 

完全分布模式

1.安装JDK(3台PC都要安装JDK)
2.安装完全分布式集群
1)安装zk(注意权限)
    $ tar -zxvf /opt/software/zookeeper-3.4.5.tar.gz -C /opt/modules/
2)配置zoo.cfg文件
    $ cd /opt/modules/zookeeper-3.4.5/
    $ cp conf/zoo_sample.cfg conf/zoo.cfg
    $ vi conf/zoo.cfg         #修改添加以下内容
    #修改
    dataDir=/opt/modules/zookeeper-3.4.5/zkData
    #15行添加
    server.1=centos01.ibeifeng.com:2888:3888
    server.2=centos02.ibeifeng.com:2888:3888
    server.3=centos03.ibeifeng.com:2888:3888
3)创建zkData目录,在zkData目录目录下创建myid文件,分发
    $ mkdir zkData
    $ touch zkData/myid
    $ cd /opt/modules/    #切到modules下
    从pc1分发到pc2, pc3
    $ scp -r zookeeper-3.4.5/ centos02.ibeifeng.com:/opt/modules/
    $ scp -r zookeeper-3.4.5/ centos03.ibeifeng.com:/opt/modules/

4) 修改pc1, pc2, pc3 的myid文件
    $ cd /opt/modules/zookeeper-3.4.5/
    $ vi zkData/myid    #根据conf/zoo.zfg中绑定的server.n对应
    pc1的zkData/myid内容是1
    pc2的zkData/myid内容是2
    pc3的zkData/myid内容是3
5)启动3台的zookeeper
    $ bin/zkServer.sh start

6)检查进程
    $ jps
    3050 QuorumPeerMain
    3111 Jps

8)检查并核对状态3台的状态
    $ bin/zkServer.sh status

Zookeeper shell命令
bin/zkCli.sh -server 主机名:2181 或者 bin/zkCli.sh

I) 文件系统(数据结构)
        Znode
            1.代表zookeeper文件系统中的一个目录,
            2.代表客户端(如:Namenode)
        
        |---/
            |---app
                |---app1
                |---app2
                |---app2

        动物 -> hadoop 中的节点 Namende


    II) Watch事件
        1.NameNode启动,然后向Zookeeper,触发注册事件,同时会创建一个唯一的目录
        2.通过心跳信息,来确认节点的状态(存活或者宕机)
        3.如果宕机,长时间未收到心跳,触发节点丢失事件,删除这个目录

    III)投票(偶数可能僵持)
        leader的候选人必须获取到超过半数的选票 n+1
        zookeeper集群中存活的节点数据必须过半数
Namenode HA
一)安装hadoop
此步骤要求,ip映射,主机名,jdk安装配置,hadoop解压
如果分布式已经搭建好,需对三台进行操作.
    注意删除data,logs目录!!!
    注意修改搭建前,停止相关进程
    删除/tmp/*.pid文件 (注意不要全删了!!!!,是删除/tmp/的以pid结尾的)
    $ rm /tmp/*.pid
    免密登录
    可以按照下面的步骤修改即可
二)配置环境文件
    检查
    hadoop-env.sh
    mapred-env.sh
    yarn-env.sh
    配置
    export JAVA_HOME=/opt/modules/jdk1.7.0_67

三)配置hdfs文件

1.========core-site.xml========
    
    
        fs.defaultFS
        hdfs://ns1
    

    
        hadoop.tmp.dir
        /opt/modules/hadoop-2.5.0/data
    

    2.=======hdfs-site.xml=============
    
    
        dfs.replication
        3
    
    
    
        dfs.permissions.enabled
        false
    
    
    
        dfs.nameservices
        ns1
    
    
    
    
        dfs.ha.namenodes.ns1
        nn1,nn2
    
    
    
    
        dfs.namenode.rpc-address.ns1.nn1
        centos01.ibeifeng.com:8020
    
    
    
        dfs.namenode.http-address.ns1.nn1
        centos01.ibeifeng.com:50070
    
    
    
    
        dfs.namenode.rpc-address.ns1.nn2
        centos02.ibeifeng.com:8020
    
    
    
        dfs.namenode.http-address.ns1.nn2
        centos02.ibeifeng.com:50070
    
    
    
    
        dfs.namenode.shared.edits.dir
        qjournal://centos01.ibeifeng.com:8485;centos02.ibeifeng.com:8485;centos03.ibeifeng.com:8485/ns1
    
    
    
        dfs.journalnode.edits.dir
        /opt/modules/hadoop-2.5.0/journal
    
    
        
    
        dfs.ha.fencing.methods
        
            sshfence
            shell(/bin/true)
        
    
    
    
    
        dfs.ha.fencing.ssh.private-key-files
        /home/hadoop/.ssh/id_rsa
    
    
    
    
        dfs.ha.fencing.ssh.connect-timeout
        30000
    
    
    3. ==========配置 slaves start==========
    centos01.ibeifeng.com
    centos02.ibeifeng.com
    centos03.ibeifeng.com



    4. ============向第二台和第三台分发数据===============
    $ cd /opt/modules/hadoop-2.5.0/
    
    其他两台机器安装了hadoop,直接覆盖对应的配置文件
    (如果没有其他的服务器没有hadoop,可以把hadoop-2.5.0分发到其他两个服务器上)
    $ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml  centos02.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/
    $ scp etc/hadoop/core-site.xml etc/hadoop/hdfs-site.xml  centos03.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/
    
    使用命令检查是否分发成功在对应的pc上
    $  cat etc/hadoop/hdfs-site.xml 
    $ cat etc/hadoop/core-site.xml 
    切换到
    $ cd /opt/modules/zookeeper-3.4.5/


四) 启动相关进程
1. ============启动zookeeper相关===========
    $ bin/zkServer.sh start
    $ jps    #查看进程
        3129 QuorumPeerMain
    $ bin/zkServer.sh status # 查看状态
        JMX enabled by default
        Using config: /opt/modules/zookeeper-3.4.5/bin/../conf/zoo.cfg
        Mode: leader  #或者是follower




    2. ============启动HDFS HA  start=================
    ## 注意:每一个步骤都严格按照以下步骤执行
        $ cd /opt/modules/hadoop-2.5.0/        #切换目录
        1. 启动journalnode
            $ sbin/hadoop-daemon.sh start journalnode    #在三台分别启动, 日志同步的journalnode进程
        $ jps #三台服务器显示
            3422 Jps
            3281 QuorumPeerMain
            3376 JournalNode
    2. 格式化namenode    在第一台上操作!!!!! 切记
        $ bin/hdfs namenode -format
        出现提示:successfully formatted
    3. 在第一台(centos01)上启动namenode
        $ sbin/hadoop-daemon.sh start namenode  #jps 查看是否启动
    4. 切到第二台(centos02.ibeifeng.com)服务器,让另一个namenode 拷贝元数据
        $ bin/hdfs namenode -bootstrapStandby
        $ sbin/hadoop-daemon.sh start namenode    #启动namenode
    
        可以在web页面观察,现在只有namenode启动了, 都是standby状态
        http://centos01.ibeifeng.com:50070
        http://centos02.ibeifeng.com:50070
    
    5. 使用以下命令将一个namenode  active
        $ bin/hdfs haadmin -transitionToActive nn2 #将第二个namenode作为active
        http://centos02.ibeifeng.com:50070  发现centos2服务器的namenode 时active状态

开启故障自动转移

先停止HDFS进程,在机器centos01上执行
    $ sbin/stop-dfs.sh
    
    1.配置故障转移 ( 追加)
        1)=====core-site.xml
            
            
                ha.zookeeper.quorum
                centos01.ibeifeng.com:2181,centos02.ibeifeng.com:2181,centos03.ibeifeng.com:2181
            

        2)====hdfs-site.xml
            
            
                dfs.ha.automatic-failover.enabled
                true
            
            
            
                dfs.client.failover.proxy.provider.ns1
                org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
            

    2.分发配置文件
        $ scp etc/hadoop/core-site.xml  etc/hadoop/hdfs-site.xml centos02.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/
        $ scp etc/hadoop/core-site.xml  etc/hadoop/hdfs-site.xml centos03.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/

    3.启动故障转移服务
            1)首先停止hdfs和zk
            $ sbin/stop-dfs.sh
            ##关闭zk(3台服务器)
            $ bin/zkServer.sh stop        
            重启##启动zk(3台服务器)
            $ bin/zkServer.sh start        

            2)初始化zkfc[PC1也就是nn1]  在第一台(cd /opt/modules/hadoop-2.5.0/  )
            $ bin/hdfs zkfc -formatZK  ##初始化ZKFC
            17/12/22 04:50:55 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns1 in ZK.
            17/12/22 04:50:55 INFO zookeeper.ZooKeeper: Session: 0x2607abd3bee0000 closed
            17/12/22 04:50:55 INFO zookeeper.ClientCnxn: EventThread shut down
            3) 启动hdfs 在centos01启动即可
            $ sbin/start-dfs.sh            ##启动hdfs
        
            $ bin/hdfs haadmin -getServiceState nn1     #查看nn1状态
            $ bin/hdfs haadmin -getServiceState nn2     #查看nn2状态
    4. 查看三台进程,确认开启
            $jps 
            [centos01]
            [hadoop@centos01 hadoop-2.5.0]$ jps
            3281 QuorumPeerMain
            4793 JournalNode
            4610 DataNode
            5137 Jps
            4518 NameNode
            4974 DFSZKFailoverController

            [centos02]
            [hadoop@centos02 hadoop-2.5.0]$ jps
            3129 QuorumPeerMain
            4270 Jps
            4176 DFSZKFailoverController
            3892 NameNode
            3955 DataNode
            4046 JournalNode

            [centos03]
            [hadoop@centos03 hadoop-2.5.0]$ jps
            3630 Jps
            3553 JournalNode
            3022 QuorumPeerMain
            3465 DataNode
    5. 模拟active namenode 故障
        $ kill -9 4518  #杀死active namenode  standby namenode 切为active
        $ sbin/hadoop-daemon.sh start namenode  #于该主机再次namenode  ,为standby
ResourceManager HA
    集群规划
    PC01        PC02            PC03
    NameNode    NameNode
    ZKFC        ZKFC
                ResourceManager    ResourceManager
    DataNode    DataNode        DataNode
    JournalNode    JournalNode        JournalNode    
    NodeManager    NodeManager        NodeManager
    ZooKeeper    ZooKeeper        ZooKeeper

    先停止hdfs进程
    $ sbin/hadoop-daemon.sh start namenode

    1) 修改配置文件

        =====yarn-site.xml (覆盖)
        
            yarn.nodemanager.aux-services
            mapreduce_shuffle
        
        
        
            yarn.log-aggregation-enable
            true
        
        
        
            yarn.log-aggregation.retain-seconds
            86400
        

        
        
           yarn.resourcemanager.ha.enabled
           true
        
            
        
           yarn.resourcemanager.cluster-id
           rmcluster
        

        
           yarn.resourcemanager.ha.rm-ids
           rm1,rm2
        

        
            yarn.resourcemanager.hostname.rm1
            centos02.ibeifeng.com
        

        
            yarn.resourcemanager.hostname.rm2
            centos03.ibeifeng.com
        

         
        
           yarn.resourcemanager.zk-address  
           centos01.ibeifeng.com:2181,centos02.ibeifeng.com:2181,centos03.ibeifeng.com:2181
        

         
        
           yarn.resourcemanager.recovery.enabled
           true
        

         
        
           yarn.resourcemanager.store.class
           org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
        


    2) 分发配置文件
        将yarn-site.xml分发到其他两台
        $ scp etc/hadoop/yarn-site.xml  centos02.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/
        $ scp etc/hadoop/yarn-site.xml  centos03.ibeifeng.com:/opt/modules/hadoop-2.5.0/etc/hadoop/
    3) 启动ResourceManagere
        先在centos01启动hdfs
            $ sbin/start-dfs.sh 
        在rm1(centos02)上:
            $ sbin/start-yarn.sh

        在rm2(centos03)上手动启动:
            $ sbin/yarn-daemon.sh start resourcemanager
    4) 检查进程是否启动
        $ jps

        [hadoop@centos01 hadoop-2.5.0]$ jps
        6737 DFSZKFailoverController
        6559 JournalNode
        3281 QuorumPeerMain
        6375 DataNode
        6975 Jps
        6277 NameNode
        6854 NodeManager

        [hadoop@centos02 hadoop-2.5.0]$ jps
        5471 DataNode
        4917 ResourceManager
        5403 NameNode
        3129 QuorumPeerMain
        6020 Jps
        5866 NodeManager
        5687 DFSZKFailoverController
        5564 JournalNode

        [hadoop@centos03 hadoop-2.5.0]$ jps
        3022 QuorumPeerMain
        4373 NodeManager
        4174 DataNode
        4577 Jps
        4263 JournalNode
        4518 ResourceManager

    5) 查看serverid为rm1的resourcemanager节点的状态
        $ bin/yarn rmadmin -getServiceState rm1
        或网页查看
        http://centos02.ibeifeng.com:8088/cluster
        http://centos03.ibeifeng.com:8088/cluster
        
    6) 测试ResourceManager HA
        kill -9  4917    然后查看web界面的访问
        centos03变为active
        
        再次启动centos02的resourcemanager  状态为standby

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8657.html

相关文章

  • kafka docker

    摘要:基本概念介绍可以简单理解为一个节点多个节点构成整个集群某种类型的消息的合集它是在物理上的分组多个会被分散地存储在不同的节点上单个的消息是保证有序的但整个的消息就不一定是有序的包含消息内容的指定大小的文件由文件和文件组成一个由多个文件组成文件 基本概念介绍 Broker 可以简单理解为一个 Kafka 节点, 多个 Broker 节点构成整个 Kafka 集群;Topic 某种类型的消息...

    Towers 评论0 收藏0
  • 分布式(一) 搞定服务注册与发现

    摘要:但同样又会出现新的问题,如果服务提供者的节点新增或者删除消费者这边根本就不知道情况。通常来说消费者是需要知道服务提供者的网络地址才能发起远程调用,这块内容和我上面的需求其实非常类似。 showImg(https://segmentfault.com/img/remote/1460000016156768?w=2048&h=1337); 背景 最近在做分布式相关的工作,由于人手不够只能我...

    Integ 评论0 收藏0
  • 慕课网_《HBase入门》学习总结

    摘要:慕课网入门学习总结时间年月日星期一说明本文部分内容均来自慕课网。而且底层使用,本身也有备份高性能底层的数据结构和有序排列等架构上的独特设计,使用具有非常高的写入性能。 慕课网《HBase入门》学习总结 时间:2018年06月11日星期一 说明:本文部分内容均来自慕课网。@慕课网:https://www.imooc.com 教学源码:无 学习源码:无 第一章:课程介绍 1-1 课程...

    zsy888 评论0 收藏0
  • 阿里,B站小伙伴奉献的中高级大数据运维学习课程与规划,高薪原来需要掌握这些

    摘要:大数据运维更偏向于大数据生态的大数据应用运维。后面我们会上大数据开发课程,其实大数据开发和大数据运维课程很多跟运维课程是重叠的,只是掌握的着重点不同。因材施教,重点会针对每个小伙伴的情况,基本水平,确立职业规划,基于职业规划定制学习计划。 一.大数据运维相关答疑与概述 1.0 课程与老师介绍...

    renweihub 评论0 收藏0
  • 学习kafka教程(二)

    摘要:目标了解会使用过程首先示例代码以上它实现了算法,该算法从输入文本计算单词出现的直方图。 欢迎关注公众号:n平方如有问题或建议,请后台留言,我会尽力解决你的问题。 本文主要介绍【KafkaStreams】 简介 Kafka Streams编写关键任务实时应用程序和微服务的最简单方法,是一个用于构建应用程序和微服务的客户端库,其中输入和输出数据存储在Kafka集群中。它结合了在客户端编写和...

    Prasanta 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<