美文网首页
ZooKeeper---搭建

ZooKeeper---搭建

作者: 量产型炮灰工程师 | 来源:发表于2017-06-05 15:13 被阅读0次

    简要


    ZooKeeper的安装模式分为三种,分别为:单机模式(stand-alone)、集群模式和集群伪分布模式。ZooKeeper 单机模式的安装相对比较简单,如果第一次接触ZooKeeper的话,建议安装ZooKeeper单机模式或者集群伪分布模式。

    安装


    • 首先去官网下载ZooKeeper稳定版
    • 自备JDK 6以上环境
    • 解压 tar xvzf zookeeper-x.x.x.tar
    • 配置文件
      在zookeeper x.x.x/conf 下,将zoo_sample.cfg 复制一份为zoo.cfg
      配置项解析:
      • tickTime=2000
        基本事件单元,以毫秒为单位。它用来控制心跳和超时,默认情况下最小的会话超时时间为两倍的 tickTime

      • dataDir=/tmp/zookeeper
        存储内存中数据库快照的位置;
        注意 应该谨慎地选择日志存放的位置,使用专用的日志存储设备能够大大地提高系统的性能,如果将日志存储在比较繁忙的存储设备上,那么将会在很大程度上影响系统的性能。

      • dataLogDir
        这个操作将管理机器把事务日志写入到“ dataLogDir ”所指定的目录,而不是“ dataDir ”所指定的目录。这将允许使用一个专用的日志设备并且帮助我们避免日志和快照之间的竞争。

      • clientPort=2181
        ** 监听客户端连接的端口**

      • maxClientCnxns=60
        这个操作将限制连接到 ZooKeeper 的客户端的数量,限制并发连接的数量,它通过 IP 来区分不同的客户端。此配置选项可以用来阻止某些类别的 Dos 攻击。将它设置为 0 或者忽略而不进行设置将会取消对并发连接的限制

      • initLimit=10(集群配置)
        此配置表示,允许 follower (相对于 leader 而言的“客户端”)连接并同步到 leader 的初始化连接时间,它以 tickTime 的倍数来表示。当超过设置倍数的 tickTime 时间,则连接失败。

      • syncLimit=5(集群配置)
        此配置表示, leader 与 follower 之间发送消息,请求和应答时间长度。如果 follower 在设置的时间内不能与leader 进行通信,那么此 follower 将被丢弃。

      • autopurge.snapRetainCount=3
        这个参数和autopurge.purgeInterval搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。

      • autopurge.purgeInterval=1
        这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。

    单机版

    • 单机版zoo.cfg配置如下:
      clientPort=2181 dataDir=/tmp/zookeeper tickTime=2000
    • 启动方式
      直接在bin目录,运行 zkServer.sh start
    Paste_Image.png

    成功启动

    Paste_Image.png

    联机版

    • 联机版每台机器的zoo.cfg配置如下:
      tickTime=2000 dataDir=/tmp/zookeeper clientPort=2181 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=ip1:2887:3887 server.n=ip2:2888:3888 ... (实际上,有多少台机器,这边就要配多少个ip,联机版下组成集群,端口可以一样,但是在单机多实例下,端口必须不同,否则会有冲突,详细见下方)
    • 启动方式跟单机版一致(穷人只有一台vps,请自行测试)

    单机多实例版

    一台机器,启动多个zooKeeper

    • 单机多实例版每个实例的zoo.cfg配置如下:
      • zoo1.cfg:
        tickTime=2000 dataDir=/tmp/zookeeper/zk_data_1 clientPort=2181 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=localhost:2887:3887 server.2=localhost:2888:3888
      • zoo2.cfg:
        tickTime=2000 dataDir=/tmp/zookeeper/zk_data_2 clientPort=2182 initLimit=10 syncLimit=5 maxClientCnxns=60 server.1=localhost:2887:3887 server.2=localhost:2888:3888

    注意dataDir的路径是不一样的,clientPort也必须是不一样

    • 启动方式
      直接./zkServer.sh start zooX.cfg
    Paste_Image.png

    ** 然并卵,当查看输出文件的时候,你会发现根本就没跑起来,还抛异常了**

    Paste_Image.png
    2017-06-05 02:44:07,009 [myid:] - INFO [main:QuorumPeerConfig@124] - Reading configuration from: ./conf/zoo1.cfg 2017-06-05 02:44:07,448 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: localhost to address: localhost/127.0.0.1 2017-06-05 02:44:07,449 [myid:] - INFO [main:QuorumPeer$QuorumServer@149] - Resolved hostname: localhost to address: localhost/127.0.0.1 2017-06-05 02:44:07,459 [myid:] - WARN [main:QuorumPeerConfig@305] - No server failure will be tolerated. You need at least 3 servers. 2017-06-05 02:44:07,459 [myid:] - INFO [main:QuorumPeerConfig@352] - Defaulting to majority quorums 2017-06-05 02:44:07,462 [myid:] - ERROR [main:QuorumPeerMain@85] - Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing ./conf/zoo1.cfg at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:144) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:101) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78) Caused by: java.lang.IllegalArgumentException: /tmp/zookeeper/data1/myid file is missing at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:362) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:140) ... 2 more Invalid config, exiting abnormally
    之前一直想,它是怎么在同一台机器上,识别到自己就是server.1,并且使用对应的端口,它报的就是这个问题.
    解决方式: 在配置文件中的dataDir指定的目录下,创建一个myid的文件,里面的内容只有一个数字,就是server.x后面的x,例如zoo1.cfg,采用server.1的ip与端口,则在对应的dataDir下创建一个myid,并把数字写入 Paste_Image.png

    再重新跑起来,问题解决.

    测试对应的zooKeeper进程是否有正常运行,使用命令
    echo stat | nc yourZooKeeperIP yourZooKeeperPort
    有返回即正常

    Paste_Image.png

    ZooKeeper命令


    表 1 : ZooKeeper 四字命令

    ZooKeeper 四字命令 功能描述
    conf 输出相关服务配置的详细信息。
    cons 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息。包括“接受 / 发送”的包数量、会话 id 、操作延迟、最后的操作执行等等信息。
    dump 列出未经处理的会话和临时节点。
    envi 输出关于服务环境的详细信息(区别于 conf 命令)。
    reqs 列出未经处理的请求
    ruok 测试服务是否处于正确状态。如果确实如此,那么服务返回“imok ”,否则不做任何相应。
    stat 输出关于性能和连接的客户端的列表。
    wchs 列出服务器 watch 的详细信息。
    wchc 通过 session 列出服务器 watch 的详细信息,它的输出是一个与watch 相关的会话的列表。
    wchp 通过路径列出服务器 watch 的详细信息。它输出一个与 session相关的路径。

    下图 1 是 ZooKeeper 四字命令的简单用例:

    相关文章

      网友评论

          本文标题:ZooKeeper---搭建

          本文链接:https://www.haomeiwen.com/subject/cbgbfxtx.html