Apache > ZooKeeper
 

ZooKeeper 快照与恢复指南

Zookeeper 的设计能够抵御机器故障。一个Zookeeper集群可以从诸如机器重启等临时故障中自动恢复。对于由N个成员组成的集群,它还能容忍最多(N-1)/2个因硬件故障或磁盘损坏等导致的永久性故障。当某个成员永久失效时,它将失去对集群的访问权限。如果集群永久失去超过(N-1)/2个成员,就会发生灾难性故障并失去法定人数。一旦失去法定人数,集群将无法达成共识,因此无法继续接受更新。

为了从这类灾难性故障中恢复,Zookeeper提供了快照和恢复功能,可以从快照中重建集群。

  1. 快照和恢复操作通过管理服务器API在连接的服务器上执行
  2. 快照和恢复操作进行了速率限制,以防止服务器过载
  3. 快照和恢复功能要求对根路径进行认证和授权,且需要ALL权限。支持的身份验证方案包括digest、x509和IP。

快照

恢复集群需要从ZooKeeper集群获取快照。用户可以定期从具有最高zxid的活动服务器获取快照,并将数据流式传输到本地或外部存储/文件系统(例如S3)。

# The snapshot command takes snapshot from the server it connects to and rate limited to once every 5 mins by default
curl -H 'Authorization: digest root:root_passwd' http://hostname:adminPort/commands/snapshot?streaming=true --output snapshotFileName

恢复

恢复集群需要一个快照作为输入流。Restore功能可用于在仲裁丢失后恢复集群,或构建一个包含种子数据的全新集群。

所有成员应使用相同的快照进行恢复。以下是推荐的步骤:

# The restore command takes a snapshot as input stream and restore the db of the server it connects. It is rate limited to once every 5 mins by default
curl -H 'Content-Type:application/octet-stream' -H 'Authorization: digest root:root_passwd' -POST http://hostname:adminPort/commands/restore --data-binary "@snapshotFileName"