首先在官网上下载zookeeper稳定版本,下载地址:http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.6/ 下载zookeeper-3.4.6.tar.gz,我下载的是3.4.6,不算太新也不算太旧。
zookeeper是一个分布式应用所设计的分布的、开源的协调服务,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,简化分布式应用,协调及其管理的难度,提高性能的分布式服务。
zookeeper本身是可以以Standalone模式安装运行,不过它在分布式Zookeeper集群中(一个Leader,多个Follower),基于选举算法来保证 zookeeper集群的稳定性和可用性,从而保证了分布式的可靠性。
一、单机模式安装
1、解压到自己任意磁盘下,我的位置是D:\zookeeper-3.4.6
2、复制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=10 # The number of ticks that can pass between # sending a request and getting an acknowledgement syncLimit=5 # the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=D:\\data\\zookeeper # log config dataLogDir=D:\\log\\zookeeper # the port at which the clients will connect clientPort=2181 # the maximum number of client connections. # increase this if you need to handle more clients #maxClientCnxns=60 # # Be sure to read the maintenance section of the # administrator guide before turning on autopurge. # # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance # # The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 # Purge task interval in hours # Set to "0" to disable auto purge feature #autopurge.purgeInterval=1
其中
dataDir为zookeeper数据存放位置,zookeeper将写数据的日志文件保存在这个目录里。
dataLogDir是日志文件。
clientPort=2181是zookeeper端口,我们连接zookeeper的端口,zookeeper会监听这个端口,接收客户端访问请求。
tickTime:zookeeper服务器之间,或者zookeeper客户端与服务器之间维持的心跳的时间间隔,每隔tickTime时间,会执行一次。(心跳证明活着,心跳时间就是超时设置时间,可以理解为客户端和服务器端的session)
3 、转到D盘的zookeeper bin目录下,执行zkServer.cmd,这样就启动了zookeeper服务了。
4、查看zookeeper运行情况:D:\zookeeper-3.4.6\bin>zkCli.cmd-server 127.0.0.1:2181。
这样就完成了zookeeper windows单机模式安装。
二、伪集群模式安装
在一台PC上启动多个Zookeeper实例,同一个不同的端口,来实现微集群。
简单原理:
选举算法,有兴趣的同学可以看看,后续篇章中会详述。
1、修改加载的配置文件。在D:\zookeeper-3.4.6\conf 下复制zoo.cfg重命名为zoo1.cfg ,zoo2.cfg,zoo3.cfg
修改以下如下:
dataDir=D:\\data\\zookeeper\\1 # log config #dataLogDir=D:\\log\\zookeeper # the port at which the clients will connect clientPort=2181
#添加集群配置 server.1=localhost:2887:3887 server.2=localhost:2888:3888 server.3=localhost:2889:3889
server.num=ip/domain:Port1:Port2
其中num:表示数字表示第几号服务器;ip/domain :是服务器域名或者ip地址。Port1:表示这个服务器和集群中的Leader服务器交换信息的端口;Port2:表示万一集群中的Leader服务器挂了,需要一个端口重新进行选举,选出一个新的Leader,这个端口就是用来执行选举时服务器相互通信的端口。
由于我们是伪集群,所以ip或者域名是一样的,所以要分配不同的端口号。
zoo2.cfg也是如此修改,copy zoo1.cfg 只要修改上述红色标记的即可,\\2 clientPort=2182 ,类推,zoo2.cfg修改clientPort为2183 。
2、修改命令,加载不同的配置。复制zkServer.cmd并且重命名为,zkServer-1.cmd,zkServer-2.cmd,zkServer-3.cmd 分别修改这三个cmd如下所示。
setlocal call "%~dp0zkEnv.cmd" set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain set ZOOCFG=D:\zookeeper-3.4.6\conf\zoo1.cfg echo on java "-Dzookeeper.log.dir=%ZOO_LOG_DIR%" "-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%" -cp "%CLASSPATH%" %ZOOMAIN% "%ZOOCFG%" %* endlocal
3、分别启动zkServer-1 .cmd、zkServer-2.cmd zkServer-3.cmd
启动可能会报如下错误
2015-10-09 11:20:08,162 [myid:1] - WARN [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:218 1:QuorumCnxManager@382] - Cannot open channel to 3 at election address localhost /192.168.132.16:3889 java.net.ConnectException: Connection refused: connect at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketI mpl.java:85)这是因为,zookeeper集群采用的是选举算法,当集群中的其他节点还没有启动的时候,选举算法就会出现异常,因为至少三台能选举出一个leader,2n+1台机器,可以选举n个leader,当全部启动起来后,就不会报异常,所以上述的报错是可以忽略的,尽管启动这三个节点即可。
这样在一台机器上搭建了zookeeper伪集群,并且启动成功。
接下来是zookeeper的可视化界面zkui的使用。
欢迎指教~