今天搭建了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:4445z2 目录下的配置文件叫 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连接客户端端口,如下说明成功