目录结构

bin

conf

zoo.cfg 是核心配置文件
常配置的选项有:
clientPort:参数无默认值,必须配置,用于配置当前服务器对外的服务端口,客户端必须使用这端口才能进行连接
dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)
dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
syncLimit:多少个心跳时间内,允许follower同步,如果follower落后太多,则会被丢弃。
ZK的特性
ZK 的特性会从会话、数据节点,版本,Watcher,ACL权限控制,集群角色这些部分来了解,其中重点需要掌握的数据节点与Watcher
会话
会话(session)是zookepper非常重要的概念,客户端和服务端之间的任何交互操作都与会话有关
客户端与服务端的一次会话连接,本质是TCP长连接,通过会话可以进行心跳检测和数据传输.
会话状态

Zk客户端和服务端成功连接后,就创建了一次会话,ZK会话在整个运行期间的生命周期中,会在不同的会话状态之间切换,这些状态包括:CONNECTING、CONNECTED、RECONNECTING、RECONNECTED、CLOSE
一旦客户端开始创建Zookeeper对象,那么客户端状态就会变成 CONNECTING 状态,同时客户端开始尝试连接服务端,连接成功后,客户端状态变为CONNECTED,通常情况下,由于断网或其他原因,客户端与服务端之间会出现断开情况,一旦碰到这种情况,Zookeeper客户端会自动进行重连服务,同时客户端状态再次变成CONNCTING,直到重新连上服务端后,状态又变为CONNECTED,在通常情况下,客户端的状态总是介于CONNECTING和CONNECTED之间。但是,如果出现诸如会话超时、权限检查或是客户端主动退出程序等情况,客户端的状态就会直接变更为CLOSE状态。
数据模型
ZooKeeper的视图结构和标准的Unix文件系统类似,其中每个节点称为“数据节点”或znode,每个znode可以存储数据,还可以挂载子节点,因此可以称之为“树”
第二点需要注意的是,每一个znode都必须有值,如果没有值,节点是不能创建成功的。

-
在Zookeeper中,可以往这个节点存储或获取数据
-
通过客户端可对znode进行增删改查的操作,还可以注册watcher监控znode的变化。
节点类型
节点类型非常重要,是后面项目实战的基础。
a、znode有两种类型:
短暂(ephemeral[ɪˈfemərəl])(create -e /app1/test1 “test1” 客户端断开连接zk删除ephemeral类型节点)
持久(persistent) (create /app1/test2 “test2” 客户端断开连接zk不删除persistent类型节点)
b、znode有四种形式的目录节点(默认是persistent )
PERSISTENT
PERSISTENT_SEQUENTIAL(持久序列/test0000000019 )
EPHEMERAL
EPHEMERAL_SEQUENTIAL
c、创建znode时设置顺序标识,znode名称后会附加一个值,顺序号是一个单调递增的计数器,由父节点维护

d、在分布式系统中,顺序号可以被用于为所有的事件进行全局排序,这样客户端可以通过顺序号推断事件的顺序
节点状态属性

ACL保障数据的安全
访问控制列表(Access Control Lists,ACL),表示为scheme: id: permissions。scheme 表示采用哪一种机制,id表示用户,permissions 表示相关权限(如只读,读写,管理等)。
scheme
world:
默认方式,相当于全世界都能访问
auth:
代表已经认证通过的用户(可以通过addauth digest user:pwd 来添加授权用户)
digest:
即用户名:密码这种方式认证,这也是业务系统中最常用的
ip:
使用Ip地址认证
id
id是验证模式,不同的scheme,id的值也不一样。
- scheme为world时
anyone - scheme为auth时
username:password - scheme为digest时
username:BASE64(SHA1(password)) - scheme为ip时:
客户端的ip地址
permission
CREATE、READ、WRITE、DELETE、ADMIN 也就是 增、删、改、查、管,这5种权限简写为crwda(即:每个单词的首字符缩写)
- CREATE( c ):创建子节点的权限
- DELETE( d ):删除节点的权限
- READ( r ):读取节点数据的权限
- WRITE( w ):修改节点数据的权限
- ADMIN( a ):设置子节点权限的权限
常用命令
服务端
在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作
启动ZK服务: zkServer.sh start
查看ZK服务状态: zkServer.sh status
停止ZK服务: zkServer.sh stop
重启ZK服务: zkServer.sh restart
客户端
使用 zkCli.sh -server 127.0.0.1:2181 连接到 ZooKeeper 服务,连接成功后,系统会输出 ZooKeeper 的相关环境以及配置信息。 命令行工具的一些简单操作如下:
- 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容
- 显示根目录下、文件: ls2 / 查看当前节点数据并能看到更新次数等数据
- 创建文件,并设置初始内容: create [-e] [-s] 【-e 零时节点】 【-s 顺序节点】/zk “test” 创建一个新的 znode节点“ zk ”以及与它的值"test"
- 获取文件内容: get /zk [watch]【watch 监听】确认 znode 是否包含我们所创建的字符串
- 修改文件内容: set /zk “test” 对 zk 所关联的字符串进行设置
- 删除文件: delete /zk 将刚才创建的 znode 删除,如果存在子节点删除失败
- 递归删除:rmr /zk 将刚才创建的 znode 删除,子节点同时删除
- 退出客户端: quit
- 帮助命令: help
ACL
getAcl
获取指定节点的ACL信息
create /zk/acl 100

getAcl /zk/acl

setAcl
设置指定节点的ACL信息
setAcl /zk/acl world:anyone:crwa
getAcl /zk/acl

create /zk/acl/child 200
delete /zk/acl/child

addauth
注册和登陆
Auth
addauth digest user1:123456 # 需要先添加一个用户
setAcl /zk/acl auth:user1:123456:crwa # 然后才可以拿着这个用户去设置权限
getAcl /zk/acl # 密码是以密文的形式存储的

退出客户端后(quit),重新登陆:
ls /zk/acl #没有权限无法访问

addauth digest user1:123456 # 重新新增权限后可以访问了
ls /zk/acl

所以 addauth 有注册并登陆 和登陆的作用
Digest
auth与digest的区别就是,前者使用明文密码进行登录,后者使用密文密码进行登录
前面已经创建了 user1,并可以看到密文,密文可以保存:

addauth digest user1:HYGa7IZRm2PUBFiFFu8xY2pPP/s= #登陆

常用四字命令
ZooKeeper 支持某些特定的四字命令字母与其的交互。用来获取 ZooKeeper 服务的当前状态及相关信息。可通过 telnet 或 nc 向 ZooKeeper 提交相应的命令 :
yum install nc
echo stat|nc 127.0.0.1 2181 来查看哪个节点被选择作为follower或者leader
echo ruok|nc 127.0.0.1 2181 测试是否启动了该Server,若回复imok表示已经启动。
echo dump| nc 127.0.0.1 2181 列出未经处理的会话和临时节点。
echo kill | nc 127.0.0.1 2181 关掉server
echo conf | nc 127.0.0.1 2181 输出相关服务配置的详细信息。
echo cons | nc 127.0.0.1 2181 列出所有连接到服务器的客户端的完全的连接 / 会话的详细信息
echo envi |nc 127.0.0.1 2181 输出关于服务环境的详细信息(区别于 conf 命令)。
echo reqs | nc 127.0.0.1 2181 列出未经处理的请求。
echo wchs | nc 127.0.0.1 2181 列出服务器 watch 的详细信息。
echo wchc | nc 127.0.0.1 2181 通过 session 列出服务器 watch 的详细信息,它的输出是一个与 watch 相关的会话的列表。
echo wchp | nc 127.0.0.1 2181 通过路径列出服务器 watch 的详细信息。它输出一个与 session 相关的路径。
日志可视化
前面以及讲了两个非常重要的配置一个是dataDir,存放的快照数据,一个是dataLogDir,存放的是事务日志文件
java -cp /root/app/zookeeper-3.4.12/zookeeper-3.4.12.jar:/root/app/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.200000001

java -cp /root/app/zookeeper-3.4.12/zookeeper-3.4.12.jar:/root/app/zookeeper-3.4.12/lib/slf4j-api-1.7.25.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.100000000

红框里面是你的安装了路径
参考:deer——Zookeeper
1599

被折叠的 条评论
为什么被折叠?



