zookeeper 管理命令

Zookeeper

1)      简介

Zk使用的是一个类似文件系统的数结构来管理。每个节点在zk中为znode,有一个唯一的标识路径。Znode中可以再包含znode或者存放数据;znode中的数据可以由多个版本,因为这些数据在同一个目录下,所以在查询的时候必须带上版本号。

(1)     临时节点:EPHEMERAL,zk中的节点分为临时节点与永久性节点。临时节点的生命周期依赖于其创建的会话。当创建这个znode的客户端与服务器失去联系,这个znode的session即失效,znode中的数据将被删除。临时节点是不能有子节点的。永久性节点只有在客户端显示的删除才会从zk中去除。

(2)     监控。如果znode中的数据或者子节点的目录发生变化,可以通知设置监控的客户端。即watches.客户端在节点上设置watch,当节点状态发生改变会触发watch所对应的操作。当watch被触发,zk向客户端发送一条通知。

(3)     数据访问。每个节点存储的数据都是原子性的操作。读取返回节点中的所有数据,写入将会替换节点中的所有数据。

(4)     顺序节点。创建znode时,用户可以请求在zk的路径后面加一个递增的计数。这个计数对于父节点来说是唯一的。

(5)     持久顺序节点:PERSISTENT_SEQUENTIAL,与持久节点不同的是,父节点会记录下每个子节点的创建顺序,可以利用这个属性,zk给节点后面添加一个后缀,作为新的节点名称。有范围的限制,其值为整型的最大值。

(6)     临时顺序节点:EPHEMRAL_SEQUENTIAL,利用临时顺序节点可以实现共享锁。

每个znode由3部分组成:

Stats:状态描述,权限、版本等

Childen:该节点下的子节点

Data:相关的数据信息

 

 

问题:

  1. zk中有没有访问控制,授权的设置?

有,zk中的ACL

  1. 什么时候需要创建临时节点?

比如zookeeper发布服务时,服务启动时将自己的信息注册为顺序节点,当服务断掉之后,临时节点也会被删除。

  1. 顺序节点的作用?

可以有助于生成序列号

  1. 为什么kafka要使用zookeeper,zk主要应用于什么场景?

 Kafka使用zk将消息生成、存储、消费等过程结合在一起。借助zk,能够将所有组件在无状态的情况下组合在一起,实现生产者与消费者的负载均衡。

  1. 注册broker,注册topic,获知每个topic的partition
  2. 负载均衡consumer,存储offset

管理kafka中各种状态信息。

其中zk使用的场景包括:

1、    需要进行统一的命名服务,zk使用的是树形结构,可以避免产生一样的名称

2、    配置管理,在多服务器的情况下,将公共的配置信息放在zk中,利用watch,一旦配置信息发生了改变,每个服务器都将得到信息。

3、    集群管理。获取每台服务器的状态,新增或者宕机都必须马上通知其他的机器,实现主从的集群配置。

4、    共享锁。在跨进程或者跨

 

2)      zkCli命令

利用bin下的zkCli来对zk进行管理。

ZkCli.sh -server 127.0.0.1:2181完成服务器连接,切记,server前面只有一个横线

(1)       查看按当前zk中包含的内容

ls

[cluster, controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config]

看到这里不禁问,这些分别代表什么,一个个的进行阐述

Cluster

 

Controller

管理leader election及各种failover,管理partition及副本状态,如果当前的controller失败,会从其它正常的broker中选择一个出来,那么这个与leader之间的区别呢?leader是否可能是controller?

所有的partition都会有一个leader,这个由controller决定,这个controller只是broker中的一个。而有多少个partition就会有多少个leader。

Config

其下的节点为:changes,clients,topics,从名称中可以看出是客户及topics的信息

Admin

估摸是与授权有关系。

 

(2)       创建节点

Create /zk/node1 在zk目录下创建一个node1的节点

在其下设置其关联的字符串:set /zk/node1 “node1”

(3)       获取节点信息

get /zk/node1

得到的结果如下:

node1

cZxid = 0x20000038e

ctime = Tue May 09 20:30:02 CST 2017

mZxid = 0x200000393

mtime = Wed May 10 08:37:00 CST 2017

pZxid = 0x20000038e

cversion = 0

dataVersion = 2

aclVersion = 0

ephemeralOwner = 0x0

dataLength = 5

numChildren = 0

(4)       删除节点

Delete /zk/node1

 

问题:1.如何正确退出zkCli.sh的命令台

 

3)      Zk的四字字母命令

(1)       Conf 输出相关服务配置的详细信息

echo conf |nc 127.0.0.1 2181

得到的结果为:

clientPort=2181

dataDir=/home/zookeeper/data/version-2

dataLogDir=/home/zookeeper/log/version-2

tickTime=2000

maxClientCnxns=60

minSessionTimeout=4000

maxSessionTimeout=40000

serverId=2

initLimit=10

syncLimit=5

electionAlg=3

electionPort=3888

quorumPort=2888

peerType=0

可以看到主要是一些设置的信息

重要的配置信息:

tickTime:CS通信的心跳间隔时间。是在服务器之间或者服务器与客户端之间维持的心跳时间间隔。该值设置的过小,会导致会话容易超时。

minSessionTimeout:客户端与服务器之间保持连接的最小超时时间。

maxSessionTimeout:最大的超时时间,所以客户端在设置会话的超时时间时,其值必须处于最大超时与最小超时之间,否则会被强制设置为最大或者最小值。

initLimit:备份节点与主节点之间初次连接时能够容忍的最多心跳数,该值*tickTime为能够容忍的时间。

syncLimit:同步时,备份节点与主节点之间能够容忍的最多心跳数。

electionAlg:选举算法。3对应FastLeaderElection算法,该值为默认值

electionPort:进行选举采用的端口,其中3888,在选举阶段监听其它服务器的连接。

quorumPort:其中Quorum为分布式系统中用来保证数据冗余和最终一致性的投票算法。2888为服务器之间通信的端口。如果该服务器为领导者,用来监听追随者。

peerType:是否为观察者,主要有两种:观察者或者参与者。0代表参与者

问题:

  1. initLimit: 是完成的时间还是建立连接能够容忍的时间?

是指leader允许follower在此时间内完成同步的工作。

  1. syncLimit: 即同步必须在此时间内完成or主节点可以比备份节点异步的时间间隔?

在通信的过程中,检测follower的存活状态,如果在该时间内没有收到follower的响应则认为follower已经失效了。

  1. 观察者与参与者时间的区别

因为写入操作必须是达到投票的半数,才能够生效,所以,如果随着节点不断增加,相应的写入成本会增加。基于此,观察者加入,观察者也可以处理读取与写入,会将这些请求给领导者,但是它与观察者之间有一点区别,不参与投票,只监听结果,所以增加观察者不会影响zk服务的。

  1. 2181与2888,3888之间的区别

其中2181是监听zk客户端的连接。

  1. Nc是什么命令

它其实是netcat的简写,一个简单、可靠的网络工具,这里的具体可以去查看相关资料

 

(2)       Cons 得到连接信息的情况

/127.0.0.1:60098[1](queued=0,recved=213973,sent=213994,sid=0x25abaf5919b0000,lop=PING,est=1493971756904,to=6000,lcxid=0x2e2,lzxid=0x200000399,lresp=1494398623479,llat=0,minlat=0,avglat=0,maxlat=501)

 /127.0.0.1:44204[0](queued=0,recved=1,sent=0)

可以看到包括的信息有:

Ip,端口,接收包数、发送包数、连接的session id,最后的操作方式等信息

(3)       查看是否已经启动了某服务

echo ruok|nc 127.0.0.1 2181

Imok

返回的lmok表示已经启动了本地的zk服务

相对的,使用

 

(4)       Stat

状态信息及连接信息,比如是否为leader,

相应的有个mntr能够得到更多的监控zk的健康状态等各种信息,包括追随者数目等

(5)       Wchs

有watch path的连接数及watch的路径数

(6)       Wchc

则更为细致的指出watch的有关path

4)      ZkServer.sh

Status得到zk服务的状态:./zkServer.sh status

ZooKeeper JMX enabled by default

Using config: /root/software/zookeeper-3.4.9/bin/../conf/zoo.cfg

Mode: leader

包括使用的配置文件,当前的mode

 

问题:

  1. 如何实现一套zookeeper管理多个Kafka集群?

(1)首先在zk中创建节点

(2)可以选择在kafka的配置文件中的zookeeper添加节点的路径

(3)如果是不同的集群可以创建不同的节点,然后不同的broker连接到不同的节点路径下

  1. 如何正确关闭zk集群

直接到bin文件夹中启动 zkServer.sh stop

  1. 如何正确关闭kafka

直接到bin文件夹中启动 kafka-server-stop.sh

posted @ 2017-05-11 09:49  tang_jin2015  阅读(2160)  评论(0编辑  收藏  举报