多个 zookeeper 服务器启动问题

Multiple zookeeper server start issue

我可以在我的 windows 机器上 运行 单个 zookeeper 实例。但在单个 windows 机器上成功设置多个 zookeeper 实例。

按照指南,我执行了以下步骤:

  1. 正在将多个 zoo.conf 文件创建到 conf 文件夹中。结构如下

    zookeeper_home---| 配置--| zoo.cfg zoo_2.cfg zoo_3.cfg

  2. zoo.cfg

tickTime=2000
initLimit=10
syncLimit=5
dataDir=c:/opt/zookeeper/data
clientPort=2181
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
  1. zoo_2.cfg
 tickTime=2000
 initLimit=10
 syncLimit=5
 dataDir=c:/opt/zookeeper/data2
 clientPort=2182
 server.1=localhost:2888:3888
 server.2=localhost:2889:3889
 server.3=localhost:2890:3890
  1. zoo_3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=c:/opt/zookeeper/data3
clientPort=2183
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890
  1. 由于每个文件都有dataDir,我创建的文件夹为

c:/opt/zookeeper/data

c:/opt/zookeeper/data2

c:/opt/zookeeper/data3

还在上面的每个文件夹中分别创建了编号为1、2、3的myid文件。 现在每当我尝试以 c:\opt\zookeeper\bin>zkServer.cmd 启动服务器时 它抛出错误

Cannot open channel to 2 at election address localhost/127.0.0.1:3889

Cannot open channel to 3 at election address localhost/127.0.0.1:3890

java.net.ConnectException: Connection refused: connect

看起来服务器没有启动,但我如何才能并行启动这些服务器?或者我必须使用任何其他方法。

因为默认情况下,zkEnv.cmd 将使用 zoo.cfg 作为默认配置文件。如果您执行命令 c:\opt\zookeeper\bin>zkServer.cmd,那么只有一个实例以配置 zoo.cfg

启动

所以如果你想启动三个实例:

  1. 要么复制三个zookeeper包,每个包都有自己的zoo.cfg,然后对每个c:\opt\zookeeper1\bin>zkServer.cmdc:\opt\zookeeper2\bin>zkServer.cmdc:\opt\zookeeper3\bin>zkServer.cmd[=31=执行以下命令]
  2. 或者你可以修改zkEnv.cmd,让它接受参数作为配置文件,你可以执行zkServer.cmd ../conf/zoo.cfgzkServer.cmd ../conf/zoo2.cfgzkServer.cmd ../conf/zoo3.cfg

对于备选方案 #2,您还需要更新 log4j 配置,这样您就可以为每个实例设置不同的日志文件,所以很简单,只需复制 3 个文件夹,然后分别修改 zoo.cfg

查看代码:

zkEnv.cmd

set ZOOCFG=%ZOOCFGDIR%\zoo.cfg

可能您还没有在所有 zookeeper 实例的 dataDir 中创建 myid 文件。
为所有 zookeeper 实例制作此文件并写入相应的服务器 ID,例如第一个实例为 1,第二个实例为 2,第三个实例为 3。
保存所有文件并首先重新启动所有三个实例,然后检查它们的状态。

Google 有答案

你可以跟着detail instruction,我不能copy/paste整篇文章,所以附上图片