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
- java包结构已从com.yahoo.zookeeper * 更改为org.apache.zookeeper *。这可能会影响所有使用ZooKeeper API的java代码(通常是import语句)
- 使用枚举(而不是整数)重新指定客户端ZooKeeper API中使用的许多常量。有关详细信息,请参阅ZOOKEEPER-7,ZOOKEEPER-132和ZOOKEEPER-139
- ZOOKEEPER-18删除了KeeperStateChanged,改为使用KeeperStateDisconnected
另请参阅当前的Java API
C API
- 为了减少命名空间冲突,重命名了客户端ZooKeeper API中使用的许多常量,有关详细信息,请参阅ZOOKEEPER-6
迁移服务器数据
以下问题导致磁盘数据格式(ZK数据目录中包含的快照和事务日志文件)发生更改,并且需要运行迁移实用程序。
- ZOOKEEPER-27服务器和客户端的唯一数据库标识符
- 用于ZooKeeper数据的ZOOKEEPER-32 CRC
- ZOOKEEPER-33更好的ACL管理
- 日志/快照文件中的ZOOKEEPER-38标头(版本+)
将ZooKeeper服务器实例升级到3.0.0版时,必须运行以下一次,并且只运行一次。
注意
下面引用的和目录分别由ZooKeeper配置文件中的dataLogDir 和dataDir规范指定。如果未在ZooKeeper服务器配置文件中明确指定,dataLogDir默认为dataDir的值(在这种情况下,为升级实用程序提供两个参数的相同目录)。
-
关闭ZooKeeper服务器群集。
-
备份您的和目录
-
使用运行升级
bin/zkServer.sh upgrade <dataLogDir> <dataDir>
要么
java -classpath pathtolog4j:pathtozookeeper.jar UpgradeMain <dataLogDir> <dataDir>
where 存储所有事务日志(log。)的目录。是存储所有快照(快照。)的目录。
-
重新启动群集。
如果在升级过程中出现任何故障,请继续阅读以清理数据库。
这就是ZooKeeper中升级的工作原理。这将有助于您在升级时遇到问题时进行故障排除
- 从升级移动文件
<dataLogDir>,并<dataDir>以<dataLogDir>/version-1/和<dataDir>/version-1分别(版本1子目录被升级程序创建)。 - 升级会创建一个新版本的子目录
<dataDir>/version-2和<dataLogDir>/version-2 - 升级将旧数据库从内存中读取
<dataDir>/version-1并<dataLogDir>/version-1进入内存,并创建新的升级快照。 - 升级将新数据库写入
<dataDir>/version-2。
故障排除。
- 如果您在2.0数据库上没有从2.0升级而启动ZooKeeper 3.0 - 服务器将启动一个空数据库。这是因为服务器假设
<dataDir>/version-2并且<dataLogDir>/version-2将使数据库开始。由于在没有升级的情况下它将为空,因此服务器将以空数据库开头。在这种情况下,关闭ZooKeeper服务器,删除版本2目录(请记住,这将导致在启动3.0后丢失更新。)然后启动升级过程。 - 如果试图重命名文件到版本1目录升级失败,你应该尝试和移动下的所有文件
<dataDir>/version-1,并<dataLogDir>/version-1以<dataDir>和<dataLogDir>分别。然后再次尝试升级。 - 如果您不希望使用ZooKeeper 3.0运行并且更喜欢使用ZooKeeper 2.0运行并且已经升级 - 您可以运行ZooKeeper 2
<dataDir>并将<dataLogDir>目录更改为<dataDir>/version-1和<dataLogDir>/version-1。请记住,您将丢失升级后所做的所有更新。
迁移服务器配置
ZooKeeper服务器配置文件发生了重大变化。
由electionAlg配置属性指定的默认选举算法已从默认值0更改为默认值3。请参阅 管理员指南的“ 群集选项”部分,特别是electionAlg和server.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-6 | zookeeper.h中的问题标识符列表 |
| ZOOKEEPER-7 | 对于类型和状态,请使用枚举而不是整数 |
| ZOOKEEPER-27 | 服务器和客户端的唯一DB标识符 |
| ZOOKEEPER-32 | ZooKeeper数据的CRC |
| ZOOKEEPER-33 | 更好的ACL管理 |
| ZOOKEEPER-203 | 在releasenotes中修复datadir拼写错误 |
| ZOOKEEPER-145 | 为从2.x迁移到3.0的用户编写详细的发行说明 |
| ZOOKEEPER-23 | 重新连接时手表自动重置 |
| ZOOKEEPER-191 | forrest docs升级。 |
| ZOOKEEPER-201 | 读取快照和事务日志时验证幻数 |
| ZOOKEEPER-200 | 快照和日志的幻数必须不同 |
| ZOOKEEPER-199 | 修复持久性代码中的日志消息 |
| ZOOKEEPER-197 | 为快照创建校验和 |
| ZOOKEEPER-198 | FollowerSyncRequest.java中缺少apache许可证头 |
| ZOOKEEPER-5 | Zookeeper服务器中的升级功能。 |
| ZOOKEEPER-194 | 修复zookeeperAdmin.xml中的术语 |
| ZOOKEEPER-151 | 将文档更改为服务器配置 |
| ZOOKEEPER-193 | 更新java示例doc以使用最新的zookeeper进行编译 |
| ZOOKEEPER-187 | 缺少CreateMode api文档 |
| ZOOKEEPER-186 | 为forrest文档添加新的“releasenotes.xml” |
| ZOOKEEPER-190 | Reorg链接到文档和导航到文档到相关部分 |
| ZOOKEEPER-189 | forrest build未经验证的xml输入文档 |
| ZOOKEEPER-188 | 检查所有服务器是否存在选举端口 |
| ZOOKEEPER-185 | 改进版FLETest |
| ZOOKEEPER-184 | 测试:使用memcpy函数需要显式include derective |
| ZOOKEEPER-183 | 数组下标位于od_completion,src / cli.c中的数组范围之上。 |
| ZOOKEEPER-182 | zookeeper_init接受空的host-port字符串并返回指向zhandle_t的有效指针。 |
| ZOOKEEPER-17 | zookeeper_init doc需要澄清 |
| ZOOKEEPER-181 | 一些Source Forge文档没有被移过:javaExample,zookeeperTutorial,zookeeperInternals |
| ZOOKEEPER-180 | 伞文章讨论的新主题文档中需要占位符部分 |
| ZOOKEEPER-179 | 程序员指南“基本操作”部分缺少内容 |
| ZOOKEEPER-178 | FLE测试。 |
| ZOOKEEPER-159 | 涵盖领导人选举的两个角落案例 |
| ZOOKEEPER-156 | 从旧维基页面更新程序员指南和acl详细信息 |
| ZOOKEEPER-154 | 概述doc中的可靠性图表需要上下文 |
| ZOOKEEPER-157 | 同行找不到现有的领导者 |
| ZOOKEEPER-155 | 改进概述doc的“zookeeper项目”部分 |
| ZOOKEEPER-140 | QuorumCnxManager中的死锁 |
| ZOOKEEPER-147 | 这是大多数[tbd ...]清除的文档版本 |
| ZOOKEEPER-150 | 动物园管理员建造破碎 |
| ZOOKEEPER-136 | 同步导致仲裁的所有粉丝都挂起。 |
| ZOOKEEPER-134 | findbugs清理 |
| 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-115 | QuorumCnxManager中的潜在NPE |
| ZOOKEEPER-114 | 清理zookeeper客户端中的丑陋事件消息 |
| ZOOKEEPER-112 | src / java / main ZooKeeper.java中嵌入了测试代码。 |
| ZOOKEEPER-39 | 在读取操作中使用Watcher对象而不是布尔值。 |
| ZOOKEEPER-97 | 支持代码生成器中的可选输出目录。 |
| ZOOKEEPER-101 | 在Hudson上集成ZooKeeper和“违规”功能 |
| ZOOKEEPER-105 | 捕获Zookeeper异常并在stderr上打印。 |
| ZOOKEEPER-42 | 将领导者选举更改为快速tcp。 |
| ZOOKEEPER-48 | auth_id现在在没有auth id存在时正确处理 |
| ZOOKEEPER-44 | 创建前缀为0的序列标志子项,以便按字典顺序对它们进行排序。 |
| ZOOKEEPER-108 | 修复仲裁上的同步操作重新排序。 |
| ZOOKEEPER-25 | Zookeeper的Fuse模块。 |
| ZOOKEEPER-58 | ClientCnxn.java上的竞争条件 |
| ZOOKEEPER-56 | 为build.xml添加三叶草支持。 |
| ZOOKEEPER-75 | 使用nabble.com注册ZooKeeper邮件列表 |
| ZOOKEEPER-54 | 在测试中删除睡眠。 |
| ZOOKEEPER-55 | build.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-76 | Commit 677109删除了cobertura库,但没有删除构建目标。 |
| ZOOKEEPER-63 | 客户关闭的竞争条件 |
| ZOOKEEPER-70 | 为ZooKeeper添加骨架forrest doc结构 |
| ZOOKEEPER-79 | 在wiki食谱页面上记录jacob的领导者选举 |
| ZOOKEEPER-73 | 将ZK wiki从SourceForge移动到Apache |
| ZOOKEEPER-72 | ZooKeeper ASF站点的初始创建/设置。 |
| ZOOKEEPER-71 | 确定要做什么重新使用ZooKeeper Changelog |
| ZOOKEEPER-68 | ZooKeeper.java中的parseACL无法解析ACL的元素,应该是lastIndexOf而不是IndexOf |
| ZOOKEEPER-130 | 更新build.xml以支持apache发布过程。 |
| ZOOKEEPER-131 | 修复旧领导人选举可以一次又一次地选出一位死去的领导人。 |
| ZOOKEEPER-137 | 客户端观察者对象可能会丢失事件 |
| ZOOKEEPER-117 | 领导选举中的线索问题 |
| ZOOKEEPER-128 | 异步客户端操作的测试覆盖率需要改进 |
| ZOOKEEPER-127 | 在配置中断服务中使用非标准选举端口 |
| ZOOKEEPER-53 | 测试在solaris上失败了。 |
| ZOOKEEPER-172 | FLE测试 |
| ZOOKEEPER-41 | 示例启动脚本 |
| ZOOKEEPER-33 | 更好的ACL管理 |
| ZOOKEEPER-49 | SetACL不起作用 |
| ZOOKEEPER-20 | 删除节点时不会触发子监视 |
| ZOOKEEPER-15 | 在build.xml中更好地处理故障:test |
| ZOOKEEPER-11 | 使用ArrayList代替List |
| ZOOKEEPER-45 | 初始导入后重构SVN存储库 |
| ZOOKEEPER-1 | 来自Yahoo!的初始ZooKeeper代码贡献 |

951

被折叠的 条评论
为什么被折叠?



