ZooKeeper 配置实践:从最佳实践到常见陷阱 (zookeeper)
导言
ZooKeeper 是一个分布式协调服务,广泛用于管理大规模分布式系统中的配置和状态信息。为了充分利用 ZooKeeper 的强大功能,正确配置至关重要。本文将探讨 ZooKeeper 配置的最佳实践,并重点介绍常见的陷阱和如何避免它们。
最佳实践
1. 设置正确的时间服务器
ZooKeeper 依赖于准确的时间戳来管理会话和数据完整性。确保所有 ZooKeeper 服务器使用相同的 NTP 服务器同步时钟至关重要。
2. 选择合适的数据布局
ZooKeeper 使用分层树状结构来存储数据。选择合适的数据布局对于优化读取和写入性能至关重要。考虑将经常访问的数据存储在靠近根目录的位置。
3. 配置会话超时
会话超时定义了 ZooKeeper 服务器在不再收到客户端请求后关闭会话的时间。设置一个适当的超时值对于在保持会话活动与避免不必要的会话创建之间取得平衡至关重要。
4. 启用安全特性
ZooKeeper 提供了多种安全特性,例如身份验证和授权。启用这些特性以保护 ZooKeeper 集群免受未经授权的访问和恶意活动至关重要。
5. 监视集群活动
定期监视 ZooKeeper 集群的活动对于及早发现问题和采取预防措施至关重要。使用监控工具或编写自定义脚本来监视关键指标,例如服务器状态、会话数和数据更新。
常见陷阱
1. 过度使用 ZooKeeper
ZooKeeper 不适合存储大量数据。理想情况下,它用于协调和管理小量关键数据,例如配置设置和锁。
2. 配置不一致
确保 ZooKeeper 集群中的所有服务器都使用相同的配置至关重要。不一致的配置可能会导致集群不稳定和数据丢失。
3. 错误的小组成员数
小组成员数的选择会影响 ZooKeeper 集群的性能和可用性。通常,奇数个小组成员(例如 3、5 或 7)会导致更快的反应时间和更好的故障恢复能力。
4. 不足的网络连接
ZooKeeper 服务器之间需要稳定的网络连接。确保网络带宽和延迟能够满足 ZooKeeper 集群的需求至关重要。
5. 忽略故障管理
故障管理是 ZooKeeper 集群运营的一个关键方面。制定一个故障管理计划,定义当服务器或网络故障发生时的步骤至关重要。
结论
ZooKeeper 配置是一个至关重要的过程,能够确保分布式系统的高可用性和可伸缩性。通过遵循最佳实践并避免常见陷阱,组织可以充分利用 ZooKeeper 的功能,提供可靠且高效的协调服务。
zookeeper是什么?
zookeeper是动物管理员的意思。
ZooKeeper是一个分布式的,开放源码租前慎的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
ZooKeeper包含一个简单的原语集,提供Java和C的接口。
ZooKeeper代码版本中,提供了分布式独享锁、选举、队列的接口,代码在$zookeeper_home\src\recipes。其中分布锁和队列有Java和C两个版本,选举只有Java版本。
它的原理:
ZooKeeper是以Fast Paxos算悔判法为基础的,Paxos 算法存在活锁的问题,即当有多个proposer交错提交时,有弊敬可能互相排斥导致没有一个proposer能提交成功,而Fast Paxos做了一些优化,通过选举产生一个leader (领导者),只有leader才能提交proposer,具体算法可见Fast Paxos。因此,要想弄懂ZooKeeper首先得对Fast Paxos有所了解。
ZooKeeper的基本运转流程:1、选举Leader。2、同步数据。3、选举Leader过程中算法有很多,但要达到的选举标准是一致的。4、Leader要具有最高的执行ID,类似root权限。5、集群中大多数的机器得到响应并接受选出的Leader。
ZooKeeper - 常见问题
Zookeeper是一个分布式数据管理与协调服务,目标是可以提供高性能、高可用和顺序访问控制的能力,同时也是为了解决分布式环境下数据一致性的问题。 在一致性协议方面,注重CP。 首先,Zookeeper集群中有几个关键的概念,Leader、Follower和Observer,Zookeeper中通常只有Leader节点可以写入,Follower和Observer都只是负责读,但是Follower会参与节点的选举和过半写成功,Observer则不会,他只是单纯的提供读取数据的功能。 通常这样设置的话,是为了避免太多的从节点参与过半写的过程,导致影响性能,这样Zookeeper只要使用一个几台机器的小集群就可以实现高性能了,如果要横向扩展的话,只需要增加Observer节点即可。 ZooKeeper建议集群节点个数为奇数,只要超过一半的机器能够正常提供服务,那么整个集群都是可用的状态。 Zookeeper中数据存储于内存之中,这个数据节点就叫做Znode,他是一个树形结构,比如/a/b/c类似。 而Znode又分为持久节点、临时节点、顺序节点三大类。 持久节点是指只要被创建,除非主动移除,否则都应该一直保存在Zookeeper中。 临时节点不同的是,他的生命周期和客户端Session会话一样,会话失效,那么临时节点就会被移除。 还有就是临时顺序节点和持久顺序节点,除了基本的特性之外,子节点的名称还具有有序性。 会话自然就是指Zookeeper客户端和服务端之间的通信,他们使用TCP长连接的方式保持通信,通常,肯定会有心跳检测的机制,同时他可以接受来自服务器的Watch事件通知。 用户可以在指定的节点上注册Wather,这样在事件触发的时候,客户端就会收到来自服务端的通知。 Zookeeper使用ACL来进行权限的控制,包含以下5种: CREATE,创建子节点权限 DELETE,删除子节点权限 READ,获取节点数据和子节点列表权限 WRITE,更新节点权限 ADMIN,设置节点ACL权限 所以,ZooKeeper通过集群的方式来做到高可用,通过内存数据节点Znode来达到高性能,但是存储的数据量不能太大,通常适用于读多写少的场景。 Zookeeper可以提供分布式数据的发布/订阅功能,依赖的就是Wather监听机制。 客户端可以向服务端注册Wather监听,服务端的指定事件触发之后,就会向客户端发送一个事件通知。 他有几个特性: Zookeeper通过ZAB原子广播协议来实现数据的最终顺序一致性,他是一个类似2PC两阶段提交的过程。 由于Zookeeper只有Leader节点可以写入数据,如果是其他节点收到写入数据的请求,则会将之转发给Leader节点。 主要流程如下: Leader收到请求之后,将它转换为一个proposal提议,并且为每个提议分配一个全局唯一递增的事务ID:zxid,然后把提议放入到一个FIFO的队列中,按照FIFO的策略发送给所有的Follower Follower收到提议之后,以事务日志的形式写入到本地磁盘中,写入成功后返回ACK给Leader Leader在收到超过半数的Follower的ACK之后,即可认为数据写入成功,就会发送commit命令给Follower告诉他们可以提交proposal了 ZAB包含两种基本模式,崩溃恢复和消息广播。 整个集群服务在启动、网络中断或者重启等异常情况的时候,首先会进入到崩溃恢复状态,此时会通过选举产生Leader节点,当集群过半的节点都和Leader状态同步之后,ZAB就会退出恢复模式。 之后,就会进入消息广播的模式。 Leader的选举可以分为两个方面,同时选举主要包含事务zxid和myid,节点主要包含3个状态 首先,每个节点都会对自己进行投票,然后把投票信息广播给集群中的其他节点 节点接收到其他节点的投票信息,然后和自己的投票进行比较,首先zxid较大的优先,如果zxid相同那么则会去选择myid更大者,此时大家都是LOOKING的状态 投票完成之后,开始统计投票信息,如果集群中过半的机器都选择了某个节点机器作为leader,那么选举结束 最后,更新各个节点的状态,leader改为LEADING状态,follower改为FOLLOWING状态 如果开始选举出来的leader节点宕机了,那么运行期间就会重新进行leader的选举。 leader宕机之后,非observer节点都会把自己的状态修改为LOOKING状态,然后重新进入选举流程 生成投票信息(myid,zxid),同样,第一轮的投票大家都会把票投给自己,然后把投票信息广播出去 接下来的流程和上面的选举是一样的,都会优先以zxid,然后选择myid,最后统计投票信息,修改节点状态,选举结束。 还是会存在的,可以分成3个场景来描述这个问题。 因为ZooKeeper是过半成功即代表成功,假设我们有5个节点,如果123节点写入成功,如果这时候请求访问到4或者5节点,那么有可能读取不到数据,因为可能数据还没有同步到4、5节点中,也可以认为这算是数据不一致的问题。 解决方案可以在读取前使用sync命令。 这也就是数据同步说过的问题。 leader刚生成一个proposal,还没有来得及发送出去,此时leader宕机,重新选举之后作为follower,但是新的leader没有这个proposal。 这种场景下的日志将会被丢弃。 如果发送proposal成功了,但是在将要发送commit命令前宕机了,如果重新进行选举,还是会选择zxid最大的节点作为leader,因此,这个日志并不会被丢弃,会在选举出leader之后重新同步到其他节点当中。
关于zookeeper的说法错误的是
关于Zookeeper的说法错误的是:Zookeeper是一个分布式协调服务的收费框架。
一、Zookeepe的定义
Zookeeper是一个分布式协调服务,由雅虎研究员开发,是Google的Chubby一个开源实现。
二、Zookeeper的基础服务
Zookeeper为分布式应用提供高效、高可用的分布式协调服务,主要提供了诸如命名服务、配置服务、集群管理、分布式锁等分布式基础服务。
三、Zookeeper的目标
Zookeeper的目标是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
四、Zookeeper的分布式系统
在分布式系统中,Zookeeper可以帮助管理服务的配置信息,使得整个系统可以动态地适应环境和服务的变更。同时,Zookeeper提供的分布式锁和队列等基础服务,可以有效地协调和管理分布式系统的并发操作。
这些特性使得Zookeeper在分布式系统中扮演着重要的角色,对人类在分布式系统领域的探索和发展有着深远的影响。
Zookeepe的优缺点
一、Zookeeper的优点
1、分布式协调过程简单,能解决分布式问题。
2、可以进行事务操作,事务操作能改变ZooKeeper服务器状态,包括数据节点创建与删除、数据内容更新和客户端会话创建与失效等。
每一个ZXID对应一次更新操作,通过这些ZXID可以间接地识别出ZooKeeper处理这些事务操作请求的全局顺序。
3、可以跟踪一个数字,表示每个更新的顺序,保证消息有序。
4、可以通过特定规则对数据进行编码,确保应用始终如一地运行。
5、在并发量不是太高的场景下,可以作为分布式锁使用。
二、Zookeeper的缺点
1、在高性能、高并发的场景下,不建议使用ZooKeeper的分布式锁,因为每次在创建锁和释放锁的过程中,都要动态创建、销毁瞬时节点来实现锁功能,网络通信频繁,性能短板突出。
2、相比Redis实现的分布式锁,Zookeeper在并发量很大、性能要求很高的场景下可能不够理想,因为可靠性问题可以通过其他方案去弥补。
若对本页面资源感兴趣,请点击下方或右方图片,注册登录后
搜索本页相关的【资源名】【软件名】【功能词】或有关的关键词,即可找到您想要的资源
如有其他疑问,请咨询右下角【在线客服】,谢谢支持!
相关文章
- 串串文化:街头美食的崛起,见证城市饮食变迁 (街边串串)
- 串串之旅:美食探险,解锁城市 hidden gems (串串美食图片大全)
- 串串人生:串起人生百味,品尝世间美味 (串串人生官网)
- 串串之夜:宵夜佳选,点亮城市夜间生活 (串串香百度百科)
- 串串王国:美食天堂,多样串串任你挑选 (串串王加盟费是多少)
- 串串盛宴:滋味万千,满足你的每一口渴望 (串享串串香加盟)
- 串串派对:舌尖上的狂欢,引爆美食圈社交风暴 (串串游戏叫什么名字)
- 串串传奇:串联城市社交,点燃夜间经济活力 (串串大全)
- 串串王国:串界至尊,引领美食潮流新风向 (串串王加盟费是多少)
- 串串:串起舌尖上的幸福,点亮城市美食夜空 (串串的串)
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~