zookeeper 是一个数据库, 是一个使用树形结构存储的数据库, 可以拥有高可用的集群, 机器分为: 两种角色 leader+follower leader负责写入 follower负责分担读的压力 , 一个集群只有一个leader, 通过选举算法来实现, 必须确保机器个数为 2n+1 集群中的所有机器都参与选举, 票数最多的机器 为leader, leader写入的数据通过Paxos算法 , 将所有数据同步.
zookeeper是一个使用树形结构存储的数据库 树结构包含多个znode 每个节点都可以有一个值和多个子节点
zookeeper有三种znode :
1. 永久节点 (PERSISTENT): 数据被持久化 用户不调用删除 不会删除 (默认的节点)
2. 临时节点 (EPHEMERAL): 客户端连接时 才保留数据 客户端断开 数据被删除
创建:create -e /user/zs boy
3.顺序节点(PERSISTENT_SEQUENTIAL): 1-500000 (抢票+分布式主键)
一. 首先 在 http://mirror.bit.edu.cn/apache/zookeeper/ 下载 安装 zookeeper程序
下载完之后解压即可
二.解压打开 文件 有一个bin目录 bin目录下就是 服务端和客户端的启动程序
zkServer.cmd 是启动服务端 zkCli.cmd是启动客户端 刚解压完是打不开的 我们需要修改 一个文件
1. 进入conf目录 我们需要将zoo_sample.cfg 文件修改为zoo.cfg 才可行 (修改过的如下:) 修改过可以正常启动服务端和客户端了
2.还需要重新配置zoo.cfg中的配置:
# 心跳的时间间隔
tickTime=2000
# 初始化同步数据话费的时间 10个tickTime
initLimit=10
# leader和follwer之间互相发送心跳 检查对方 失效的时间间隔 5*tickTime
syncLimit=5
# 数据文件的存储目录
dataDir=E:\yun computing\zookeeper\zookeeper-3.4.10\zookeeper-3.4.10\data
# the port at which the clients will connect 端口号
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients 连接的用户端
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
zoo.cfg中配置的详细信息:
参数 | 说明 |
tickTime | ZK中的一个时间单元。ZK中所有时间都是以这个时间单元为基础,进行整数倍配置的。例如,session的最小超时时间是2*tickTime。默认3000毫秒。这个单元时间不能设置过大或过小,过大会加大超时时间,也就加大了集群检测session失效时间;设置过小会导致session很容易超时,并且会导致网络通讯负载较重(心跳时间缩短) |
initLimit | Follower在启动过程中,会从Leader同步所有最新数据,然后确定自己能够对外服务的起始状态。Leader允许Follower在initLimit时间内完成这个工作。通常情况下,我们不用太在意这个参数的设置。如果ZK集群的数据量确实很大了,Follower在启动的时候,从Leader上同步数据的时间也会相应变长,因此在这种情况下,有必要适当调大这个参数了。默认值为10,即10 * tickTime (No Java system property) |
syncLimit | 在运行过程中,Leader负责与ZK集群中所有机器进行通信,例如通过一些心跳检测机制,来检测机器的存活状态。如果Leader发出心跳包在syncLimit之后,还没有从Follower那里收到响应,那么就认为这个Follower已经不在线了。注意:不要把这个参数设置得过大,否则可能会掩盖一些问题,设置大小依赖与网络延迟和吞吐情况。默认为5,即5 * tickTime (No Java system property) |
dataDir | 就是把内存中的数据存储成快照文件snapshot的目录,同时myid也存储在这个目录下(myid中的内容为本机server服务的标识)。写快照不需要单独的磁盘,而且是使用后台线程进行异步写数据到磁盘,因此不会对内存数据有影响。默认情况下,事务日志也会存储在这里。建议同时配置参数dataLogDir,事务日志的写性能直接影响zk性能。 |
dataLogDir | 日志文件存放目录 |
clientPort | 客户端连接server的端口,即zk对外服务端口,一般设置为2181。 |
三. 点击打开 zkServer.cmd 服务端 然后 打开zkCli.cmd客户端 在客户端上就可以进行正常的命令操作了
常用的数据操作命令(树结构节点数据的操作)
ls / 显示根节点下所有的节点
[zk: localhost(CONNECTED) 1] ls /
[zookeeper]
create 在/ 下 新增一个sex节点 节点的值是 boy
[zk: localhost(CONNECTED) 2] create /sex boy
Created /sex
[zk: localhost(CONNECTED) 3] ls /
[sex, zookeeper]
获取/sex节点的值
[zk: localhost(CONNECTED) 5] get /sex
boy
cZxid = 0x2
ctime = Thu May 11 17:32:27 CST 2017
mZxid = 0x2
mtime = Thu May 11 17:32:27 CST 2017
pZxid = 0x2
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
重新设置sex节点的值
[zk: localhost(CONNECTED) 6] set /sex girl
cZxid = 0x2
ctime = Thu May 11 17:32:27 CST 2017
mZxid = 0x3
mtime = Thu May 11 17:33:16 CST 2017
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
[zk: localhost(CONNECTED) 7] get /sex
girl
cZxid = 0x2
ctime = Thu May 11 17:32:27 CST 2017
mZxid = 0x3
mtime = Thu May 11 17:33:16 CST 2017
pZxid = 0x2
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
删除节点
[zk: localhost(CONNECTED) 8] delete /sex
[zk: localhost(CONNECTED) 9] ls /
[zookeeper]
[zk: localhost(CONNECTED) 10]
其他
help 查看所有命令的帮助
close/quit 退出登录
connect ip:port 重新登录
histroy 查看操作历史记录 每个历史记录都有一个编号
redo 编号 重新执行history中编号对应的语句
close 关闭客户端连接
stat /sex 查看znode的/sex的状态信息
ls2 /sex 查看/sex所有的子节点 同时查看状态信息
rmr /sex 删除/sex以及他的所有子节点
setquota -n 1 /test 给/test节点设置允许的子节点个数是1个 添加子节点操作1个 给予警告 可以添加
-b 10 /test 给/test的值的长度限制为 10个字节
listquota /test 列出/test所有的配额
delquota -n /test 删除子节点设置的额配合
【通过命令 添加node后 可以查看到一些列 这些列的意义 】
cZxid = 0x2 节点被创建时的事务id
ctime = Thu May 11 17:32:27 CST 2017 节点被创建的时间
mZxid = 0x3 节点最后一次被更新(使用set 修改当前节点时 (修改子节点不影响该字段) 该值会自动更新 自动累加)时的事务id
mtime = Thu May 11 17:33:16 CST 2017 节点最后一次被更新时间
pZxid = 0x2 子节点中最后一个被创建的子节点的czxid 如果当前节点没有子节点pZxid=cZxid
cversion = 0 子节点被创建或者删除 都会导致该版本号递增 修改不会
dataVersion = 1 当前节点调用set 修改值 都会导致该版本号递增 (子节点修改不影响该版本号)
aclVersion = 0
ephemeralOwner = 0x0 如果是持久节点就是0 临时节点是sessionid 客户端连接会产生session
dataLength = 4 数据长度 多少个字节
numChildren = 0 表示子节点的个数
在Eclipse中安装zookeeper插件
1:首先找到eclipse中的help下的install new software..
2:点击add添加name与url,name可以为zookeeper,而location则是固定的
:http://www.massedynamic.org/eclipse/updates/,点击ok
3.选择 Plug-in for ZooKeeper 3.2.2 这个选项
4. 开始安装
5:出现security warning时选择第一个选项
6:出现software updates 选择重启,
7:重启后就可使用。
8:在window中找到show view ,搜索zookeeper,出现以下视图即为安装成功。