zookeeper 学习笔记

Zookeeper 是一个分布式协调服务,常用于实现如Hadoop NameNode HA等场景。它提供注册、监听事件和回调功能。在选举Leader过程中,遵循ZXID优先级和过半机制,确保集群一致性。服务器角色包括Leader、Follower和Observer,其中Observer不参与投票,仅同步状态,提升读性能。客户端连接在Session超时前可切换到其他节点,确保高可用性。

zookeeper 简单说 就是 一句原语   团结和睦一直对外

通过一个hadoop的namenode的HA例子引入,上小图


zookeeper     1注册  2监听事件  3 回调函数

值得注意的是回调函数是 zkfc自己的,是zkfc当初注册在zk cluster上的


client客户端发出一个请求给其中一个follower,follower没有权限处理,再汇报给leader,leader收到半数之上的同意后,正式通过请求,leader向所有follower发布,开始执行生效。其他client请求信息,follower会和leader做下sync,然后把结果返回给client。leader通过消息队列的方式确保所有follower都知道有一个事物生效了。每一个follower有一个自己的消息队列。最终一致。


选leader的过程

每个server都会有个 server_id(my_id)和zxid.

事务zxid优先级高于s_id.

传递性

过半机制



角色模型

集群状态
选举模式  安其内
广播模式  壤其外
Server状态
LOOKING:当前Server不知道leader是谁,正在搜寻
LEADING:当前Server即为选举出来的leader
FOLLOWING:leader已经选举出来,当前Server与之同步
主从分工
领导者(leader)
负责进行投票的发起和决议,更新系统状态
学习者(learner)
包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并向客户端返回结果,在选主过程中参与投票
Observer
可以接受客户端连接,将写请求转发给  leader,但observer不参加投票过程,只同步leader  的状态,observer的目的是为了扩展系统,提高读取  速度
客户端(client)

请求发起方





会话session


客户端与集群节点建立TCP连接后获得一个session
如果连接的Server出现问题,在没有超过Timeout时间时,可以连接其他节点
同一session期内的特性不变

Session是由谁来创建的?
Leader:产生一个唯一的session,放到消息队列,让所有server知道
(过半)






















### ZooKeeper 学习笔记 #### 1. 基本概念解析 ZooKeeper 是一个分布式的、开放源码的分布式应用程序协调服务,属于 Google Chubby 的一个开源实现[^5]。它提供了一套简单而强大的原语集,用于构建可靠的分布式系统。 - **一致性树结构**:ZooKeeper 使用层次化的命名空间来表示数据模型,类似于文件系统的目录路径。每个节点称为 znode,既可以保存少量的数据也可以作为其他 znodes 的父级容器。 - **临时节点与持久化节点**:创建时可以选择是否为临时节点;如果客户端会话结束,则该类型的znode会被自动删除。相反,对于持久化节点来说,在显式移除之前它们一直存在。 - **顺序节点**:当创建带有 SEQUENCE 标志的新节点时,Zookeeper 将为其分配一个全局唯一的递增编号并附加到名称后面形成完整的路径名。 #### 2. 最佳实践建议 为了确保高效稳定地运行 Zookeeper 集群和服务: - **合理规划集群规模**:通常情况下三台机器组成的奇数个成员构成的小型集群就足以满足大多数应用场景的需求,并能保证高可用性和容错能力。 - **配置参数优化**:调整诸如 `tickTime` (心跳间隔时间) 和 `initLimit/syncLimit` (初始化/同步限制次数)等关键属性以适应实际工作负载特点。 - **监控健康状态**:定期检查服务器日志以及通过命令行工具获取统计信息 (`mntr`) 或者四字指令(`ruok`, `stat`) 来评估整体性能表现和潜在问题所在。 ```bash echo stat | nc localhost 2181 ``` #### 3. 实际案例分析 假设有一个微服务体系架构下多个组件之间需要共享某些配置项或元数据的情况。此时就可以利用 Zookeeper 提供的服务发现功能让各个实例注册自己的地址端口等信息给中心节点,从而使得新加入的服务能够快速定位依赖对象的位置而不必硬编码这些细节于代码内部。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值