• ZooKeeper的安装和配置过程


    工作中使用到了ZooKeeper做集群的管理工具,把ZooKeeper的安装和配置简单记录一下。

    首先是下载ZooKeeper,本来没什么好说的,只是自己疏忽犯了个低级错误,应该下载可执行文件的压缩包apache-zookeeper-x.x.x-bin.tar.gz,我下载成了源码的apache-zookeeper-x.x.x.tar.gz,结果导致启动时报错,找到不主类。

     下载完成压缩之后就可以进行配置了。也可以先建个软链接,如果以后ZooKeeper版本有变化,只要修改软链接即可。

     使用%ZK_HOME%来代表ZooKeeper的安装目录。

    tar -xzvf apache-zookeeper-3.5.6-bin.tar.gz

    ZooKeeper有两种运行模式,一个是集群模式,一个是单机模式。分别配置如下。

    1. 集群模式

    假设用三台机器来搭建ZooKeeper集群,IP地址为IP1,IP2,IP3

    (1) 配置zoo.cfg文件

    初次使用ZooKeeper,需要将%ZOO_HOME%/conf目录下的zoo_sample.cfg文件重命名为zoo.cfg,并且按照如下代码进行简单配置:

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/zs/zookeeper/zookeeper1/data
    dataLogDir=/home/zs/zookeeper/zookeeper1/log
    clientPort=2181
    server.1=IP1:2888:3888
    server.2=IP2:2888:3888
    server.3=IP3:2888:3888

    配置参数解释如下:

    a). tickTime:该参数单位是毫秒ms,用于配置ZooKeeper中最小时间单元的长度,很多运行时的时间间隔都是使用tickTime的倍数来表示的。

    b). initLimit:该参数要配置一个正整数N,表示tickTime的N倍。用于配置Leader服务器等待Follower启动,并完成数据同步的时间。Follower服务器在启动过程中,会与Leader建立连接并完成对数据的同步,从而确定自己对外提供服务的起始状态。Leader服务器允许Follower在initLimit时间内完成这个工作。

    c). syncLimit:该参数要配置一个正整数N,表示tickTime的N倍。用于配置Leader服务器和Follower之间进行心跳检测的最大延时时间。如果Leader服务器在syncLimit时间内无法获取到Follower的心跳检测响应,那么Leader就会认为该Follower已经脱离了和自己的同步。

    d). dataDir:用于配置ZooKeeper服务器存储快照文件的目录。默认情况下,如果没有配置参数dataLogDir,那么事务日志也会存储在这个目录中。考虑到事务日志的写性能直接影响ZooKeeper整体的服务能力,因此建议同时通过参数dataLogDir来配置ZooKeeper的事务日志的存储目录。

    e). dataLogDir:用于配置ZooKeeper服务器存储事务日志文件的目录。dataDir和dataLogDir都要确保有读写权限。

    f). clientPort:用于配置当前服务器对外的服务端口,客户端会通过该端口和ZooKeeper服务器创建连接。

    g). server.id=host:port:port:该参数用于配置组成ZooKeeper集群的机器列表,其中id即为ServerID,与每台服务器myid文件中的数字相对应。同时,在该参数中,会配置两个端口:第一个端口用于指定Follower服务器与Leader进行运行时通信和数据同步时所使用的端口,第二个端口则专门用于进行Leader选举过程中的投票通信。在ZooKeeper服务器启动的时候,其会根据myid文件中配置的ServerID来确定自己是哪台服务器,并使用对应配置的端口来时行启动。如果在实际使用过程中,需要在同一台服务器上部署多个ZooKeeper实例来构成伪集群的话,那么这些端口都需要配置成不同。

    (2) 创建myid文件

    在dataDir所配置的目录下,创建一个名为myid的文件,在该文件的第一行写上一个数字,即ServerID,和zoo.cfg中当前机器的编号对应上。例如,server.1的myid文件内容就是“1”。要确保每个服务器的myid文件中的数字不同,并且和自己所在机器的zoo.cfg中的server.id=host:port:port的id值一致。id的范围是1~255。

    (3) 重复(1)和(2)步,为所有机器配置zoo.cfg和myid文件。

    (4) 启动ZooKeeper。

    bin/zkServer.sh start

     有时虽然执行完启动命令后,显示STARTED,但ZooKeeper并没有真正运行,可以对应状态进行检测。在执行启动命令的目录下会生成Logs目录,记录启动的日志,若未成功启动,可在Logs目录查找原因。

    (5) 验证服务器

    要验证服务器有没有启动成功,可以telnet到ZooKeeper的端口,然后发送stat命令来验证

    如果出现以下输出信息,服务器就启动成功了。

    还可以使用zkServer.sh status 命令,查看ZooKeeper服务器的状态,如下图所示,说明该服务器是个follower。

    验证服务器时可能出现的问题如下:

    a). 如果使用telnet加stat命令验证,出现“stat is not executed because it is not in the whitelist.”报错,可以修改一下启动脚本,把ZooKeeper的指使添加到白名单。

    打开zkServer.sh脚本,在    if [ "x$SERVER_JVMFLAGS" != "x" ]   语句上方添加一条语句,把ZooKeeper的指使添加到白名单。

    ZOOMAIN="-Dzookeeper.4lw.commands.whitelist=* ${ZOOMAIN}"

    b). 如果使用telnet加stat命令验证,出现“This ZooKeeper instance is not currently serving requests”报错,其原因就是集群没有选出来leader,当集群里的结点只剩下一台,或者不足半数时,就会出现这个错误提示。 可以把配置集群里其他ZooKeeper服务器启动,或者查看各服务器之间网络是否不通。

    c). 如果使用zkServer.sh status命令,出现It is probably not running. 有可能是集群中其他服务器没有开启。要整个集群都开启再执行status命令,只开启一台服务器并验证会报错。也有可能是服务器真没启来,看查看一下输出日志。

    (6) 关闭服务器

    bin/zkServer.sh stop

    2. 伪集群模式

    ZooKeeper支持在一台服务器上启动多个ZooKeeper的实例,相互组成一个集群。不需要拷贝多个ZooKeeper的目录,就是同一个程序目录下,配置多个zoo.cfg文件即可。

    (1) 配置文件

    可以在conf目录下,创建三个配置文件,分别命名为zoo1.cfg、zoo2.cfg、zoo3.cfg,内容分别如下。注意,dataDir和dataLogDir配置不同的目录,IP地址均为本机的IP地址,但端口各不相同。

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/zs/zookeeper/zookeeper1/data
    dataLogDir=/home/zs/zookeeper/zookeeper1/log
    clientPort=2181
    server.1=IP1:2887:3887
    server.2=IP1:2888:3888
    server.3=IP1:2889:3889
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/zs/zookeeper/zookeeper2/data
    dataLogDir=/home/zs/zookeeper/zookeeper2/log
    clientPort=2182
    server.1=IP1:2887:3887
    server.2=IP1:2888:3888
    server.3=IP1:2889:3889
    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/zs/zookeeper/zookeeper3/data
    dataLogDir=/home/zs/zookeeper/zookeeper3/log
    clientPort=2183
    server.1=IP1:2887:3887
    server.2=IP1:2888:3888
    server.3=IP1:2889:3889

    (2) 创建myid文件

    在每个dataDir所配置的目录下,创建一个名为myid的文件,在该文件的第一行写上一个数字,即ServerID,和zoo1.cfg、zoo2.cfg、zoo3.cfg中当前机器的编号对应上。

    (3) 启动服务器

    因为只有一个ZooKeeper程序目录,在启动不同的实例时,要指定各自的配置文件,启动命令如下所示

    bin/zkServer.sh start conf/zoo1.cfg
    bin/zkServer.sh start conf/zoo2.cfg
    bin/zkServer.sh start conf/zoo3.cfg

     (4) 验证服务器

    bin/zkServer.sh status conf/zoo1.cfg
    bin/zkServer.sh status conf/zoo2.cfg
    bin/zkServer.sh status conf/zoo3.cfg

     (5) 关闭服务器

    bin/zkServer.sh stop conf/zoo1.cfg
    bin/zkServer.sh stop conf/zoo2.cfg
    bin/zkServer.sh stop conf/zoo3.cfg

    3. 单机模式

    ZooKeeper也支持单机部署,单机模式可以看做一种特殊的集群模式,整体配置流程与集群部署一致,不同的地方在于,zoo.cfg配置文件中,只需要配置一个server地址,而且不需要在dataDir目录下配置myid文件。

    (1) 配置cfg文件

    tickTime=2000
    initLimit=10
    syncLimit=5
    dataDir=/home/zs/zookeeper/zookeeper/data
    dataLogDir=/home/zs/zookeeper/zookeeper/log
    clientPort=2181
    server.1=IP1:2888:3888

    (2) 启动服务器

    bin/zkServer.sh start 

     (3) 验证服务器

    可以使用telnet 加stat命令验证,也可以使用zkServer.sh status 命令验证

    使用telnet 加stat命令验证,可以看到单机模式下服务器的Mode为standalone,集群模式下是Leader和Follower。

     使用zkServer.sh status 命令验证

     (4) 关闭服务器

    bin/zkServer.sh stop

    以上就是ZooKeeper的安装和配置过程。

  • 相关阅读:
    堆内存和栈内存
    链表
    爬虫---正则表达式
    剑指offer---二维数组中的查找
    基于C#开发的俄罗斯方块
    Java第十天
    软考错题合集之11-05-AM
    软考错题合集之11-11-AM
    软考错题合集之12-05-AM
    GOF之模板模式
  • 原文地址:https://www.cnblogs.com/zhaoshizi/p/12105143.html
Copyright © 2020-2023  润新知