由于搜索应用solr使用了zookeeper进行集群部署。所以我就稍微研究了一下zookeeper的使用。此篇就记录一下我自己安装部署的过程。
由于鄙人么有好电脑,也么有多台电脑,所以只能在Windows环境上进行一下伪集群部署(也就是说多开几个应用和端口而已),进行集群模拟。
我部署是参照官方文档进行的,一般来说官方是最权威、最准确也是相对来说最简单的。zookeeper服务端部署官方文档地址:官方地址。需要注意的是文档中在Required Software下有这样一句话:
ZooKeeper runs in Java, release 1.6 or greater (JDK 6 or greater, FreeBSD support requires openjdk7)
zookeeper需呀jdk1.6(包括以上)的版本。
接下来记录我的部署过程:
1.下载zookeeper。地址:http://zookeeper.apache.org/releases.html;我下载的是zookeeper-3.3.6.tar.gz版本。
2.在测试目录(我原来为E:\探索研究\zookeeper)下创建文件夹server1、server2、server3(供模拟3个服务器)。
3.在每个sever文件夹下创建data文件夹(用于存放myid文件和数据)、datalog文件夹(用于配置zookeeper的dataLogDir属性)如果不单独配置则生成的写数据log也会存放在data文件夹里,为了稳定性和易操作,最好将数据和数据日志分离。
4.将zookeeper压缩包进行解压,然后复制到每个server文件夹下。此时的server文件夹就相当于独立的服务器啦。
5.根据官方文档进行一些配置。官方说法见下图:
所以,我在每个server下的data文件夹里创建了一个myid文件,分别写入1,2,3。然后配置zookeeper目录下的conf:进入conf文件夹,将zoo_sample.cfg复制一份重命名为zoo.cfg;修改zoo.cfg如下
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=5
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=2
# the directory where the snapshot is stored.
dataDir=E:/test/server1/data
dataLogDir=E:/test/server1/datalog
# the port at which the clients will connect
clientPort=2185
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
因为我的都在同一台机器上,所以用端口来控制,也就出现了下面这样的配置:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
需要确定每个server下的该文件中的clientPort是不一样的。
6.ok,到这里基本上部署完毕了。接下来就是启动,测试部署是否成功了。
启动3个cmd命令行窗口,分别打到各个server目录的zookeeper的bin目录下;然后均执行zkServer.cmd命令。等等所有窗口都到下图所示:
、
表明服务端启动成功。现在再启动一个命令行窗口,打到server1(其他也可)下的zookeeper的bin目录下,执行zkCli.cmd -server 127.0.0.1:2185。则会连接端口为2185的‘服务器’。随便输入命令则会打印出zookeeper的客户端操作命令列表:
ok。基本测试结束。部署成功了!
部署过程中出现了一些问题,总结一下:
1.配置路径有中文,如‘E:\探索研究\zookeeper\server1\data’;则zookeeper找不到这个路径,可能与编码有关,最好路径全英文。
如:
中文变成了?????....
2.启动server1的zookeeper时会一直报错:
2014-11-13 15:00:36,523 - WARN [WorkerSender Thread:QuorumCnxManager@384] - Can
not open channel to 2 at election address /127.0.0.1:3889
java.net.ConnectException: Connection refused: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
at sun.nio.ch.SocketAdaptor.connect(Unknown Source)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(Quorum
CnxManager.java:371)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxM
anager.java:340)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$Worke
rSender.process(FastLeaderElection.java:360)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$Worke
rSender.run(FastLeaderElection.java:333)
at java.lang.Thread.run(Unknown Source)
2014-11-13 15:00:37,535 - WARN [WorkerSender Thread:QuorumCnxManager@384] - Can
not open channel to 3 at election address /127.0.0.1:3890
java.net.ConnectException: Connection refused: no further information
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(Unknown Source)
at sun.nio.ch.SocketAdaptor.connect(Unknown Source)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(Quorum
CnxManager.java:371)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxM
anager.java:340)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$Worke
rSender.process(FastLeaderElection.java:360)
at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$Worke
rSender.run(FastLeaderElection.java:333)
at java.lang.Thread.run(Unknown Source)
其实这个不应该算错,因为部署的是集群,启动每个server时都会去轮询别的server,这时候别的server还未启动,所以连接不上,当所有的server都启动后,自然就达到稳定状态了。
暂时先这些~~
共勉!