zoukankan      html  css  js  c++  java
  • zookeeper(二):linux centos下安装zookeeper(单机和集群)

    下载

    http://zookeeper.apache.org/releases.html

    解压

    tar –zxvf zookeeper-3.4.6.tar.gz

    解压文件到"/usr/local/zookeeper-3.4.6".

    复制conf目录下的zoo_sample.cfg,并命名为zoo.cfg

    修改zoo.cfg配置文件

    # The number of milliseconds of each tick
    tickTime=2000
    # The number of ticks that the initial 
    # synchronization phase can take
    initLimit=10
    # The number of ticks that can pass between 
    # sending a request and getting an acknowledgement
    syncLimit=5
    # the directory where the snapshot is stored.
    # do not use /tmp for storage, /tmp here is just 
    # example sakes.
    dataDir=/datatmp/zookeeper/data
    dataLogDir=/datatmp/zookeeper/logs
    # the port at which the clients will connect
    clientPort=2181
    # the maximum number of client connections.
    # increase this if you need to handle more clients
    #maxClientCnxns=60
    #
    # Be sure to read the maintenance section of the 
    # administrator guide before turning on autopurge.
    #
    # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
    #
    # The number of snapshots to retain in dataDir
    #autopurge.snapRetainCount=3
    # Purge task interval in hours
    # Set to "0" to disable auto purge feature
    #autopurge.purgeInterval=1
    
    
    #2888,3888 are election port
    server.1=192.168.93.121:2888:38888

    配置详解

    1.2888端口号是zookeeper服务之间通信的端口

    2.888端口是zookeeper与其他应用程序通信的端口

    3.initLimit:这个配置项是用来配置Zookeeper接受客户端(这里所说的客户端不是用户连接Zookeeper服务器的客户端,而是Zookeeper服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒。

    4.syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒。

    5.server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。

    创建dataDir参数指定的目录

    配置文件zoo.cfg里的dataDir,我这里指的是“ /datatmp/zookeeper/data”,并在目录下创建文件,命名为“myid”。

    编辑“myid”文件

    在对应的IP的机器上输入对应的编号。如在zookeeper上,“myid”文件内容就是1。由于本次只在单点上进行安装配置,所以只有一个server.1。若还有其他服务器,比如地址为192.168.1.102,则在zoo.cfg文件中还需加入server.2=192.168.1.102:2888:3888。那么myid文件在192.168.1.102服务器上的内容就是2。至此,如果是多服务器配置,就需要将zookeeper-3.4.3目录拷贝到其他服务器,然后按照上述的方法修改myid。

     

    在/etc/profile文件中设置PATH

    修改profile文件:

    sudo vi /etc/profile
    export ZOOKEEPER_HOME=/home/hadooptest/zookeeper-3.4.3
    export PATH=$ZOOKEEPER_HOME/bin:$PATH
    source /etc/profile

    在防火墙中打开要用到的端口2181 2888 3888

    sudo chkconfig iptables on
    service iptables start

    编辑 /etc/sysconfig/iptables

    vi /etc/sysconfig/iptables

    增加以下内容:

    -A INPUT -m state --state NEW -m tcp -p tcp --dport 2181 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 2888 -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3888 -j ACCEPT

    重启防火墙

    service iptables restart

    检查防火墙状态

    service iptables status

    OH YEAH!!! 安装完毕!

    这个有可能报错,

    Job for iptables.service failed because the control process exited with error cod

    参考此处: https://blog.csdn.net/sinat_29821865/article/details/80982250

    https://blog.csdn.net/qq_37246351/article/details/88313418

     https://www.cnblogs.com/yrjns/p/12490809.html

    启动

    进入bin目录

    ./zkServer.sh start
    
    sh zkServer.sh start

    输入jps命令查看进程

    1573 QuorumPeerMain
    1654 Jps

    其中,QuorumPeerMain是zookeeper进程,启动正常。

     

    查看状态

    还是bin目录下

    ./zkServer.sh status
    
    sh zkServer.sh status
    -
    JMX enabled by default
    Using config: /usr/local/zookeeper-3.4.6/bin/../conf/zoo.cfg
    Mode: standalone

    4、启动客户端脚本:

    zookeeper-3.4.3/bin/zkCli.sh    -server   zookeeper:2181
    
    
    zookeeper-3.4.3/bin/zkCli.sh    -server   127.0.0.1:2181
    
    -- 超时   -r  表示只读
    zookeeper-3.4.3/bin/zkCli.sh  -timeout 5000  -r  -server   127.0.0.1:2181

    5、停止zookeeper进程:

    ./zkServer.sh stop
    
    
    sh zkServer.sh stop

    集群搭建

    和单机的区别不大,就是配置文件zoo.cfg里把所有的机器都加上

    server.1=192.168.93.121:2888:38888
    server.2=192.168.93.122:2888:38888
    server.3=192.168.93.123:2888:38888

    但是,记得集群里的server总数最好是单数,不要是双数

    然后就是不要忘记各个Server的dataDir目录里的myid文件的数字也要对应上。

    最后分别启动各个server就OK了。

    连接zookeeper 服务器

    yum install telnet

     使用命令操作zookeeper

    查看帮助

    [zk: 127.0.0.1:2181(CONNECTED) 0] h
    ZooKeeper -server host:port cmd args
        stat path [watch]    -- 查询某个节点的状态
        set path data [version]  -- 设置节点值  ,低下详细介绍
        ls path [watch]
        delquota [-n|-b] path   -- 删除配额
        ls2 path [watch]    -- 列出子节点 ,即节点的信息
        setAcl path acl
        setquota -n|-b val path   -- 配额节点 ,-n  限制子节点个数   -b  限制长度 
        history      -- 操作历史记录
        redo cmdno
        printwatches on|off
        delete path [version]    -- 只能删除无子节点的节点
        sync path
        listquota path  --  节点的配额情况
        rmr path  -- 循环删除节点,包括子节点
        get path [watch]
        create [-s] [-e] path data acl   -- 创建节点,顺序  临时或持久
        addauth scheme auth
        quit 
        getAcl path
        close 
        connect host:port

    列出某个节点下的所有节点,其中 zookeeper 是自带的节点

    [zk: 127.0.0.1:2181(CONNECTED) 1] ls /
    [node_5, zookeeper, node_10000000000]
    [zk: 127.0.0.1:2181(CONNECTED) 3] stat /
    cZxid = 0x0    -- 每次对数据节点的写操作意味着一次事务,这个表示事务id
    ctime = Thu Jan 01 08:00:00 CST 1970  -- 创建时间
    mZxid = 0x0    -- 最后一次更新时的事务id
    mtime = Thu Jan 01 08:00:00 CST 1970  -- 修改时间
    pZxid = 0x3    -- 子节点列表最后一次修改事务id,也就是对子节点的操作
    cversion = 1   -- 子节点的版本号
    dataVersion = 0   -- 数据版本号
    aclVersion = 0     -- 权限版本号
    ephemeralOwner = 0x0   -- 创建临时节点的事务id
    dataLength = 0     --  数据长度
    numChildren = 3     -- 当前节点的子节点个数
    [zk: 127.0.0.1:2181(CONNECTED) 5] stat /node_5
    cZxid = 0x3
    ctime = Thu Mar 12 17:09:53 CST 2020
    mZxid = 0x3
    mtime = Thu Mar 12 17:09:53 CST 2020
    pZxid = 0x3
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0

    得到 节点的数据

    [zk: 127.0.0.1:2181(CONNECTED) 6] get /node_5
    55
    cZxid = 0x3
    ctime = Thu Mar 12 17:09:53 CST 2020
    mZxid = 0x3
    mtime = Thu Mar 12 17:09:53 CST 2020
    pZxid = 0x3
    cversion = 0
    dataVersion = 0
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0

    设置节点,不带版本号时,每次设置版本号 + 1  ,带版本号时,必须 设置的版本和当前节点的数据版本号一致,否则设置不成功。

    [zk: 127.0.0.1:2181(CONNECTED) 14] get /node_5  
    1
    cZxid = 0x3
    ctime = Thu Mar 12 17:09:53 CST 2020
    mZxid = 0x8
    mtime = Thu Mar 12 22:36:46 CST 2020
    pZxid = 0x3
    cversion = 0
    dataVersion = 3     -- 当前数据版本 为 3
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 1
    numChildren = 0
    [zk: 127.0.0.1:2181(CONNECTED) 15] set /node_5 54 2  -- 设置数据版本为 2 
    version No is not valid : /node_5  -- 失败
    [zk: 127.0.0.1:2181(CONNECTED) 16] set /node_5 54 3  -- 设置数据版本为 3
    cZxid = 0x3
    ctime = Thu Mar 12 17:09:53 CST 2020
    mZxid = 0xa
    mtime = Thu Mar 12 22:37:23 CST 2020
    pZxid = 0x3
    cversion = 0
    dataVersion = 4     -- 设置成功,并且版本 + 1
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0
    [zk: 127.0.0.1:2181(CONNECTED) 17] set /node_5 55 6   -- 设置数据版本号为 6 ,失败
    version No is not valid : /node_5
    [zk: 127.0.0.1:2181(CONNECTED) 18] set /node_5 55 5   -- 设置数据版本号为 5 ,失败
    version No is not valid : /node_5
    [zk: 127.0.0.1:2181(CONNECTED) 19] set /node_5 55 4   --  设置数据版本号为 4 ,成功
    cZxid = 0x3
    ctime = Thu Mar 12 17:09:53 CST 2020
    mZxid = 0xd
    mtime = Thu Mar 12 22:38:09 CST 2020
    pZxid = 0x3
    cversion = 0
    dataVersion = 5
    aclVersion = 0
    ephemeralOwner = 0x0
    dataLength = 2
    numChildren = 0
    [zk: 127.0.0.1:2181(CONNECTED) 20] 

    参考:  https://www.cnblogs.com/shamo89/p/9689639.html

  • 相关阅读:
    六大关系整理
    pthread_create多线程执行顺序诡异现象
    WinForm中 事件 委托 多线程的应用
    伪ajax上传文件
    Webx小应用的实现整理与分析
    IL反编译的实用工具
    MVC4+WebApi+Redis Session共享练习(上)
    虚拟化平台cloudstack新版本的调试
    【c++】指针参数是如何传递内存的
    NPinyin 中文转换拼音代码
  • 原文地址:https://www.cnblogs.com/yrjns/p/12482838.html
Copyright © 2011-2022 走看看