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
View Code

五、创建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会话创建完成。");
  }
}
View Code

  3)、运行单元测试查看结果

   从运行结果可以看出路由到了2183端口这台服务器上

    千万不要试图去研究 研究了很久都整不明白的东西,或许是层次不到,境界未到,也或许是从未在实际的应用场景接触过,这种情况下去研究,只会事倍功半,徒劳一番罢了。能做的就是不断的沉淀知识,保持一颗积极向上的学习心态,相信终有一天所有的困难都会迎刃而解。
原文地址:https://www.cnblogs.com/54hsh/p/12185658.html