• Linux下单机实现Zookeeper集群


    安装配置JAVA开发环境

    下载ZOOKEEPER

    zookeeper下载地址

    在下载的zookeeper目录里创建3个文件,zk1,zk2,zk3,用于存放每个集群的数据文件。

    并在三个目录下创建data和logs目录

    配置配置文件

    将conf目录下的zoo-sample.cfg 更改为zoo1.cfg , zoo2.cfg ,zoo3.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.
    # 内存数据库保存的模糊快照的目录,如果某个服务器为集群中的一台,则id文件也保存在该目录下
    #  快照异步写入,不会阻塞
    dataDir= ../zk1/data
    dataLogDir= ../zk1/logs
    # the port at which the clients will connect
    # TCP监听端口
    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
    # server.myid=IP:PORT1;PORT2
    #PORT1:服务器与集群中的LEADER服务器交换信息的端口
    #PORT2:万一集群中的LEADER挂了,需要一个端口来重新进行宣讲 选出新的LEADER 
    server.1=127.0.0.1:2881:3881
    server.2=127.0.0.1:2882:3882
    server.3=127.0.0.1:2883:3883

    三个文件的区别是这三个配置 

    zoo1.cfg

    dataDir= ../zk1/data
    dataLogDir= ../zk1/logs
    clientPort=2181

    zoo2.cfg

    dataDir= ../zk2/data
    dataLogDir= ../zk2/logs
    clientPort=2182

    zoo3.cfg 

    dataDir= ../zk3/data
    dataLogDir= ../zk3/logs
    clientPort=2183
    • tickTime: 基本事件单元,以毫秒为单位。这个时间是作为zookeeper服务器之间或客户端与服务器间维持心跳的时间。也就是每隔tickTime时间就会发送一个心跳
    • dataDir: 存储内存中数据库快照的位置,就是zookeeper保存数据的目录,默认情况下,zookeeper将数据的日志问也保存在这个目录里
    • clientPort: 客户端连接zookeeper服务器的端口,默认是2181,zookeeper会监听这个端口,接收客户端的访问请求
    • initLimit: 这个配置项是用来配置zookeeper接收客户端初始化连接能忍受多少个心跳时间间隔数。当已经超过10个心跳的时间(tickTime)长度后,zookeeper服务器还没有接收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000 = 20 秒
    • syncLimit: 这个配置项标识Leader和Follower之间发送消息,请求和应答的长度,最长不能超过多少个tickTime的时间长度,总的时间长度就是 5 * 2000 = 10秒
    • server.myid=IP:Port1:Port2, myid是服务器的编号,一个正整数,一般是0、1、2、3等待,port1表示的是服务器与集群中的Leader服务器交换信息的端口,Port2表示的是万一集群中的Leader服务器宕机了,需要一个端口来重新进行宣讲,选出一个新的Leader,如果是不同的机器,可以选用相同的端口,由于本次测试是在单机上进行,因此选用不同的端口。

    创建myid文件

    在每个目录下的data目录里创建 myid文件,文件内容分别为1,2,3.

    启动服务

    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh start ../conf/zoo1.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo1.cfg
    Starting zookeeper ... STARTED
    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh start ../conf/zoo2.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo2.cfg
    Starting zookeeper ... STARTED
    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh start ../conf/zoo3.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo3.cfg
    Starting zookeeper ... STARTED

    查看服务状态

    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh status ../conf/zoo1.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo1.cfg
    Mode: follower
    lgj@lgj
    -Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh status ../conf/zoo2.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo2.cfg Mode: leader
    lgj@lgj
    -Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh status ../conf/zoo3.cfg ZooKeeper JMX enabled by default Using config: ../conf/zoo3.cfg Mode: follower

    可以看到,ZK2选举成为了leader,另外两个为follower。

    客户端连接测试

    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkCli.sh  -server 127.0.0.1:2181
    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkCli.sh  -server 127.0.0.1:2182
    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkCli.sh  -server 127.0.0.1:2183

     分别连接三个集群节点

    在任何一个集群节点进行操作,其他集群也会同步更新。

    在zk2创建节点

    [zk: 127.0.0.1:2182(CONNECTED) 1] create /test1 ""
    Created /test1

     在zk1查看节点

    [zk: 127.0.0.1:2181(CONNECTED) 1] ls /
    [zookeeper, test1]

     LEADER宕机测试

    停止zk2节点工作

    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh stop ../conf/zoo2.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo2.cfg
    Stopping zookeeper ... STOPPED

    等待超时时间到,重新查看各个节点的状态,可以看到,zk2停止运行之后,在看zk3被集群选举为leader.

    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh status ../conf/zoo1.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo1.cfg
    Mode: follower
    
    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh status ../conf/zoo2.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo2.cfg
    Error contacting service. It is probably not running.
    
    lgj@lgj-Lenovo-G470:~/java/zookeeper-3.4.13/bin$ ./zkServer.sh status ../conf/zoo3.cfg 
    ZooKeeper JMX enabled by default
    Using config: ../conf/zoo3.cfg
    Mode: leader
  • 相关阅读:
    20165204 缓冲区溢出漏洞实验
    2019-2020 1 20175230 实验四 外设驱动程序设计
    2019-2020-1 20175230 实验三 并发程序
    2019-2020-1 20175208 20175218 20175230 实验二 固件程序设计
    2019-2020-1 20175208 20175218 20175230 实验一 开发环境的熟悉
    2018-2019-2 20175230 实验五《网络编程与安全》实验报告
    2018-2019-2 20175230实验四 《Android开发基础》实验报告
    2018-2019 2 20175230《Java程序设计》第十一周学习总结
    2018-2019-2 20175230 实验三《Java面向对象程序设计》实验报告
    MyCP
  • 原文地址:https://www.cnblogs.com/lgjlife/p/10546014.html
Copyright © 2020-2023  润新知