- 中间件提供协调服务
- 作用于分布式文系统 ,支持java
特性:
- 一致性:数据一致性,数据按照顺序分批入库
- 原子性:事务要么成功要么失败,不会局部化
- 单一视图:客户端连接任一集群中的节点,数据都是一致的
- 可靠性:每次对zk的操作状态都会保存在服务端
- 实时性:客户端可以读取到zk服务端的最新数据
zk特性之watch机制
针对每个节点的操作,都会有一个监督者,watcher
当监控的某个对象发生了变化,则触发watcher事件
zk中的watcher是一次性的,触发后立即销毁
父节点子节点,增删改都能触发watcher
zuu.cfg配置
tickTime:用于计算的时间单元,比如session超时= N*tickTime\
initTime:用于集群,允许从节点连接并同步到master节点的初始化连接时间,以tickTime的倍数来表示
syncLimt:用于集群,master主节点与从节点之间发送消息,请求和应答的时间长度。(心跳机制 )
zookeeper基本数据模型
一个树形结构,每一个节点都称为znode,它可以有子节点,也可以有数据
每一个节点分为临时节点和永久节点,临时数据在客户端断开后消失
每个节点都有各自的版本号,可以通过命令行来显示节点的信息
每当数据发送变化的时候,那么该节点的版本号会累加(乐观锁)。
删除/修改过时节点,版本号不匹配会报错
每个zk节点的数据不宜过大,几k即可
节点可以设置权限acl,通过权限来限制用户的访问
zookeeper的作用
- 提供分布式锁,防止分布式环境中不同进程之间的资源的争夺
- master节点选举,主节点挂掉以后,j从节点就会接受工作,并且保证这个节点是唯一的,从而保证集群的高可用
- 集群管理,集群中保证数据的强一致性
- 统一配置文件管理,只需要部署一台服务器,则可以把相同的配置文件同步更新到其它所有服务器
zookeeper的acl权限控制
针对节点可以设置相关读写权限,可以指定不同的权限范围以及角色
zk的acl通过[scheme:id:permissions]来构成权限列表
scheme:代表采用的某种权限机制 id 代表允许访问的用户 permissions 权限字符串组合
scheme
- world:world下只有一个id,即只有一个用户也就是anyone,写法world:anyone:[permissions]
- auth :代表认证登录,需要注册用户有权限就行,写法 auth:user:password[permissions]
- digest :需要对密码加密才能访问,写法为diegest:username:BASE64(SHA1(password)):[permissions]
- ip :当设置为ip访问地址,写法ip:123.456.789:[permissions]
- super : 代表超级管理员拥有所有权限
permissions cdrwa
CREATE : 创建子节点 READ : 获取节点、子节点 WRITE : 设置节点数据 DELETE : 删除子节点
acl的使用场景
- 开发/测试环境隔离,开发者无权操作测试库的节点
- 生产环境上控制指定ip的服务可以访问相关节点,防止混乱
zk四字命令 The Four Letter Words
yum install nc
echo [command] | nc [ip] [port]