4.ZooKeeper 3.0.0发行说明及版本升级

来源:互联网 发布:windows上软件无法卸载 编辑:程序博客网 时间:2024/06/05 21:06

升级到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。*),并认为这是一个合并一些我们已拒绝的更改的好时机。因此,当从ZooKeeper的2.2.1版本迁移到3.0.0版本时,将需要以下内容。

  • 迁移客户端代码

  • 迁移服务器数据

  • 迁移服务器配置

迁移客户端代码

底层的客户端 - 服务器协议在3.0版本的ZooKeeper中已经更改。因此,客户端必须与服务群集一起升级,以确保系统正常运行(旧的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(通常是import语句)的Java代码,

  2. 客户端ZooKeeper API中使用的许多常量使用枚举(而不是int)重新指定。见ZOOKEEPER-7,ZOOKEEPER-132和ZOOKEEPER-139的全部细节

  3. ZOOKEEPER-18删除了KeeperStateChanged,而改用KeeperStateDisconnected

另请参阅当前的Java API

C API

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

迁移服务器数据

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

  • ZOOKEEPER-27服务器和客户端的唯一数据库标识符

  • ZookeePER-32 ZooKeeper数据的CRC

  • ZOOKEEPER-33更好的ACL管理

  • 日志/快照文件中的ZOOKEEPER-38标题(版本+)

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

注意

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

  1. 关闭ZooKeeper服务器集群。

  2. 备份您的<dataLogDir>和<dataDir>目录

  3. 使用运行升级

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

    要么

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

    其中<dataLogDir>是存储所有事务日志(log。*)的目录。<dataDir>是存储所有快照(快照。*)的目录。

  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数据库上启动ZooKeeper 3.0而不从2.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请参阅 管理员指南的“ 集群选项”部分,特别是electionAlg 和server.X属性。

你要么需要显式设置electionAlg到它的先前的默认值0或更改server.X选项,包括领导人选举端口。

0 0
原创粉丝点击