乐趣区

zookeeper伪集群搭建及遇到的坑

今天搭建了 zookeeper 的单机伪集群,记录一下防止忘记
安装
从官网下载安装包解压到本地目录,比如 D:/zookeeper-3.4.10
配置
为了运行 3 个 zookeeper 服务端进程,新建存放这 3 个进程运行和配置数据的目录,比如叫 z1、z2、z3。在这 3 个目录下都建一个 data 目录用于存放进程运行时的数据,接着在这 3 个目录都新建一个叫 myid 的文件,内容分别为 1、2、3(即 z1 下 myid 的内容是 1、z2 下 myid 的内容是 2、z3 下 myid 的内容是 3),最后在这 3 个目录下都建一个 .cfg 结尾的配置文件。z1 目录下的配置文件叫 z1.cfg,内容如下:tickTime=2000initLimit=10syncLimit=5dataDir=$(z1 所在目录的全路径)/dataclientPort=2981server.1=127.0.0.1:2222:2223server.2=127.0.0.1:3333:3334server.3=127.0.0.1:4444:4445
z2 目录下的配置文件叫 z2.cfg,内容如下:tickTime=2000initLimit=10syncLimit=5dataDir=$(z2 所在目录的全路径)/dataclientPort=2982server.1=127.0.0.1:2222:2223server.2=127.0.0.1:3333:3334server.3=127.0.0.1:4444:4445z3 目录下的配置文件叫 z3.cfg,内容如下:tickTime=2000initLimit=10syncLimit=5dataDir=$(z3 所在目录的全路径)/dataclientPort=2983server.1=127.0.0.1:2222:2223server.2=127.0.0.1:3333:3334server.3=127.0.0.1:4444:4445tickTime:服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每隔 tickTime 时间就会发送一个心跳,以毫秒为单位。也是 zookeeper 中的时间单元,zookeeper 中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session 的最小超时时间是 2*tickTime。initLimit 和 syncLimit:都是表示连接的心跳数,具体含义暂时可以不用管。dataDir:zookeeper 保存数据的目录,默认情况下 zookeeper 写数据的日志文件也保存在这个目录里。clientPort:客户端连接服务器的端口,zookeeper 会监听这个端口,接受客户端的访问请求。server.N:XXXX:P1:P2。其中 N 表示服务器编号,XXXX 表示该服务器的 IP 地址,P1 和 P2 是两个 TCP 端口号,分别用于仲裁和 Learder 选举。服务器编号也对应着上面配置的 myid 文件的内容,比如上面 z1 目录下的 myid 内容是 1,也就是这里的 server.
启动
分别启动 3 个 zookeeper 进程,启动时使用上面新建的配置文件启动 z1 :sh $(zookeeper 压缩包解压后的全路径)/bin/zkServer.sh start $(z1 所在目录的全路径)/z1.cfg 启动 z2 :sh $(zookeeper 压缩包解压后的全路径)/bin/zkServer.sh start $(z2 所在目录的全路径)/z2.cfg 启动 z3 :sh $(zookeeper 压缩包解压后的全路径)/bin/zkServer.sh start $(z3 所在目录的全路径)/z3.cfg 当看到如下信息表示 zookeeper 的进程启动好了

在启动的过程中遇到一个坑,在启动好后用 sh $(zookeeper 压缩包解压后的全路径)/bin/zkServer.sh status $(z2 所在目录的全路径)/z2.cfg 报错如下解决过程如下:使用./zkServer.sh start-foreground /mnt/d/zkData/z1/zoo.cfg 使 zookeeper 前台运行,抛如下异常但是我已经写了 myid 文件了,怎么找不到呢?其实是这样,我在 windows10 的 linux sub system 里运行的,不能用 windows 里的路径格式,要改为这样的格式 /mnt/d/{zookeeper myid 路径},这个坑是 windows 的坑啊。。。
验证
用 telnet 连接客户端端口,如下说明成功

退出移动版