【zookeeper】伪集群

来源:互联网 发布:培养java工程师 编辑:程序博客网 时间:2024/06/03 21:22

最近想学习一下zk,今天就先搭建一个伪集群吧。我的系统是macOS,zk的安装是真的简单,可以使用homebrew,但是我觉得直接从官网上下载然后按照配置文件启动zk的方式更好。其次,如果是伪集群的话,我们只需要一个zk的包就可以,每一次都指定不同的配置文件启动就行了。如果是集群模式,那么确实是每一台物理节点都需要一个zk的包。

我zk的下载地址是官网:http://apache.claz.org/zookeeper/zookeeper-3.3.6/ 大家可以选择合适的版本。

然后解压,可以把zk的包解压在任意的位置。

这里我准备启动3个节点,那么就需要3个目录。我新建了server1,server2和server3三个目录,每一个目录下都需要创建一个data目录和一个zoo.cfg配置文件。这个cfg配置文件可以从下载的zk包里的conf目录下取,也就是zoo_example.cfg文件,改名然后复制到每一个server目录下即可。还可以添加一个log目录用于记录日志,当然不是必须。

--zk

  --server1

      --data

      --zoo.cfg

      --log

  --server2

      --data

      --zoo.cfg

      --log

   --server3

      --data

      --zoo.cfg

      --log

我的目录结构大致如上,下面是配置文件:

server1的:

# The number of milliseconds of each ticktickTime=2000# The number of ticks that the initial # synchronization phase can takeinitLimit=10# The number of ticks that can pass between # sending a request and getting an acknowledgementsyncLimit=5# the directory where the snapshot is stored.dataDir=/Users/miracle/zookeeper/workdir/server1/datadataLogDir=/Users/miracle/zookeeper/workdir/server1/log# the port at which the clients will connectclientPort=2181# server.x中的“x”表示ZooKeeper Server进程的标识  server.1=127.0.0.1:2222:2225server.2=127.0.0.1:3333:3335server.3=127.0.0.1:4444:4445
注意这里的目录路径必须是全路径,否则无法识别。
server2和server3基本一样,只有两点需要改:

(1)dataDir和dataLogDir目录路径

(2)clientPort,伪集群就是使用端口映射来模拟多机的,所以这里的每一server的ip是一样的,但是监听的端口必须不同,server1是2181,server2是2182,server3是2183。

还有一点,我们需要在每一个server的data目录下新建一个myid文件,如果是server1的myid,那么文件内容就是1,server2就是2,server3就是3。这个数字是和配置文件最下面的server.x的x一致。

全部搞好以后,就可以启动zk伪集群了。

只需要使用刚才下好的zk包里的bin/zkServer.sh脚本启动即可,当然这里需要指定配置文件的位置。

./bin/zkServer.sh start ../workdir/server1/zoo.cfg./bin/zkServer.sh start ../workdir/server2/zoo.cfg./bin/zkServer.sh start ../workdir/server3/zoo.cfg
启动格式如上,但是具体的路径名称可能需要改变。


说明启动成功。

再使用bin目录下的zkCli.sh来连接集群。

./zkCli.sh -server 127.0.0.1:2181
使用-server参数来选择连接的节点。


说明连接成功。

如果想要关闭某一个具体的节点怎么办?只要把启动命令里的start换成stop即可。配置文件可以找到data目录,data目录下的pid文件可以让zkServer.sh脚本知道要停止哪一个zk进程。