windows下的zookeeper

这篇博文主要介绍了Windows下Zookeeper的单机和集群安装配置,包括配置文件zoo.cfg的修改,以及dataDir和dataLogDir的设置。博主强调适合初学者,详细解释了tickTime、dataDir等配置项的含义。此外,文中还涉及Zookeeper的集群配置,包括myid文件的创建和server.A=B:C:D的格式说明。最后,文章简述了Java与Zookeeper的连接示例。
摘要由CSDN通过智能技术生成

zookeeper的配置:点击打开链接

zookeeper的配置:点击打开链接

zookeeper的简单命令:点击打开链接

博主是分布式的小白,最近要开始接触dubbo有点慌,上午查阅了下资料,大致了解了下dubbo,具体概念性、理论性的博文以后供上,先来个实际操作。博主了解到dubbo常与zookeeper一起玩耍,所以要先实践zokeeper。


本篇博文主要是写个像我一样白的小白,过于细节还请高手勿喷,错误之处还请指出改正。


zookeeper是需要到官方下载的。

http://zookeeper.apache.org/ 官网下载,然后download,我反正是发现了.tar.gz,然后下下来就解压喽。


1、单机安装、配置:

 

安装非常简单,只要获取到 Zookeeper 的压缩包并解压到某个目录如:G:\ZooKeeperAll\ZooKeeper1\zookeeper-3.4.8下。

 

配置文件存放在/conf/目录下,将zoo_sample.cfd文件名称改为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.

dataDir=G:\\ZooKeeperAll\\ZooKeeper1\\data          //这是我修改后的
dataLogDir=G:\\ZooKeeperAll\\ZooKeeper1\\log     //这是我修改后的

# the port at which the clients will connect

clientPort=2181

  • tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。
  • dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。
  • clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。

每个zk的instance,都需要设置独立的数据存储目录、日志存储目录,所以dataDir、dataLogDir这二个节点对应的目录,需要手动先创建好。

当这些配置项配置好后,你现在就可以启动 Zookeeper 了:进入/bin目录  zkServer.cmd

启动后要检查 Zookeeper 是否已经在服务,输入 jps 看下进程。



啦啦啦,我也不知道对不对,反正就先这样继续做下去试试呗^_^


2、集群安装、配置:

Zookeeper 的集群模式的安装和配置也不是很复杂,所要做的就是增加几个配置项。集群模式除了缺省的配置项还要在zoo.cfg文件末尾增加集群中的机器ip、端口等:

2.1创建每个目录下conf/zoo.cfg配置文件 

G:\ZooKeeperAll\zookeeper1\conf\zoo.cfg 内容如下:

复制代码
tickTime=2000
initLimit=10
syncLimit=5
dataDir=G:\\ZooKeeperAll\\ZooKeeper1\\data
dataLogDir=G:\\ZooKeeperAll\\ZooKeeper1\\log
clientPort=2181
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
复制代码

G:\ZooKeeperAll\zookeeper2\conf\zoo.cfg 内容如下:

复制代码
tickTime=2000
initLimit=10
syncLimit=5
dataDir=G:\\ZooKeeperAll\\ZooKeeper2\\data
dataLogDir=G:\\ZooKeeperAll\\ZooKeeper2\\log
clientPort=2182server.1=localhost:2287:3387server.2=localhost:2288:3388server.3=localhost:2289:3389
复制代码

G:\ZooKeeperAll\zookeeper3\conf\zoo.cfg 内容如下:

复制代码
tickTime=2000
initLimit=10
syncLimit=5
dataDir=G:\\ZooKeeperAll\\ZooKeeper3\\data
dataLogDir=G:\\ZooKeeperAll\\ZooKeeper3\\log
clientPort=2183server.1=localhost:2287:3387server.2=localhost:2288:3388server.3=localhost:2289:3389
复制代码

注:因为是在一台机器上模拟集群,所以端口不能重复,这里用2181~2183,2287~2289,以及3387~3389相互错开。

  • initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 10*2000=20 秒
  • syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 5*2000=10 秒
  • server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
  • 除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

G:\ZooKeeperAll\ZooKeeper1\data\myid 中的内容为1,对应server.1中的1
G:\ZooKeeperAll\ZooKeeper2\data\myid 中的内容为2,对应server.2中的2
G:\ZooKeeperAll\ZooKeeper3\data\myid 中的内容为3,对应server.3中的3

生产环境中,分布式集群部署的步骤与上面基本相同,只不过因为各zk server分布在不同的机器,上述配置文件中的localhost换成各服务器的真实Ip即可。分布在不同的机器后,不存在端口冲突问题,可以让每个服务器的zk均采用相同的端口,这样管理起来比较方便。

2.2启动验证

进入各个/bin目录 ,然后运行 zkServer.cmd



可以启动客户端测试下:

进入bin目录下:

zkCli -server localhost:2181

(注:如果是远程连接,把localhost换成指定的IP即可)

成功后,应该会进到提示符下,类似下面这样:


[zk: localhost:2181(CONNECTED) 0]  

然后,就可以用一些基础命令,比如 ls ,create ,delete ,get 来测试了(关于这些命令,大家可以查看文档),特别提一个很有用的命令rmr 用来递归删除某个节点及其所有子节点。

建立节点   create /zk  hello

获得节点  get /zk 

设置节点 set /zk hello2

建立子节点  set /zk/subzk hello3

输出节点目录 ls /zk

删除节点  delete /zk等等

还有一部分可以看看这个博文:点击打开链接


数据模型

Zookeeper 会维护一个具有层次关系的数据结构,它非常类似于一个标准的文件系统,如图所示:

    • zookeeper

Zookeeper 这种数据结构有如下这些特点:

    1. 每个子目录项如 NameService 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,如 Server1 这个 znode 的标识为 /NameService/Server1
    2. znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录
    3. znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据
    4. znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了
    5. znode 的目录名可以自动编号,如 App1 已经存在,再创建的话,将会自动命名为 App2
    6. znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍

3、java与zk的连接示例:

3.1 maven项目的pom.xml中先添加以下依赖项

复制代码
        <!--zk-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.8</version>
        </dependency>
复制代码

3.2 最基本的示例程序

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值