简介:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。ZooKeeper包含一个简单的原语集,提供Java和C的接口。ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
ZooKeeper的优点包括:
- 高可靠性:ZooKeeper是一个高可靠的分布式协调服务,可以保证数据的一致性和完整性。
- 可扩展性:ZooKeeper支持动态扩展和缩减,可以根据需求调整资源的分配。
- 易用性:ZooKeeper提供了简单的原语集,使得开发者可以快速实现分布式应用。
- 安全性:ZooKeeper使用SSL加密通信,保证数据传输的安全性。
ZooKeeper是一个强大且灵活的分布式协调服务,适用于大规模分布式系统的场景。
下载路径
Index of /apache/zookeeper/zookeeper-3.7.1
注意: 3.5.5开始的版本要下载尾部有bin 别问为什么会报错
3.5.5开始,带有bin名称的包才是我们想要的下载可以直接使用的,里面有编译后的二进制的包。之前版本tar.gz包里面是只是源码包,无法直接使用。
配置环境变量
检测是否在系统变量path中配置 %JAVA_HOME%\bin 如果没有新建配置一下
说明
当前是windows的一个伪集群,正常的生产环境中分别部署到每一台机器上,也不是windows而是容器或linux中。
为什么是集群不是单机当然是保证系统高可用了那 开始吧.........
解压目录
打开conf中的zoo_sample.cfg,修改后另存为zoo.cfg ,原始(zoo_sample.cfg)文件不会被执行。
配置参数解析 zoo.cfg
1.tickTime:CS通信心跳时间Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。tickTime=2000
2.initLimit:LF初始通信时限集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。initLimit=5
3.syncLimit:LF同步通信时限集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。syncLimit=2
4.dataDir:数据文件目录Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。dataDir=/home/zookeeper/zookeeper/zkdata
5.clientPort:客户端连接端口客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。clientPort=2181
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)规则如下:集群分布模式,server.id(数字)=ip:集群交互端口:选举leader端口
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
修改配置
注意: 下面路径单斜 " \ " 会当做是转义符处理 " \\ " 斜杠可以解决。(单机没问题 如果是集群 必报错)
dataDir=D:\work\zookeeperColony\apache-zookeeper-3.7.1-bin-server1\data
dataLogDir=D:\work\zookeeperColony\apache-zookeeper-3.7.1-bin-server1\logs
#伪集群分布模式,server.id(注意是数字)=ip:集群交互端口:选举leader端口
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
在server1、 server2、 server3、分别创建 data 文件夹 ,data中创建myid文件(注意:不需要任何后缀),myid文件内容分别为1、2、3(对应的各server.id)。
注意: 集群启动时要检查是否有该文件,如果没有话,会报错!
启动闪退
如果启动闪退 你可以编译 bin 下的 zkServer.cmd 添加pause 可以更清楚看清错误
启动实例
三个实例都配置完成后启动 bin 下的 zkServer.cmd 报错了
单机可以正常启动,集群就报错。
原因: 集群查找myid文件就嗝屁……是把"\"当做是转义符处理,所以路径错误,找不到myid文件从而启动失败,修改该路径后重新启动一切正常(改为双斜杠\\)
修改路径: dataDir=D:\\work\\zookeeperColony\\apache-zookeeper-3.7.1-bin-server1\\data
dataLogDir=D:\\work\\zookeeperColony\\apache-zookeeper-3.7.1-bin-server1\\logs