zookeeper 基础知识

Zookeeper overview
分布式协调服务
分层命名空间

性能

官方压测leader挂掉后 200ms恢复
性能只读 100000/s 只写 10000/s

每一个节点可以存1M数据
不要把zookeeper当作数据库用,没法存储太多数据

实战

每个节点配置文件都要有所有节点地址
初次启动选主 节点ID大小

每一个节点都能存储数据
二进制安全 --- 按约定好的方式存储 解析

cZxid 创建 64位 前32代表leader纪元 后32代表事物id
mZxid 修改
pZxid 树最大id

节点

节点znode数据结构:


Zookeeper stat structure.png

持久节点
临时节点 - session是否存在,session结束就消失 没有持久化 create -e
序列节点 create -s

用途

  • 统一配置管理 服务发现 节点-1M数据
  • 分布式锁

分组管理 path结构
统一命名 序列
分布式同步 临时节点 -> 分布式锁 ->一个父节点下创建多个临时节点(队列式 事物式 锁??)

failvoer 容错 / 故障转移
启动客户端,建立一个session,sessionid会同步给其他节点,timeout内发生故障转移,session信息会保存

选主

事物ID 节点ID
2888 leader接收请求、同步数据
3888 选主投票
egrep '(2888|3888)'

集群

既然是zk集群,就有数据一致性的问题

  • 扩展性
    leader / follower / observer observer不参与选主,越少速度越快,扩展读能力
  • 可靠性
    快速选主
    数据最终一致性 follower 没有leader时服务不可用状态

修改数据 leader写日志 -> 写数据 -> follower 两阶段提交
client可以选择同步sync请求zk节点

paxos 算法
ZAB协议简版实现
zookeeper atomic broadcast

  • 怎样做到主从一致性
    拜占庭将军问题:
    leader选举

选主过程

redis哨兵订阅redis主通道 发现存活(发布订阅机制!!!)
zookeeper中集群节点要在zoo.cfg中手动配置

zookeeper 写 为什么半数以上确认就可以?

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容