ZooKeeper 3.0.0发行说明

17 篇文章 0 订阅
17 篇文章 1 订阅

 

ZooKeeper 3.0.0发行说明

这些发行说明包括新的开发人员和面向用户的不兼容性,功能和主要改进。

升级到3.0.0时的迁移说明

如果要从以前版本的ZooKeeper升级到版本3.0.0,则只需阅读本节,otw跳到更改

此版本中的少量更改导致非向后兼容的Zookeeper客户端用户代码和服务器实例数据。以下说明提供了有关如何将代码和日期从2.2.1版迁移到3.0.0版的详细信息。

注意:当对源代码进行向后不兼容的更改时,ZooKeeper会增加主版本号(major.minor.fix)。作为从SourceForge迁移的一部分,我们更改了包结构(com.yahoo.zookeeper。*到org.apache.zookeeper。*),并认为现在是合并我们一直拒绝的一些更改的好时机。因此,从2.2.1迁移到3.0.0版本的ZooKeeper时,将需要以下内容。

迁移客户端代码

在ZooKeeper 3.0.0版中,底层客户端 - 服务器协议已更改。因此,客户端必须与服务群集一起升级,以确保系统正常运行(旧的3.0.0之前的客户端不能保证对升级的3.0.0服务器运行,反之亦然)。

观察管理

在以前的ZooKeeper版本中,如果客户端丢失了与ZooKeeper服务器的连接,则客户端注册的任何手表都将丢失。这意味着开发人员必须跟踪他们感兴趣的手表,并在收到会话断开事件时重新注册。在此版本中,客户端库跟踪客户端已注册的监视,并在与新服务器建立连接时重新注册监视。只要能够处理未经请求的手表,仍然可以手动重新注册兴趣的应用程序应继续正常工作。例如,旧应用程序可能会为/ foo和/ goo注册监视,丢失连接,并仅重新注册/ goo。只要应用程序能够接收/ foo的通知(可能忽略它),就不需要更改它。手表管理的一个警告:

此版本还允许客户端指定特定于呼叫的监视功能。这使开发人员能够在不同的监视功能中模块化逻辑,而不是在连接到ZooKeeper句柄的监视功能中填充所有内容。呼叫特定监视功能只要它们处于活动状态就会接收所有会话事件,但只会接收它们注册的监视回调。

Java API

  1. java包结构已从com.yahoo.zookeeper * 更改为org.apache.zookeeper *。这可能会影响所有使用ZooKeeper API的java代码(通常是import语句)
  2. 使用枚举(而不是整数)重新指定客户端ZooKeeper API中使用的许多常量。有关详细信息,请参阅ZOOKEEPER-7ZOOKEEPER-132ZOOKEEPER-139
  3. ZOOKEEPER-18删除了KeeperStateChanged,改为使用KeeperStateDisconnected

另请参阅当前的Java API

C API

  1. 为了减少命名空间冲突,重命名了客户端ZooKeeper API中使用的许多常量,有关详细信息,请参阅ZOOKEEPER-6

迁移服务器数据

以下问题导致磁盘数据格式(ZK数据目录中包含的快照和事务日志文件)发生更改,并且需要运行迁移实用程序。

将ZooKeeper服务器实例升级到3.0.0版时,必须运行以下一次,并且只运行一次。

注意

下面引用的和目录分别由ZooKeeper配置文件中的dataLogDir 和dataDir规范指定。如果未在ZooKeeper服务器配置文件中明确指定,dataLogDir默认为dataDir的值(在这种情况下,为升级实用程序提供两个参数的相同目录)。

  1. 关闭ZooKeeper服务器群集。

  2. 备份您的和目录

  3. 使用运行升级

    • bin/zkServer.sh upgrade <dataLogDir> <dataDir>

    要么

    • java -classpath pathtolog4j:pathtozookeeper.jar UpgradeMain <dataLogDir> <dataDir>

    where 存储所有事务日志(log。的目录存储所有快照(快照。的目录

  4. 重新启动群集。

如果在升级过程中出现任何故障,请继续阅读以清理数据库。

这就是ZooKeeper中升级的工作原理。这将有助于您在升级时遇到问题时进行故障排除

  1. 从升级移动文件<dataLogDir>,并<dataDir><dataLogDir>/version-1/<dataDir>/version-1分别(版本1子目录被升级程序创建)。
  2. 升级会创建一个新版本的子目录<dataDir>/version-2<dataLogDir>/version-2
  3. 升级将旧数据库从内存中读取<dataDir>/version-1<dataLogDir>/version-1进入内存,并创建新的升级快照。
  4. 升级将新数据库写入<dataDir>/version-2

故障排除。

  1. 如果您在2.0数据库上没有从2.0升级而启动ZooKeeper 3.0 - 服务器将启动一个空数据库。这是因为服务器假设<dataDir>/version-2并且<dataLogDir>/version-2将使数据库开始。由于在没有升级的情况下它将为空,因此服务器将以空数据库开头。在这种情况下,关闭ZooKeeper服务器,删除版本2目录(请记住,这将导致在启动3.0后丢失更新。)然后启动升级过程。
  2. 如果试图重命名文件到版本1目录升级失败,你应该尝试和移动下的所有文件<dataDir>/version-1 ,并<dataLogDir>/version-1<dataDir><dataLogDir>分别。然后再次尝试升级。
  3. 如果您不希望使用ZooKeeper 3.0运行并且更喜欢使用ZooKeeper 2.0运行并且已经升级 - 您可以运行ZooKeeper 2 <dataDir>并将<dataLogDir>目录更改为<dataDir>/version-1<dataLogDir>/version-1。请记住,您将丢失升级后所做的所有更新。

迁移服务器配置

ZooKeeper服务器配置文件发生了重大变化。

electionAlg配置属性指定的默认选举算法已从默认值0更改为默认值3。请参阅 管理员指南的“ 群集选项”部分,特别是electionAlgserver.X属性。

您将需要将electionAlg显式设置为其先前的默认值0或更改您的server.X选项以包括领导者选举端口。

自ZooKeeper 2.2.1以来的变化

版本2.2.1代码,文档,二进制文件等仍然可以在SourceForge上访问

问题笔记
ZOOKEEPER-43服务器端自动重置手表。
ZOOKEEPER-132创建枚举以替换ZooKepper.create方法中的CreateFlag
ZOOKEEPER-139为WatcherEvent的KeeperState和EventType创建枚举
ZOOKEEPER-18守门员状态不一致
ZOOKEEPER-38日志/快照文件中的标头
ZOOKEEPER-8统计包含数量的子项和大小
ZOOKEEPER-6zookeeper.h中的问题标识符列表
ZOOKEEPER-7对于类型和状态,请使用枚举而不是整数
ZOOKEEPER-27服务器和客户端的唯一DB标识符
ZOOKEEPER-32ZooKeeper数据的CRC
ZOOKEEPER-33更好的ACL管理
ZOOKEEPER-203在releasenotes中修复datadir拼写错误
ZOOKEEPER-145为从2.x迁移到3.0的用户编写详细的发行说明
ZOOKEEPER-23重新连接时手表自动重置
ZOOKEEPER-191forrest docs升级。
ZOOKEEPER-201读取快照和事务日志时验证幻数
ZOOKEEPER-200快照和日志的幻数必须不同
ZOOKEEPER-199修复持久性代码中的日志消息
ZOOKEEPER-197为快照创建校验和
ZOOKEEPER-198FollowerSyncRequest.java中缺少apache许可证头
ZOOKEEPER-5Zookeeper服务器中的升级功能。
ZOOKEEPER-194修复zookeeperAdmin.xml中的术语
ZOOKEEPER-151将文档更改为服务器配置
ZOOKEEPER-193更新java示例doc以使用最新的zookeeper进行编译
ZOOKEEPER-187缺少CreateMode api文档
ZOOKEEPER-186为forrest文档添加新的“releasenotes.xml”
ZOOKEEPER-190Reorg链接到文档和导航到文档到相关部分
ZOOKEEPER-189forrest build未经验证的xml输入文档
ZOOKEEPER-188检查所有服务器是否存在选举端口
ZOOKEEPER-185改进版FLETest
ZOOKEEPER-184测试:使用memcpy函数需要显式include derective
ZOOKEEPER-183数组下标位于od_completion,src / cli.c中的数组范围之上。
ZOOKEEPER-182zookeeper_init接受空的host-port字符串并返回指向zhandle_t的有效指针。
ZOOKEEPER-17zookeeper_init doc需要澄清
ZOOKEEPER-181一些Source Forge文档没有被移过:javaExample,zookeeperTutorial,zookeeperInternals
ZOOKEEPER-180伞文章讨论的新主题文档中需要占位符部分
ZOOKEEPER-179程序员指南“基本操作”部分缺少内容
ZOOKEEPER-178FLE测试。
ZOOKEEPER-159涵盖领导人选举的两个角落案例
ZOOKEEPER-156从旧维基页面更新程序员指南和acl详细信息
ZOOKEEPER-154概述doc中的可靠性图表需要上下文
ZOOKEEPER-157同行找不到现有的领导者
ZOOKEEPER-155改进概述doc的“zookeeper项目”部分
ZOOKEEPER-140QuorumCnxManager中的死锁
ZOOKEEPER-147这是大多数[tbd ...]清除的文档版本
ZOOKEEPER-150动物园管理员建造破碎
ZOOKEEPER-136同步导致仲裁的所有粉丝都挂起。
ZOOKEEPER-134findbugs清理
ZOOKEEPER-133哈德森测试间歇性地失败
ZOOKEEPER-144为观察者事件添加tostring支持,为事件类型/状态添加枚举
ZOOKEEPER-21改善zk ctor / watcher
ZOOKEEPER-142提供Javadoc,以确定可能存储在znode中的数据字节数组的最大大小
ZOOKEEPER-93为Zookeeper创建文档
ZOOKEEPER-117领导选举中的线索问题
ZOOKEEPER-137客户端观察者对象可能会丢失事件
ZOOKEEPER-131老领导人选举可以一次又一次地选出一位死去的领导人
ZOOKEEPER-130更新build.xml以支持apache发布过程
ZOOKEEPER-118在followerrequestprocessor.run中的findbugs标记的switch语句
ZOOKEEPER-115QuorumCnxManager中的潜在NPE
ZOOKEEPER-114清理zookeeper客户端中的丑陋事件消息
ZOOKEEPER-112src / java / main ZooKeeper.java中嵌入了测试代码。
ZOOKEEPER-39在读取操作中使用Watcher对象而不是布尔值。
ZOOKEEPER-97支持代码生成器中的可选输出目录。
ZOOKEEPER-101在Hudson上集成ZooKeeper和“违规”功能
ZOOKEEPER-105捕获Zookeeper异常并在stderr上打印。
ZOOKEEPER-42将领导者选举更改为快速tcp。
ZOOKEEPER-48auth_id现在在没有auth id存在时正确处理
ZOOKEEPER-44创建前缀为0的序列标志子项,以便按字典顺序对它们进行排序。
ZOOKEEPER-108修复仲裁上的同步操作重新排序。
ZOOKEEPER-25Zookeeper的Fuse模块。
ZOOKEEPER-58ClientCnxn.java上的竞争条件
ZOOKEEPER-56为build.xml添加三叶草支持。
ZOOKEEPER-75使用nabble.com注册ZooKeeper邮件列表
ZOOKEEPER-54在测试中删除睡眠。
ZOOKEEPER-55build.xml failes从SVN检索版本号,ant目标“dist”失败
ZOOKEEPER-89当ZK连接失败时调用WhenOwnerListener.whenNotOwner
ZOOKEEPER-90当ZK会话到期并且znode是领导者时调用WhenOwnerListener.whenNotOwner
ZOOKEEPER-82使ZooKeeperServer更加友好。
ZOOKEEPER-110构建脚本依赖于svnant,它与subversion 1.5工作副本不兼容
ZOOKEEPER-111显着清理现有测试。
ZOOKEEPER-122在黄麻的Utils.toCSVString中修复NPE。
ZOOKEEPER-123修复了为记录器指定的错误类。
ZOOKEEPER-2修复QuorumPeer和FastLeader选举中的同步问题。
ZOOKEEPER-125在FastLeaderElection中删除不需要的类声明。
ZOOKEEPER-61客户端/服务器测试用例中的地址。
ZOOKEEPER-75清理库目录
ZOOKEEPER-109通过静态分析找到NPE和资源问题的清理
ZOOKEEPER-76Commit 677109删除了cobertura库,但没有删除构建目标。
ZOOKEEPER-63客户关闭的竞争条件
ZOOKEEPER-70为ZooKeeper添加骨架forrest doc结构
ZOOKEEPER-79在wiki食谱页面上记录jacob的领导者选举
ZOOKEEPER-73将ZK wiki从SourceForge移动到Apache
ZOOKEEPER-72ZooKeeper ASF站点的初始创建/设置。
ZOOKEEPER-71确定要做什么重新使用ZooKeeper Changelog
ZOOKEEPER-68ZooKeeper.java中的parseACL无法解析ACL的元素,应该是lastIndexOf而不是IndexOf
ZOOKEEPER-130更新build.xml以支持apache发布过程。
ZOOKEEPER-131修复旧领导人选举可以一次又一次地选出一位死去的领导人。
ZOOKEEPER-137客户端观察者对象可能会丢失事件
ZOOKEEPER-117领导选举中的线索问题
ZOOKEEPER-128异步客户端操作的测试覆盖率需要改进
ZOOKEEPER-127在配置中断服务中使用非标准选举端口
ZOOKEEPER-53测试在solaris上失败了。
ZOOKEEPER-172FLE测试
ZOOKEEPER-41示例启动脚本
ZOOKEEPER-33更好的ACL管理
ZOOKEEPER-49SetACL不起作用
ZOOKEEPER-20删除节点时不会触发子监视
ZOOKEEPER-15在build.xml中更好地处理故障:test
ZOOKEEPER-11使用ArrayList代替List
ZOOKEEPER-45初始导入后重构SVN存储库
ZOOKEEPER-1来自Yahoo!的初始ZooKeeper代码贡献

 

转载来源:https://github.com/apache/zookeeper/blob/master/zookeeper-docs/src/main/resources/markdown/releasenotes.md 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值