- Znode 同时包含数据与子节点,就像可以拥有子文件的文件
- Znode 维持一个递增的状态计数器,状态每改变一次计数器也随之增加
- Znode 上的数据操作以及数据都是原子性的
- 临时节点的生命周期终止于 Session 的完结
- Znode 支持监视器,Znode 改变后监视器将触发并删除
- 读操作直接读取任一服务器副本,写协议使写操作都在单一服务器上进行(leader,其他的叫 followers)
- 信息收发层关注在失败时更换 leader 以及同步 leader 与 followers
- Zookeeper 原子的信息收发协议确保内部系统的状态一致
- 根节点是 / 二级是 /app 三级是 /app/child
- 节点数据在内存中,且都很小
- 操作只有 create delete exists get_data set_data get_children sync
- 自带的 zoo_sample.cfg 就是典型的单台配置,单机配置最少如下
# 基本时间单位,用于心跳,Session 的最小过期时间是他的两倍
tickTime=2000
# 内存中数据的快照位置,用于故障恢复
dataDir=/var/lib/zookeeper
# 客户端连接的端口
clientPort=2181
# zkCli.sh -server 127.0.0.1:2181 <<< 其中 2181 是配置中的 clientPort
> ls / <<< 列出所有节点
> create /a_node some_data <<< 创建一个 /a_node 节点并与数据 some_data 关联,重新查看,会多出一个 /a_node 节点
> get /a_node <<< 获取 /a_node 节点中的数据,返回 some_data
> set /a_node test_set <<< 重新设置值
> delete /a_node <<< 删除 /a_node,重新查看,会少一个 /a_node 节点
- 副本(与单机对应)模式下的服务器叫做 quorum(法定人数?),同一 quorum 下的服务器都拥有相同的配置文件
- 集群配置最少三台服务器,且推荐奇数台(投票相关),两个服务器甚至不如单台稳定
- 集群配置中需要新添以下内容
# quorum 中服务器连接到 leader 的最大时间,好像与 initLimit 也存在什么关系??
initLimit=5
# 与 leader 通信时响应最大延时
syncLimit=2
# 集群中的其他 ZooKeeper 服务器,会生成对应的 mypid 文件两个端口分别是集群内通讯时使用(更新数据啊什么的)与选举 Leader 时使用
server.1=192.168.1.62:2888:3888
server.2=192.168.1.63:2888:3888
server.3=192.168.1.64:2888:3888