zookeeper学习第一天(zk的安装与基本命令学习)

一、windows环境下的安装

直接下载成功以后 进入conf目录 复制zoo_sample.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.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=E:\\zookeeperDir
dataLogDir=E:\\zookeeperDir\\logs
# the port at which the clients will connect
clientPort=4180

二、Server的启动
进入bin目录下 运行命令
zkServer.cmd

t to 2000
2017-02-08 14:00:59,986 [myid:] - INFO  [main:ZooKeeperServer@824] - minSessionT
imeout set to -1
2017-02-08 14:00:59,987 [myid:] - INFO  [main:ZooKeeperServer@833] - maxSessionT
imeout set to -1
2017-02-08 14:01:00,006 [myid:] - INFO  [main:NIOServerCnxnFactory@89] - binding
 to port 0.0.0.0/0.0.0.0:4180

打印出如下信息,说明启动完成。

检查是否启动成功的方式

另开一个窗口 运行 netstat -ano 展示结果如下



活动连接

  协议  本地地址          外部地址        状态           PID
  TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:135            0.0.0.0:0              LISTENING       996
  TCP    0.0.0.0:443            0.0.0.0:0              LISTENING       2972
  TCP    0.0.0.0:445            0.0.0.0:0              LISTENING       4
  TCP    0.0.0.0:902            0.0.0.0:0              LISTENING       2536
  TCP    0.0.0.0:912            0.0.0.0:0              LISTENING       2536
  TCP    0.0.0.0:3306           0.0.0.0:0              LISTENING       2052
  TCP    0.0.0.0:4180           0.0.0.0:0              LISTENING       8580

发现4180 端口已经处于监听状态,说明zkServer启动完成。

三、Client端启动

进入bin目录下 运行命令

zkCli.cmd  -server localhost:4180

打印结果如下:


WATCHER::

WatchedEvent state:SyncConnected type:None path:null

说明客户端已经连接成功

四、简单操作命令学习

1、查看节点

ls /

结果:

[zk: localhost:4180(CONNECTED) 6] ls /
[zookeeper]

2、创建节点

[zookeeper]
[zk: localhost:4180(CONNECTED) 7] create /t1 abc
Created /t1
[zk: localhost:4180(CONNECTED) 8] ls /
[t1, zookeeper]

3、退出
quit

[zk: localhost:4180(CONNECTED) 9]
[zk: localhost:4180(CONNECTED) 9] quit
Quitting...
2017-02-08 14:11:46,911 [myid:] - INFO  [main:ZooKeeper@684] - Session: 0x15a1c4
f8d790000 closed
2017-02-08 14:11:46,916 [myid:] - INFO  [main-EventThread:ClientCnxn$EventThread
@519] - EventThread shut down for session: 0x15a1c4f8d790000

代码连接服务器:

package zk_1;

import java.io.IOException;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;

public class zk {

    public static void main(String[] args) throws IOException, KeeperException, InterruptedException{
          // 创建一个与服务器的连接

        //第一个参数:ZooKeeper服务器的连接地址,如果ZooKeeper是集群模式或伪集群模式(即ZooKeeper服务器有多个),那么每个连接地址之间使用英文逗号间隔,单个连接地址的语法格式为“主机IP:ZooKeeper服务器端口号”;
         //第二个参数:session超时时长(单位:毫秒) 
        //第三个参数:用于监控目录节点数据变化和子目录状态变化的Watcher对象
        ZooKeeper zk = new ZooKeeper("127.0.0.1:4180", 60000, new Watcher() {  
              // 监控所有被触发的事件
            // 当对目录节点监控状态打开时,一旦目录节点的状态发生变化,Watcher 对象的 process 方法就会被调用。
            @Override
            public void process(WatchedEvent event) {
                   System.out.println("EVENT:" + event.getType()+"   path:"+event.getPath());

            }
        });

        // 查看根节点
        // 获取指定 path 下的所有子目录节点,同样 getChildren方法也有一个重载方法可以设置特定的 watcher 监控子节点的状态
    //    System.out.println("ls / => " + zk.getChildren("/", true));
      //  System.out.println("t1是否已经存在:"+zk.exists("/t1", true));

    //    zk.create("/t2", "RootNodeData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);//创建一个节点名为“/RootNode”的目录节点

      //  System.out.println("“/t2”节点状态:" + zk.exists("/t2",true));//判断指定目录节点是否存在

      //  System.out.println("“t2”节点上数据:"+new String(zk.getData("/t2", false, null)));//获取“RootNode”节点上的数据

        //zk.create("/t2/tt1", "second dir tt1".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

        //zk.create("/t2/tt2", "second dir tt2".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

        //System.out.println("t2下的所有子目录:   "+zk.getChildren("/t2", false));

      //  zk.delete("/t2/tt1", -1);  //删除某节点的数据

        //System.out.println("t2下的所有子目录:   "+zk.getChildren("/t2", false));

        //修改某节点的数据
        zk.setData("/t2/tt2", "update tt2's data".getBytes(), -1);
        System.out.println("修改后的数据:"+new String(zk.getData("/t2/tt2", false, null)));
        zk.close();
    }

}

客户端命令操作:

ls /
[t2, t1, zookeeper]
[zk: localhost:4180(CONNECTED) 1] get /t2
RootNodeData
cZxid = 0xd
ctime = Wed Feb 08 14:26:36 CST 2017
mZxid = 0xd
mtime = Wed Feb 08 14:26:36 CST 2017
pZxid = 0xd
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 0
[zk: localhost:4180(CONNECTED) 2] get /t1
abc
cZxid = 0x6
ctime = Wed Feb 08 14:10:54 CST 2017
mZxid = 0x6

zoo.cfg配置文件解释(抄袭的解释哈哈):

tickTime:这个时间是作为 Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。

dataDir:顾名思义就是 Zookeeper 保存数据的目录,默认情况下,Zookeeper 将写数据的日志文件也保存在这个目录里。

dataLogDir:顾名思义就是 Zookeeper 保存日志文件的目录

clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求

initLimit:这个配置项是用来配置 Zookeeper 接受客户端(这里所说的客户端不是用户连接 Zookeeper 服务器的客户端,而是 Zookeeper 服务器集群中连接到 Leader 的 Follower 服务器)初始化连接时最长能忍受多少个心跳时间间隔数。当已经超过 10 个心跳的时间(也就是 tickTime)长度后 Zookeeper 服务器还没有收到客户端的返回信息,那么表明这个客户端连接失败。总的时间长度就是 5*2000=10 秒

syncLimit:这个配置项标识 Leader 与 Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是 2*2000=4 秒

server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。
除了修改 zoo.cfg 配置文件,集群模式下还要配置一个文件 myid,这个文件在 dataDir 目录下,这个文件里面就有一个数据就是 A 的值,Zookeeper 启动时会读取这个文件,拿到里面的数据与 zoo.cfg 里面的配置信息比较从而判断到底是那个 server。

猜你喜欢

转载自blog.csdn.net/iphone4grf/article/details/54926276