多个 zookeeper 服务器启动问题
Multiple zookeeper server start issue
我可以在我的 windows 机器上 运行 单个 zookeeper 实例。但在单个 windows 机器上成功设置多个 zookeeper 实例。
按照指南,我执行了以下步骤:
正在将多个 zoo.conf 文件创建到 conf 文件夹中。结构如下
zookeeper_home---|
配置--|
zoo.cfg
zoo_2.cfg
zoo_3.cfg
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
- 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
- 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
- 由于每个文件都有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
启动
所以如果你想启动三个实例:
- 要么复制三个zookeeper包,每个包都有自己的zoo.cfg,然后对每个
c:\opt\zookeeper1\bin>zkServer.cmd
、c:\opt\zookeeper2\bin>zkServer.cmd
、c:\opt\zookeeper3\bin>zkServer.cmd
[=31=执行以下命令]
- 或者你可以修改zkEnv.cmd,让它接受参数作为配置文件,你可以执行
zkServer.cmd ../conf/zoo.cfg
、zkServer.cmd ../conf/zoo2.cfg
、zkServer.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整篇文章,所以附上图片
我可以在我的 windows 机器上 运行 单个 zookeeper 实例。但在单个 windows 机器上成功设置多个 zookeeper 实例。
按照指南,我执行了以下步骤:
正在将多个 zoo.conf 文件创建到 conf 文件夹中。结构如下
zookeeper_home---| 配置--| zoo.cfg zoo_2.cfg zoo_3.cfg
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
- 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
- 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
- 由于每个文件都有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
所以如果你想启动三个实例:
- 要么复制三个zookeeper包,每个包都有自己的zoo.cfg,然后对每个
c:\opt\zookeeper1\bin>zkServer.cmd
、c:\opt\zookeeper2\bin>zkServer.cmd
、c:\opt\zookeeper3\bin>zkServer.cmd
[=31=执行以下命令] - 或者你可以修改zkEnv.cmd,让它接受参数作为配置文件,你可以执行
zkServer.cmd ../conf/zoo.cfg
、zkServer.cmd ../conf/zoo2.cfg
、zkServer.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整篇文章,所以附上图片