Windows平台上部署ZooKeeper—伪集群模式
ZooKeeper有单机、伪集群、集群三种运行模式,这里只介绍伪集群模式的部署。
一、准备运行环境
ZooKeeper是由Java编写的,因此需要安装Java运行环境(Java6或以上版本)
二、下载ZooKeeper安装包(以最新版本3.5.6为例)
下载地址:https://apache.org/dist/zookeeper
三、解压ZooKeeper安装包
将ZooKeeper解压到本地磁盘,因部署的是伪集群模式,所以需要拷贝3份ZooKeeper安装包(名字随意)
四、配置文件zoo.conf
将zoo-monkey安装包下conf文件夹里的zoo_sample.cfg重命名为zoo.cfg,并输入如下配置信息(记得创建dataDir和dataLogDir配置所对应的文件夹,系统不会自动创建)
# ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime tickTime=2000 # 存储快照文件snapshot的目录。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir, 事务日志的写性能直接影响zk性能 dataDir=C:\\HuangShaohua\\DevTools\\apache-zookeeper-3.5.6-bin\\zoo-monkey\\data # 事务日志输出目录。尽量给事务日志的输出配置单独的磁盘或是挂载点,这将极大的提升ZK性能。 dataLogDir=C:\\HuangShaohua\\DevTools\\apache-zookeeper-3.5.6-bin\\zoo-monkey\\log # Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许F在 initLimit时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,F在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数 initLimit=10 #在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果L发出心跳包在syncLimit之后,还没有从F那里收到响应,那么就认为这个F已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题 syncLimit=5 # 客户端连接server的端口,即对外服务端口,默认为2181 clientPort=2181 # 单个客户端与单台服务器之间的连接数的限制,是ip级别的,默认是60,如果设置为0,那么表明不作任何限制。请注意这个限制的使用范围,仅仅是单台客户端机器与单台ZK服务器之间的连接数限制,不是针对指定客户端IP,也不是ZK集群的连接数限制,也不是单台ZK对所有客户端的连接数限制 maxClientCnxns=60 # server列表:2777为选举端口,3777为心跳端口 server.1=127.0.0.1:2777:3777 server.2=127.0.0.1:2888:3888 server.3=127.0.0.1:2999:3999
五、创建myid文件
在dataDir所配置的目录下,创建一个名为“myid”的文件(文件不需要后缀),文件内容输入配置文件下server后对应的数字。
重复四、五步骤将zoo-pig和zoo-tiger安装包配置好。注意事项:
六、启动ZooKeeper服务
进入zoo-monkey的bin文件夹下,用cmd命令进入此文件夹的dos窗口,并输入zkServer.cmd启动服务
启动后会看到如下错误日志,因为心跳检测不到配置文件中所配置的服务信息,只需要依次按照上面的启动方式将zoo-pig和zoo-tiger服务启动即可。
七、验证服务器
1、进入任意一个安装包的bin文件夹下,用cmd命令进入此文件夹的dos窗口,并输入zkCli.cmd启动客户端,看到如下信息说明服务部署成功。
2、也可以自己写个简单的单元测试进行验证:
1)、新建一个maven工程,添加以下依赖
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> <scope>test</scope> </dependency>
2)、新建单元测试进行验证
/** * 软件版权:流沙~~ * 修改日期 修改人员 修改说明 * ========= =========== ===================== * 2020/1/14 liusha 新增 * ========= =========== ===================== */ package com.sand.zookeeper; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooKeeper; import org.junit.Test; import java.util.concurrent.CountDownLatch; /** * 功能说明:ZooKeeper Api 测试类 * 开发人员:@author liusha * 开发日期:2020/1/14 9:58 * 功能描述:会话创建、授权、节点的增删改查操作等 */ public class ZooKeeperApi implements Watcher { private static CountDownLatch connectedSemaphore = new CountDownLatch(1); private static String connectedString = "127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183"; @Override public void process(WatchedEvent watchedEvent) { System.out.println("Receive WatchedEvent:" + watchedEvent); if (Event.KeeperState.SyncConnected == watchedEvent.getState()) { connectedSemaphore.countDown(); } } /** * 创建最基本的ZooKeeper会话实例 * * @throws Exception */ @Test public void constructor_usage_simple () throws Exception { ZooKeeper zooKeeper = new ZooKeeper(connectedString, 5000, new ZooKeeperApi()); System.out.println("ZooKeeper.state:" + zooKeeper.getState()); connectedSemaphore.await(); System.out.println("ZooKeeper session会话创建完成。"); } }
3)、运行单元测试查看结果
从运行结果可以看出路由到了2183端口这台服务器上